gpt4 book ai didi

oracle - 我可以将 INSERT ALL 与多个记录类型变量一起使用吗?

转载 作者:行者123 更新时间:2023-12-01 04:27:43 26 4
gpt4 key购买 nike

给定一个可以访问 2 个记录类型变量的 PL/SQL 块,我想在单个语句中将这 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: line 14, column 60: PLS-00382: expression is of wrong type ORA-06550: line 13, column 60: PLS-00382: expression is of wrong type ORA-06550: line 13, column 60: PL/SQL: ORA-00904: : invalid identifier ORA-06550: line 12, column 7: PL/SQL: SQL Statement ignored



我错过了一些明显的东西吗?有没有办法让这个声明起作用?

最佳答案

我尝试过使用不同的方法,但仅通过以下方法取得了成功:

方法一:

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

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

关于oracle - 我可以将 INSERT ALL 与多个记录类型变量一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56970786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com