В настоящее время я пытаюсь написать хранимую процедуру, которая вставляет или обновляет несколько строк в моей базе данных. Я передаю строки с помощью входного параметра таблицы, но я застрял в том, как передать эти строки команде 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","valueColumn")
VALUES(b."keyColumn",b."valueColumn);
END;
Я получаю ошибки, подобные этойпри создании хранимой процедуры:
ОШИБКА LINE / COL
3/5 PL / SQL: оператор SQL игнорируется
4/26 PL / SQL: ORA-00942: таблица или представление не существует
Я пытался найти документацию о том, как это сделать, но в настоящее время у меня нет идей, где искать.