使用UNION ALL时,ORACLE命令将永远占用

时间:2017-08-17 08:53:56

标签: c# oracle oracle11g insert union-all

我目前正在尝试创建漂亮且快速运行的SQL命令,并找到了一些我无法解释的内容。

导致问题的SQL代码:

INSERT INTO FIELD_TYPE (FIELD_TYPE_ID, FIELD_VALUE_TYPE_ID, CREATOR)
SELECT :p0, :p1, :p2 FROM DUAL
UNION ALL
SELECT :p3, :p4, :p5 FROM DUAL
UNION ALL
SELECT :p6, :p7, :p8 FROM DUAL
UNION ALL
SELECT NULL, NULL, NULL FROM DUAL WHERE 1 = 0

解释

FIELD_TYPE_ID NUMBER NOT NULL(PK)

FIELD_VALUE_TYPE NUMBER NOT NULL

CREATOR NUMBER NOT NULL(FK)

我的问题:

我的C#应用​​程序获取要插入的项目数组。对于每个项目,我添加了SELECTUNION ALL,如上所示。 最后一步是添加SELECT NULL, NULL, NULL FROM DUAL WHERE 1 = 0,以便在没有要插入的项目传递给方法时没有语法错误。

如果不添加emtpy集的选择,一切都像魅力一样。 一旦我添加了emtpy集的选择,命令的执行就会永远执行。我的第一个猜测是使用NULL可能是一个问题,但我不完全确定。

任何人都可以解释这种行为吗?我能以聪明的方式避免这种情况吗? 上面显示的代码是在基类中生成的,该基类不知道要插入的表的列类型。如果这是我的问题的原因,这使得很难确定要使用的默认值而不是NULL

我使用的是来自NuGet的ORACLE Managed DataAccess(ODP)和一个ORACLE 11g DB。

不会帮助我的常见答案:)

  • 使用ORM框架

0 个答案:

没有答案