首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在netezza存储过程中执行立即不向表插入值。

在netezza存储过程中执行立即不向表插入值。
EN

Stack Overflow用户
提问于 2017-01-05 08:17:50
回答 1查看 2.4K关注 0票数 0

当我运行这个Netezza存储过程时,我会得到一个错误。

属性“SOME_VALUE”未找到

根据要求,我必须从一个表(TABLE_A)获得值,然后插入到另一个表(TABLE_B)中。

这是一种程序:

代码语言:javascript
复制
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()

在这里,我可以插入一个字符串。但是,我需要插入不同的值,这取决于上面提到的其他表格。

代码语言:javascript
复制
EXECUTE IMMEDIATE 'INSERT INTO TABLE_B(COLUMN_B) values( ''Y'');';
EN

回答 1

Stack Overflow用户

发布于 2017-01-09 18:28:55

在构建要运行立即执行的字符串时,必须小心将所有内容正确引用。在您的示例中,它认为它需要将SOME_VALUE视为属性/列,并且不能使用该名称的任何列。

将列引用包装在quote_literal()中,它将解释列的内容并引用--为您正确地转义它。

代码语言:javascript
复制
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慢得多。通常是数量级的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41480154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档