【问题标题】:Can someone guide on looping from a select statement in netezza有人可以指导从 netezza 中的 select 语句循环吗
【发布时间】:2014-12-22 09:16:39
【问题描述】:
Create or replace procedure total_test_inside()
RETURNS REFTABLE(testtabl)
LANGUAGE NZPLSQL
AS
BEGIN_PROC
DECLARE
prod_id integer;
lkp_weighted_prc numeric(20,3);
rec record;
BEGIN
FOR rec IN select prod_id from weight
LOOP
select weightprice into lkp_weighted_prc from weight;
call total_amort_test(lkp_weighted_prc);
execute immediate 'insert into ' ||REFTABLENAME || ' values(' || lkp_weighted_prc || ')';
END loop;
return REFTABLE;
END;
END_PROC;

call total_test_inside();

有人可以指导为什么我无法循环从 netezza 的重量表中获取最后一个 prod_id。 提前致谢

【问题讨论】:

  • “无法循环播放”是什么意思?您的意思是当您尝试创建 SP 或运行它时遇到错误?如果有,有什么错误或影响?

标签: stored-procedures procedure netezza


【解决方案1】:

我将不顾一切地完成我认为你在这里想要完成的事情。

由于您已经在这里执行了 FOR 循环,因此无需再执行一次选择来获取 weightprice,事实上,这可能只会一遍又一遍地为您提供相同的第一个值。

FOR rec IN select prod_id from weight
LOOP
select weightprice into lkp_weighted_prc from weight;
call total_amort_test(lkp_weighted_prc);
execute immediate 'insert into ' ||REFTABLENAME || ' values(' || lkp_weighted_prc || ')';
END loop;

我想你想要的是这个。这里我在 FOR 定义中的 select 语句中添加了 weightprice,并去掉了看似多余的 SELECT。然后我使用“rec”。限定符来引用在 FOR 循环中跨过的单个记录。

BEGIN
FOR rec IN select prod_id, weightprice lkp_weighted_prc  from weight
LOOP
call total_amort_test(rec.lkp_weighted_prc);
execute immediate 'insert into ' ||REFTABLENAME || ' values(' || rec.lkp_weighted_prc || ')';
END loop;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多