无法 运行 SQL 在 Visual Studio 中查询,但可以在 Oracle SQL 开发人员中使用

Can't run SQL query in Visual Studio, but works in Oracle SQL Developer

我基本上在 stringbuilder 对象中生成了一个查询,它看起来完全像这样:

SQL_Insert

INSERT INTO S1589_XML_Ptdes(ID, VALID_FROM_DATE, VALID_TO_DATE, SYMBOLIC_NAME, SHORT_NAME_FRENCH, SHORT_NAME_DUTCH, LONG_NAME_FRENCH, LONG_NAME_DUTCH, PTCAR_ID, DISTANCE_FROM_PTCAR, TYPE, LAST_UPDATE_DATE)
WITH S1589_XML_Ptdes AS (
select '142','1996-06-02','2006-05-31','111001','Quais','Perrons','Quais Gand St Pierre','Perrons Gent St Pieters','455','0','2','2010-06-04T06:21:35' from dual 
union all select '142','2006-06-01','2010-02-10','111001','Quais','Perrons','Quais Gand St Pierre','Perrons Gent St Pieters','455','-38','2','2010-06-04T06:21:35' from dual 
union all select '142','2010-02-11','2011-04-20','111001','Gand St. P','Gent St.P','Gand-Saint-Pierre','Gent-Sint-Pieters','455','-38','2','2011-04-26T09:08:00' from dual 
union all select '142','2011-04-21','2014-01-19','111001','Gent St.P','Gent St.P','Gent-Sint-Pieters','Gent-Sint-Pieters','455','-38','2','2014-01-20T14:06:39' from dual 
union all select '142','2014-01-20','2015-12-17','111001','Gent St.P','Gent St.P','Gent-Sint-Pieters','Gent-Sint-Pieters','455','0','2','2015-12-16T18:10:31' from dual 
) SELECT * FROM S1589_XML_Ptdes; COMMIT;

但是当我 运行 以下行时: return con.Execute(SQL_Insert.ToString()); 我得到以下错误:

Oracle.ManagedDataAccess.Client.OracleException: 'ORA-00933: SQL command not properly ended'

当我在 Oracle SQL Developer 中执行此查询时,它将插入所有 5 行并完美提交,没有任何错误消息或任何内容。

有什么关于我在这里遗漏的建议吗?

我正在使用 Dapper 作为 ORM,以防这可能是有用的信息。

您不需要 sub-query 分解子句,Oracle 不会在同一语句中接受两个命令(在本例中为 INSERTCOMMIT)。 SQL 开发人员会将它们作为两个单独的语句进行处理:一个 INSERT 语句后跟一个 COMMIT 语句。

因此,删除 COMMIT 语句:

INSERT INTO S1589_XML_Ptdes(ID, VALID_FROM_DATE, VALID_TO_DATE, SYMBOLIC_NAME, SHORT_NAME_FRENCH, SHORT_NAME_DUTCH, LONG_NAME_FRENCH, LONG_NAME_DUTCH, PTCAR_ID, DISTANCE_FROM_PTCAR, TYPE, LAST_UPDATE_DATE)
  select '142', DATE '1996-06-02', DATE '2006-05-31','111001','Quais','Perrons','Quais Gand St Pierre','Perrons Gent St Pieters','455','0','2', TIMESTAMP '2010-06-04 06:21:35' from dual union all
  select '142', DATE '2006-06-01', DATE '2010-02-10','111001','Quais','Perrons','Quais Gand St Pierre','Perrons Gent St Pieters','455','-38','2', TIMESTAMP '2010-06-04 06:21:35' from dual union all
  select '142', DATE '2010-02-11', DATE '2011-04-20','111001','Gand St. P','Gent St.P','Gand-Saint-Pierre','Gent-Sint-Pieters','455','-38','2', TIMESTAMP '2011-04-26 09:08:00' from dual union all
  select '142', DATE '2011-04-21', DATE '2014-01-19','111001','Gent St.P','Gent St.P','Gent-Sint-Pieters','Gent-Sint-Pieters','455','-38','2', TIMESTAMP '2014-01-20 14:06:39' from dual union all
  select '142', DATE '2014-01-20', DATE '2015-12-17','111001','Gent St.P','Gent St.P','Gent-Sint-Pieters','Gent-Sint-Pieters','455','0','2', TIMESTAMP '2015-12-16 18:10:31' from dual;

如果您的 c# 连接未设置为 auto-commit,那么您可能需要发出显式提交。

此外,如果您要插入 DATE 值,那么您应该使用 DATE/TIMESTAMP 文字,并且您应该检查将数字作为字符串插入是否合适。