web-dev-qa-db-ja.com

ORA-00911:文字が無効です

Oracle(11g)データベースに次のような2つのテーブルを作成します。

    create table "test" ("id" int);
    create table test ("id" int);

その後、私のC#プログラムに問題があります:

    OracleConnection conn = new OracleConnection(-myConnectionString-);
    conn.Open();
    OracleCommand command = new OracleCommand("select * from test;", conn);
    var v = command.ExecuteReader(); 
    OracleCommand command = new OracleCommand("select * from \"test\";", conn);
    var v = command.ExecuteReader(); 

両方のcommand.ExecuteReader()に対して、「ORA-00911:無効な文字」エラーがあります。

58
XlbrlX

削除; (セミコロン)SQL文字列の末尾から

161
Antonio Bakula

他の人が1つのコマンドに複数のステートメントを含める方法を探している場合、ステートメントをbeginおよびendで囲む必要があります。これにより、セミコロンによる無効な文字エラーが停止します。例えば:

var command = new OracleCommand(@"
    begin
    select * from test;
    select * from test2;
    end;")
33
John Galambos

なぜクエリでセミコロンを使用しているのか...無効な文字と見なされるだけです.....クエリからセミコロン(;)を削除して、次のようにする必要があります。

   OracleConnection conn = new OracleConnection(-myConnectionString-);
   conn.Open();
    OracleCommand command = new OracleCommand("select * from test", conn);
    var v = command.ExecuteReader(); 
    OracleCommand command = new OracleCommand("select * from \"test\"", conn);
    var v = command.ExecuteReader(); 

このエラーの詳細については、 here と読むことができます。

1
Akash KC

これはこの男の問題ではありませんが、うまくいけば、これはそこにいる誰かを助けるでしょう:

次のように、インラインコメント内に単一引用符が隠されていると、この問題がよく発生します。

select foo 
from bar
where 
/* some helpful comment with a "can't" or somesuch */
baz='qux'

コメント内の比類のない一重引用符は、あらゆる種類のドラマを引き起こします。Oracleは、あなたがそれを理解するのを助けようとはしません。

1
inanutshellus