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。提前感谢
发布于 2014-12-23 03:59:24
我要冒险一试,我认为你在这里想要完成的事情。
因为您已经在这里执行了FOR循环,所以不需要再执行一次select来获取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语句添加了select价格,并删除了看似多余的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;https://stackoverflow.com/questions/27599683
复制相似问题