【问题标题】:Can I use INSERT ALL with multiple recordtype variables?我可以将 INSERT ALL 与多个记录类型变量一起使用吗?
【发布时间】:2019-07-10 12:31:49
【问题描述】:

给定一个 PL/SQL 块,我可以在其中访问 2 个记录类型变量,我想在单个语句中将这 2 个记录插入到同一个表中,但我尝试使用 INSERT ALL 迄今为止失败了。是否可以将INSERT ALL 与记录变量一起使用?

下面是一些使用专用插入的代码:

DECLARE
    mProperty1 MyTable%ROWTYPE;
    mProperty2 MyTable%ROWTYPE;
    ...
BEGIN
    ...
    INSERT INTO MyTable VALUES mProperty1;
    INSERT INTO MyTable VALUES mProperty2;
    ...
END;

如果我尝试将语句转换为 INSERT ALL,则会失败并显示错误消息:

DECLARE
    mProperty1 MyTable%ROWTYPE;
    mProperty2 MyTable%ROWTYPE;
    ...
BEGIN
    ...
    INSERT ALL
          INTO MyTable VALUES mProperty1
          INTO MyTable VALUES mProperty2
          SELECT 1 FROM DUAL;
    ...
END;

ORA-06550:第 14 行,第 60 列: PLS-00382:表达式类型错误 ORA-06550:第 13 行,第 60 列: PLS-00382:表达式类型错误 ORA-06550:第 13 行,第 60 列: PL/SQL: ORA-00904: : 无效标识符 ORA-06550:第 12 行,第 7 列: PL/SQL:忽略 SQL 语句

我是否遗漏了一些明显的东西?有没有办法让这个声明生效?

【问题讨论】:

  • @KedarLimaye 我不完全确定该线程在这种情况下有何帮助。它似乎没有使用 INSERT ALL 并且正在处理光标,这不是我在这里使用的。
  • 您使用 insert all 的任何具体原因?
  • @KedarLimaye 在这种特殊情况下,我只是想让我的脚本尽可能简短和高效,所以我直接假设 API 与普通的 INSERT 正交。

标签: oracle plsql bulkinsert


【解决方案1】:

我尝试过使用不同的方法,但只有以下方法成功了:

方法一:

使用来自%ROWTYPE 字段的特定记录名称

DECLARE
    mProperty1 MyTable%ROWTYPE;
    mProperty2 MyTable%ROWTYPE;
BEGIN
    mProperty1.COL1 := 1;
    mProperty2.COL1 := 2;
    INSERT ALL 
    INTO  MyTable VALUES (mProperty1.col1)
    INTO  MyTable VALUES (mProperty2.col1)
    SELECT 1 FROM DUAL;
END;
/
-- may be bad choice but you can use like this

方法二:

如果您担心性能,那么您也可以使用这种方法:

DECLARE
    TYPE mProperty_TYPE IS TABLE OF MyTable%ROWTYPE;
    mProperty mProperty_TYPE;
BEGIN
    mProperty := mProperty_TYPE();
    mProperty.EXTEND(2);
    mProperty(1).COL1 := 3;
    mProperty(2).COL1 := 4;
    FORALL I IN 1..mProperty.COUNT 
    INSERT INTO MyTable VALUES mProperty(I);
END;
/

db<>fiddle demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多