【发布时间】:2018-12-01 15:26:13
【问题描述】:
您可以向具有未知结构的表发出 FORALL 批量 INSERT 吗?这意味着,您可以在 FORALL 构造中动态构建 INSERT 命令而不知道编译时的字段数吗?
在运行时检索字段的数量和名称并存储在集合中:
TYPE RowType is TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(50);
TYPE TableType is TABLE OF RowType;
my_table TableType;
所以在运行时 my_table 可以这样填充,例如:
my_table(1)('FIELD1') = 'VALUE1A';
my_table(1)('FIELD2') = 'VALUE2A';
my_table(1)('FIELD3') = 'VALUE3A';
my_table(2)('FIELD1') = 'VALUE1B';
my_table(2)('FIELD2') = 'VALUE2B';
my_table(2)('FIELD3') = 'VALUE3B';
my_table(3)('FIELD1') = 'VALUE1C';
my_table(3)('FIELD2') = 'VALUE2C';
my_table(3)('FIELD3') = 'VALUE3C';
因此应该批量执行的插入语句是:
INSERT INTO TABLENAME (FIELD1,FIELD2,FIELD3) VALUES (VALUE1A,VALUE2A,VALUE3A);
INSERT INTO TABLENAME (FIELD1,FIELD2,FIELD3) VALUES (VALUE1B,VALUE2B,VALUE3B);
INSERT INTO TABLENAME (FIELD1,FIELD2,FIELD3) VALUES (VALUE1C,VALUE2C,VALUE3C);
编辑:您是否阅读了这些问题,或者您只是阅读了标题中的几个字?链接的问题询问如何绑定变量,此问题询问如何批量发布动态语句。是的,两个问题中都有“插入”和“表格”这两个词。
【问题讨论】:
-
“你能在编译时不知道字段数的情况下动态构建 FORALL 结构中的 INSERT 命令吗?” 不能。
标签: sql oracle plsql bulkinsert