PL / SQL批量插入到结构未知的表中

时间:2018-12-01 15:26:13

标签: sql oracle plsql bulkinsert

您可以对结构未知的表发出FORALL批量INSERT吗?就是说,您可以在FORALL构造中动态构建INSERT命令而无需在编译时知道字段数吗?

在运行时检索字段的编号和名称,并将其存储在集合中

import subprocess
import os
import sys

def main():
    p = subprocess.Popen(['python', 'b.py'], stdin=subprocess.PIPE)
    res = ""
    while res != "exit":
        res = os.fsencode(input(">> "))
        p.stdin.write(res)

if __name__ == "__main__":
    main()

因此在运行时,my_table可以用这种方式填充:

$.mobile.loadingMessage = false;

因此应批量执行的插入语句为:

this.state = {
    value: "def foo():<br/>    print('this is a function')<br/><br/>foo()"
}

编辑:您是否还阅读了问题,或者只是阅读了标题中的几个单词?链接的问题询问如何绑定变量,此问题询问如何批量发布动态语句。是的,两个问题中都有“插入”和“表格”两个词。

1 个答案:

答案 0 :(得分:2)

否,您不能动态地构建和执行FORALL...INSERT...语句。您可以,但是,可以动态构建以下形式的INSERT语句:

INSERT ALL
  INTO TABLENAME (FIELD1,FIELD2,FIELD3) VALUES (VALUE1A,VALUE2A,VALUE3A)
  INTO TABLENAME (FIELD1,FIELD2,FIELD3) VALUES (VALUE1B,VALUE2B,VALUE3B)
  INTO TABLENAME (FIELD1,FIELD2,FIELD3) VALUES (VALUE1C,VALUE2C,VALUE3C)

或者,如果要插入表中的数据位于另一个表中,则可能会找到类似{p>

INSERT...(subquery)

或者您可以使用类似于

的MERGE语句
INSERT INTO TABLENAME
  SELECT FIELD1, FIELD2, FIELD3
    FROM OTHER_TABLE
    WHERE something <> something_else

这将基于MERGE INTO TABLENAME t USING (SELECT FIELD1, FIELD2, FIELD3 FROM OTHER_TABLE) o ON (t.FIELD1 = o.FIELD1) WHEN NOT FOUND THEN INSERT (FIELD1, FIELD2, FIELD3) VALUES (o.FIELD1, o.FIELD2, o.FIELD3) 子句中指定的数据和USING谓词中的匹配条件进行大量插入。

因此,可能有一些方法可以执行您想要的操作,但是在不知道数据源的具体信息以及在将数据插入数据库之前如何处理这些数据的情况下,很难说出它们是否会申请。

好运。