2016-03-23 7 views
2

次の要求は、SQL Serverでは正しく記述されていますが、Oracleでは正しく記述されていません。SQLの列の名前をSQL ServerとOracleの両方に対して変更します

SELECT col1 AS 'col1_new_title', 
     col2 AS 'col2_new_title', 
     col3 
FROM table 

Oracleの場合、新しい名前が前に付いた等号である必要があります。

毎回書き換えなくても、両方の環境で実行可能になるようにリクエストを書き込む方法はありますか?

+0

厳密には正確ではありませんが、そのために単一引用符を使用しないでください。代わりに二重引用符を使用してください。これらは、DDLを必要とする列の名前を実際に変更していない列別名です。 –

+0

"* Oracleの場合、新しい名前が付いた等号が必要です。*" - いいえ、絶対にありません。 –

答えて

1

Oracleで文が動作しない理由は、一重引用符が原因です。大文字と小文字を区別したい場合は、SQL識別子で二重引用符で囲む必要があります。一重引用符は文字列定数用です。

だから、このSQL Serverの場合

(実際識別子に対するSQLの標準規則を次のいずれかの DBMS上の)両方のシステム上で動作するはず

SELECT col1 AS "col1_new_title", 
     col2 AS "col2_new_title", 
     col3 
FROM table 

の次は「ANSI_QUOTES」設定オプションが必要です(または私は正確な名前を思い出すことはありません)ONに設定する - 私は最近のSQL Serverのバージョンではデフォルトと思う。その後、必要最小限のアプローチは、上記のでしょうあなたは何のスペースを持っていない場合は

SELECT col1 AS col1_new_title, 
     col2 AS col2_new_title, 
     col3 
FROM table 
+0

すばやく、完全な - 私が学ぶための余分な説明と。それ以上には期待できません!どうもありがとう。 – user3341592

+1

シングルクォートの使用はSQL Serverでは受け入れますが、識別子のドキュメントでは二重引用符または角括弧を使用しています。だから、messsgeは絶対にカラムエイリアスの一重引用符を避けます。 –

0
SELECT 
     col1 col1_new_title 
    , col2 col2_new_title 
    , col3 
FROM table 

と予約語を避ける:

あなたはUPPER気にしないのであれば/小文字の識別子が単にまったく引用符を使用しないでくださいほとんどのSQL方言で動作します。

注意oracleでは、多くの場合、asは必要なく、実際には表の別名などの特定の状況では受け入れません。

この裸のアプローチでは問題が解決しない場合は、列の別名に二重引用符を追加してください。

関連する問題