当我运行这个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'');';发布于 2017-01-09 18:28:55
在构建要运行立即执行的字符串时,必须小心将所有内容正确引用。在您的示例中,它认为它需要将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;您可以在这里的文件中找到更多信息。
注意:我假设您需要在这个存储过程中实现一些更复杂的逻辑,因为逐行循环要比insert..select慢得多。通常是数量级的。
https://stackoverflow.com/questions/41480154
复制相似问题