我当前正在尝试编写一个存储过程,该过程将多行插入或更新到数据库中。我通过表输入参数传递行,但是我在如何将这些行传递给MERGE命令方面陷入困境。
此命令运行正常:
MERGE INTO dbo.EntryTable a
USING (SELECT 'abc' "keyColumn",'def' "valueColumn" FROM DUAL) b
ON (a."keyColumn" = b."keyColumn")
WHEN MATCHED THEN UPDATE SET a."valueColumn" = b."valueColumn"
WHEN NOT MATCHED THEN
INSERT ("keyColumn","valueColumn")
VALUES(b."keyColumn",b."valueColumn);
要将其放入存储过程中,我创建了一个表类型:
CREATE OR REPLACE TYPE entry_type AS OBJECT
(
"keyColumn" NVARCHAR2(3),"valueColumn" NVARCHAR2(3)
);
CREATE OR REPLACE TYPE entry_type_list AS TABLE OF entry_type;
但是,一旦我尝试在这样的存储过程中使用它:
CREATE OR REPLACE PROCEDURE set_entry_list (entries entry_type_list) AS
BEGIN
MERGE INTO dbo.EntryTable a
USING (SELECT * FROM entry_type_list) b
ON (a."keyColumn" = b."keyColumn")
WHEN MATCHED THEN UPDATE SET a."valueColumn" = b."valueColumn"
WHEN NOT MATCHED THEN
INSERT ("keyColumn",b."valueColumn);
END;
在创建存储过程时出现这样的错误:
LINE / COL ERROR
3/5 PL / SQL:忽略了SQL语句
4/26 PL / SQL:ORA-00942:表或视图不存在
我试图找到有关如何执行此操作的文档,但目前我不知道在哪里寻找。