使用存储过程将值插入netezza

时间:2014-08-11 14:52:04

标签: stored-procedures plsql netezza

我正在使用netezza数据库,并且要求在加利福尼亚州为商店插入Y标志。我写了以下程序

CREATE OR REPLACE PROCEDURE MY_NEW_PROCEDURE() RETURNS BOOL
EXECUTE AS OWNER LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    rec RECORD;
BEGIN
FOR rec in SELECT * from test_table 
LOOP
if rec.state_code ='CA'
EXECUTE IMMEDIATE 'INSERT INTO test_table (california_stores)' || 'values('y')';
END LOOP;
END;
END_PROC;

当我使用调用MY_NEW_PROCEDURE()调用该过程时,我在EXECUTE IMMEDIATE行收到错误。我不确定我需要在这里做些什么改变。

2 个答案:

答案 0 :(得分:0)

不知道netezza,但下面是我用来测试它的过程(使用SQL开发人员)。

对我来说很好,虽然更新行以将california_stores设置为' Y'而不是使用california_stores =' Y'来插入新行更有意义。对于你拥有的每个calafornia商店.....

CREATE OR REPLACE PROCEDURE "MY_NEW_PROCEDURE" as
    rec test_table2%rowtype;
BEGIN
   FOR rec in (SELECT * from test_table2) LOOP
      if rec.state_code = 'CA' then
         EXECUTE IMMEDIATE 'INSERT INTO test_table2 (california_stores)' || 'values(''y'')';
      end if;
   END LOOP;
END;

答案 1 :(得分:0)

你没有发布第二个错误,但它看起来像你的插入语句不会做你想要的任何事情。如果rec变量包含属性state_code并且您要将单个值插入test_table,那么除california_stores中的“Y”外,该记录将为空。

我猜你现在因为插入语句insert into test_table (california_stores)values('y')中的间距或者没有用分号终止execute语句而得到错误。该行的plsql应为

execute immediate 'insert into test_table (california_stores) values (''y'');';