我正在尝试通过ODP.NET执行SQL查询来创建表,但我总是得到一个ORA-00911'无效字符'错误。即使SQL查询本身没有换行符,异常中的Errors对象也始终具有文本“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
);
删除了换行符
答案 0 :(得分:8)
Other people遇到过这个问题 - ODP.NET在文本命令中不支持多个SQL语句。解决方案是将它包装在PL / SQL块中,并在每个语句周围使用EXECUTE IMMEDIATE。这种缺乏支持;对我来说似乎非常愚蠢,并没有改善我对oracle开发团队的看法。
此外,这似乎是oracle本身的一个问题,因为我在MS和ODBC oracle客户端遇到了同样的问题。
答案 1 :(得分:1)
由于某种原因,我遇到了这个问题,你必须在一行上有代码。 我有strSQL =“stuff”+ “ 更多东西” 我不得不把它放在一条线上。 strSQL =“更多的东西”
有些人如何读取cr / lf。
答案 2 :(得分:1)
将您的sql包装在开始块中。
Dim sqlInsert As String = ""
For i = 1 To 10
sqlInsert += "INSERT INTO MY_TABLE (COUNT) VALUES (" & i & "); "
Next
Call ExecuteSql("BEGIN " & sqlInsert & " END;")
答案 3 :(得分:0)
你的引用没问题(它只是强迫Oracle将你的对象名称视为区分大小写,即你写的方式大写)但我完全不确定你是否允许用这种方式定义NUMBER *
答案 4 :(得分:0)
我想知道是不是sql中的“*”你在创建时没有尝试过*的调用吗?我敢打赌它是ODP.Net驱动程序的另一个“功能”