当我运行这个Netezza存储过程时,我收到错误
找不到属性'SOME_VALUE'
根据要求,我必须从一个表(TABLE_A
)获取值并插入另一个表(TABLE_B
)。
这是程序:
create or replace procedure my_proc()
returns boolean
execute as owner
language NZPLSQL
as
BEGIN_PROC
declare rec RECORD ;
BEGIN
for rec in SELECT * from TABLE_A loop
EXECUTE IMMEDIATE
'INSERT INTO TABLE_B(COLUMN_B)
values( '|| rec.COLUMN_A_OFTABLE_A || ')';
END LOOP;
END;
END_PROC;
execute my_proc()
在下面,我可以插入一个字符串。但是我需要根据上面提到的其他表插入不同的值。
EXECUTE IMMEDIATE 'INSERT INTO TABLE_B(COLUMN_B) values( ''Y'');';
答案 0 :(得分:0)
当构建一个你将要执行EXECUTE IMMEDIATE的字符串时,你必须小心地正确引用所有内容。在您的情况下,它认为它需要将SOME_VALUE视为属性/列,并且它不能具有该名称的任何列。
在quote_literal()中包装您的列引用,它将解释您的列的内容并引用 - 为您正确地转义它。
create or replace procedure my_proc()
returns boolean
execute as owner
language NZPLSQL
as
BEGIN_PROC
declare rec RECORD ;
BEGIN
for rec in SELECT * from TABLE_A loop
EXECUTE IMMEDIATE
'INSERT INTO TABLE_B(COLUMN_B)
values( '|| quote_literal(rec.COLUMN_A_OFTABLE_A) || ')';
END LOOP;
END;
END_PROC;
您可以在the documentation here中找到更多信息。
注意:我假设你有一些更复杂的逻辑要在这个存储过程中实现,因为逐行循环将比insert..select慢得多。通常是一个数量级。