Sou novo com programação PL/SQL e estou precisando de ajuda.
preciso criar uma procedure para deletar dados e executar commit a cada X números de linhas. Bom até ai foi tranquilo, porem minha ideia é criar uma variavel do tipo (vTBL) onde eu possa passar o nome da tabela dinamicamente. Fiz isso e executei o comando. Funcionou parcialmente. Vou colocar a primeira procedure que fiz e a segunda com a alteração.
--@P1
1 SET SERVEROUTPUT ON
2 DECLARE
3 TYPE RI IS TABLE OF ROWID;
4 ROWIDS RI;
5 linhas INTEGER :=0;
6 linhascommmit INTEGER:=20000;
7 vTBL VARCHAR2(20):='C_L_PRSN_DTL';
8 BEGIN
9 SELECT ROWID BULK COLLECT INTO ROWIDS FROM [color=#BF0000]C_L_PRSN_DTL[/color] WHERE SRC_SYS_BU = (SELECT * FROM OW_MDMDEV.TBL_DQ_CONTROL_BU);
10 FOR I in ROWIDS.FIRST .. ROWIDS.LAST
11 LOOP
12 EXECUTE IMMEDIATE 'DELETE ' || vTBL ||' WHERE ROWID = '''||ROWIDS(I)||'''';
13 IF MOD(linhas,linhascommmit)=0 then
14 COMMIT;
15 END IF;
16 linhas := linhas + 1;
17 END LOOP;
18 END;
1 SET SERVEROUTPUT ON
2 DECLARE
3 TYPE RI IS TABLE OF ROWID;
4 ROWIDS RI;
5 linhas INTEGER :=0;
6 linhascommmit INTEGER:=20000;
7 vTBL VARCHAR2(20):='C_L_PRSN_DTL';
8 BEGIN
9 SELECT ROWID BULK COLLECT INTO ROWIDS FROM vTBL WHERE SRC_SYS_BU = (SELECT * FROM OW_MDMDEV.TBL_DQ_CONTROL_BU);
10 FOR I in ROWIDS.FIRST .. ROWIDS.LAST
11 LOOP
12 EXECUTE IMMEDIATE 'DELETE ' || vTBL ||' WHERE ROWID = '''||ROWIDS(I)||'''';
13 IF MOD(linhas,linhascommmit)=0 then
14 COMMIT;
15 END IF;
16 linhas := linhas + 1;
17 END LOOP;
18 END;
PL/SQL: ORA-00942: table or view does not exist.
--@P3
1 SET SERVEROUTPUT ON
2 DECLARE
3 TYPE RI IS TABLE OF ROWID;
4 ROWIDS RI;
5 linhas INTEGER :=0;
6 linhascommmit INTEGER:=20000;
7 vTBL VARCHAR2(20):='C_L_PRSN_DTL';
8 BEGIN
9 EXECUTE IMMEDIATE 'SELECT ROWID BULK COLLECT INTO ROWIDS FROM '|| vTBL ||' WHERE SRC_SYS_BU = (SELECT * FROM OW_MDMDEV.TBL_DQ_CONTROL_BU)';
10 FOR I in ROWIDS.FIRST .. ROWIDS.LAST
11 LOOP
12 EXECUTE IMMEDIATE 'DELETE ' || vTBL ||' WHERE ROWID = '''||ROWIDS(I)||'''';
13 IF MOD(linhas,linhascommmit)=0 then
14 COMMIT;
15 END IF;
16 linhas := linhas + 1;
17 END LOOP;
18 END;
Desde já agradeço a atenção de todos.
Forte abraço.
Obs: coloquei em anexo o arquivo contem os comando.
Giovani Winter

