私は最近、MSSQLデータベースをOracleデータベースに移行するように求められました。Oracleクライアントでは、列名のまわりにかっこが必要ですか?
私はsqlクエリを実行するために従来の方法を使用しています。
何かの理由で私にはわかりませんが、Oracleではカラム名の前後にカッコを入れる必要があります(なぜですか?) これには回避策がありますか?代わりに、VSサーバーエクスプローラで、最後の問い合わせが
SELECT "level_1", "element_id"
FROM "tnuot_menu_tree"
WHERE ("level_1" IN
(SELECT "level_1" FROM "tnuot_menu_tree" mt
WHERE ("element_id" IN
(SELECT "element_tree_id" FROM "tnuot_menu_elements"
WHERE (UPPER("element_link") LIKE '%DEFAULT.ASPX')))))
AND ("level_2" = 0) AND ("level_3" = 0)
に「翻訳」を取得します
次のコードが原因(MSSQLの下でうまく動作するために使用される)括弧
using (var msq = new OracleConnection(sConnectionString))
{
msq.Open();
OracleCommand msc = msq.CreateCommand();
msc.CommandText = @"SELECT level_1,element_id FROM tnuot_menu_tree
WHERE level_1 IN
(SELECT mt.level_1 FROM tnuot_menu_tree mt
WHERE mt.element_id IN
(SELECT element_tree_id FROM tnuot_menu_elements
WHERE UPPER(element_link) LIKE :url))
AND level_2 = 0 AND level_3 = 0";
msc.Parameters.Add("url", SqlDbType.VarChar);
msc.Parameters["url"].Value = "%" + sName.ToUpper();
OracleDataReader mrdr = msc.ExecuteReader();
while (mrdr.Read())
{
sResult.arDirectResult.Add(mrdr[0].ToString());
sResult.arDirectResult.Add(mrdr[1].ToString());
break;
}
msc.Dispose();
mrdr.Dispose();
msq.Close();
}
で失敗します
これはうまくいきます。
この厄介な作業を取り除く方法に関するアイデアはありますか?
最初のコードブロックを実行すると動作しますか? –
@HansKesting、nope - ORA-00942:テーブルまたはビューが存在しません。 – Shai
私はテーブルが大文字と小文字を区別して作成されていると思いますので、それを照会するには引用符が必要です。 '' tnuot_menu_elements "'は大文字と小文字の区別を保証します。悲しいことに、 'CREATE TABLE"の結果tnuot_menu_elements "..' – V4Vendetta