我正在使用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行收到错误。我不确定我需要在这里做些什么改变。
答案 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'');';