3

我正在尝试通过 ODP.NET 执行 SQL 查询以创建表,但我总是收到 ORA-00911 'invalid character' 错误。异常中的 Errors 对象始终具有文本“ORA-00911: invalid character\n”,即使 SQL 查询本身没有换行符。

我正在执行 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 语句。解决方案是将其包装在一个 PL/SQL 块中,并在每个语句周围使用 EXECUTE IMMEDIATE。这缺乏对 ; 对我来说似乎非常愚蠢,并没有改善我对甲骨文开发团队的看法。

此外,这似乎是 oracle 本身的问题,因为我对 MS 和 ODBC oracle 客户端也有同样的问题。

于 2009-10-06T13:05:58.773 回答
1

由于某种原因,我遇到了这个问题,你必须在一行上有代码。我有 strSQL = "stuff" + "more stuff" 我必须把它放在一行上。strSQL = "填充更多东西"

它是如何读取 cr/lf 的。

于 2012-05-03T19:54:54.740 回答
1

将您的 sql 包装在Begin块中。

Dim sqlInsert As String = ""
For i = 1 To 10
    sqlInsert += "INSERT INTO MY_TABLE (COUNT) VALUES (" & i & "); "
Next

Call ExecuteSql("BEGIN " & sqlInsert & " END;")
于 2013-07-02T17:04:16.710 回答
0

您的引号没问题(它只是强制 Oracle 将您的对象名称视为区分大小写,即按照您编写它的方式大写)但我完全不确定您是否可以使用 * 来定义 NUMBER。

于 2009-10-06T11:38:56.733 回答
0

我想知道它是否是 sql 中的“*”您是否尝试过在创建中没有 * 的调用?我敢打赌,这是 ODP.Net 驱动程序的另一个“功能”

于 2009-10-06T13:12:13.833 回答