使用存储过程将值插入到 netezza
Posted
技术标签:
【中文标题】使用存储过程将值插入到 netezza【英文标题】:Inserting values in to netezza using a stored procedure 【发布时间】:2014-08-11 14:52:04 【问题描述】:我正在使用 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;
当我使用 call MY_NEW_PROCEDURE() 调用该过程时,我在 EXECUTE IMMEDIATE 行出现错误。我不确定我需要在这里做些什么改变。
【问题讨论】:
我只想根据商店位置插入一个标志。如果存储过程不是这样的。我也欢迎其他方式来实现这一点。谢谢。 看起来您需要在“y”周围转义单引号。大概应该是 values(''y'')'; @ShaunPeterson 我逃脱了 Y 并执行了它。我收到以下错误 您没有发布新错误? 【参考方案1】:不知道 netezza,但下面是我用来测试它的过程(使用 SQL 开发人员)。
对我来说效果很好,尽管更新行以将 california_stores 设置为“Y”而不是为您拥有的每个加州商店插入一个 california_stores = 'Y' 的新行更有意义.....
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;
【讨论】:
【参考方案2】:您没有发布第二个错误,但在我看来,您的插入语句无论如何都不会做您想做的事。如果rec
变量包含属性state_code
并且您正在向test_table
插入单个值,那么除了california_stores
中的“Y”之外,该记录将为空。
我猜你现在遇到了一个错误,要么是因为插入语句insert into test_table (california_stores)values('y')
中的空格,要么是因为你没有用分号终止执行语句。该行的plsql应该是
execute immediate 'insert into test_table (california_stores) values (''y'');';
【讨论】:
以上是关于使用存储过程将值插入到 netezza的主要内容,如果未能解决你的问题,请参考以下文章