3

ODP.NET を介して SQL クエリを実行してテーブルを作成しようとしていますが、常に ORA-00911 '無効な文字' エラーが発生します。SQL クエリ自体に改行がない場合でも、例外のエラー オブジェクトには常に「ORA-00911: 無効な文字\n」というテキストが含まれます。

SQLを実行しているコードは次のとおりです。

using (OracleConnection conn = new OracleConnection(<connection string>) {
using (OracleCommand command = conn.CreateCommand()) {
    conn.Open();
    command.CommandText = queryString;

    command.ExecuteNonQuery();         // exception always gets thrown here
}

queryString には単一の CREATE TABLE ステートメントが含まれており、SQL Developer を介して実行すると正常に動作します。

編集:私が実行しているSQLはこれです:

CREATE TABLE "TESTSYNC"."NEWTABLE" (
  "COL1" NUMBER(*,0) NULL,
  "COL2" NUMBER(*,0) NULL
);

改行を削除して

4

5 に答える 5

8

他の人がこの問題に遭遇しました.ODP.NETはテキストコマンドで複数のSQLステートメントをサポートしていません. 解決策は、各ステートメントを EXECUTE IMMEDIATE で PL/SQL ブロックにラップすることです。このサポートの欠如; 私には信じられないほど骨が折れるように見え、オラクル開発チームに対する私の意見は改善されていません。

さらに、MS および ODBC オラクル クライアントでも同じ問題が発生しているため、これはオラクル自体の問題のようです。

于 2009-10-06T13:05:58.773 に答える
1

何らかの理由でこの問題が発生しました。コードを 1 行に収める必要があります。strSQL = "stuff" + "more stuff" があったので、1 行にまとめなければなりませんでした。strSQL = "もっと詰め込む"

cr/lf をどのように読み取るか。

于 2012-05-03T19:54:54.740 に答える
0

SQLの「*」なのかしら、作成時に*なしで呼び出しを試しましたか?ODP.Netドライバーのもう1つの「機能」だと思います

于 2009-10-06T13:12:13.833 に答える
0

引用符は問題ありません(Oracleにオブジェクト名を大文字と小文字を区別して扱うように強制するだけです。つまり、大文字を書いた方法です)が、NUMBERを*でそのように定義することが許可されているかどうかはまったくわかりません。

于 2009-10-06T11:38:56.733 に答える