【发布时间】:2017-09-27 09:45:03
【问题描述】:
我有一个存储过程,我试图在其中使用 tab_array 中的项目,以执行 select 语句。这是一个循环内的游标。我想将arrat的每个项目用作“表格”。该程序应该可以正常运行。
谁能帮帮我?我希望这个问题很清楚。 谢谢你。
create or replace PROCEDURE PROVA AS
myRiga number;
myDescRiga varchar2(1000);
myCircuito varchar2(1000);
myPrevRiga number;
myPrevCircuito varchar2(1000);
myCodeTipoRiga varchar2(1000);
myPrevCodeTipoRiga varchar2(1000);
type tab_array is array(5) of varchar2(1000);
tab tab_array;
tabella varchar2(100);
BEGIN
tab := tab_array ('TAB1', 'TAB2', 'TAB3', 'TAB4', 'TAB5');
for i in 1..tab.count loop
tabella:=tab(i);
declare cursor prova is
SELECT CODE_TIPO_RIGA,ATTR_PROG_RIGA, ATTR_DESC_RIGA_01 FROM ||tabella|| ORDER BY ATTR_PROG_RIGA ;
begin
for item in prova loop
myRiga:=item.attr_prog_riga;
myCircuito:=item.attr_desc_riga_01;
myCodeTipoRiga:=item.code_tipo_riga;
dbms_output.put_line('---INIZIO---');
dbms_output.put_line('myRiga: ' || myRiga);
dbms_output.put_line('myCircuito: ' || myCircuito);
dbms_output.put_line('myCodeTipoRiga: ' || myCodeTipoRiga);
dbms_output.put_line('myPrevRiga: ' || myPrevRiga);
dbms_output.put_line('myPrevCircuito: ' || myPrevCircuito);
dbms_output.put_line('myPrevCodeTipoRiga: ' || myPrevCodeTipoRiga);
if (myRiga!=myPrevRiga and myCircuito=myPrevCircuito and myPrevCodeTipoRiga=myCodeTipoRiga) then
if myRiga > myPrevRiga then
dbms_output.put_line('riga:'|| myRiga);
update ||tabella|| set attr_desc_riga_01 = ' ' where ATTR_PROG_RIGA in (myRiga);
end if;
end if;
myPrevRiga:=myRiga;
myPrevCircuito:=myCircuito;
myPrevCodeTipoRiga:=myCodeTipoRiga;
dbms_output.put_line('---FINE---');
end loop;
end;
end loop;
END PROVA;
【问题讨论】:
-
将更新和游标声明纳入 EXECUTE IMMEDIATE
-
谢谢!我会试试这个方法
标签: arrays database oracle stored-procedures plsql