seguinte, está dando o seguinte erro:
existe ORA-06550: linha 20, coluna 5: PL/SQL: SQL Statement ignored ORA-06550: linha 35, coluna 25: PLS-00364: o uso da variável 'X' de índice
existe ORA-06550: linha 20, coluna 5: PL/SQL: SQL Statement ignored ORA-06550: linha 35, coluna 25: PLS-00364: o uso da variável 'X' de índice
existe ORA-06550: linha 20, coluna 5: PL/SQL: SQL Statement ignored ORA-06550: linha 35, coluna 25: PLS-00364: o uso da variável 'X' de índice.
DECLARE
TYPE rec_protocolo IS RECORD
(nu_protocolo tbl_protocolo.nu_protocolo%TYPE,
dt_movimento tbl_movimento.dt_movimento%TYPE);
TYPE tab_protocolo IS TABLE OF rec_protocolo INDEX BY BINARY_INTEGER;
v_tabela tab_protocolo;
CURSOR C_DADOS IS -- Retorna data geral
SELECT MOV.DT_MOVIMENTO DATA_MOV
FROM TBL_PROTOCOLO PRT,
TBL_MOVIMENTO MOV
WHERE PRT.CD_PROTOCOLO = MOV.CD_PROTOCOLO;
CURSOR C_DADOS_T (P_DATA DATE) IS -- Retorna data do grupo que eu quero e comparar com a data geral.
SELECT A.PROTOCOLO, A.DATA_MOVI
FROM (SELECT MAX(MOV.DT_MOVIMENTO) DATA_MOVI, PRT.NU_PROTOCOLO PROTOCOLO
FROM TBL_PROTOCOLO PRT,
TBL_MOVIMENTO MOV
WHERE PRT.CD_PROTOCOLO = MOV.CD_PROTOCOLO
AND MOV.DT_MOVIMENTO > TO_DATE('01/01/2007 00:00:00','DD/MM/YYYY HH24:MI:SS')
AND MOV.CD_SETOR_DEST IN (670,671,672,1611,1723,1882,1883,2672,2990)
GROUP BY PRT.NU_PROTOCOLO
ORDER BY PRT.NU_PROTOCOLO) A
WHERE A.DATA_MOV > P_DATA;
BEGIN
FOR x IN c_dados LOOP
-- Aqui, populo o type (tabela tab_protocolo, pela variável v_tabela)
FOR z IN c_dados_t(x.data_mov) LOOP
v_tabela(c_dados_t%ROWCOUNT).nu_protocolo := z.protocolo;
v_tabela(c_dados_t%ROWCOUNT).dt_movimento := z.data_movi;
END LOOP;
END LOOP;
-- com o type populado... posso utilizá-lo, da forma que desejar...
-- vou dar uma mensagem (dbms_output).
FOR y IN 1..v_tabela.COUNT LOOP
dbms_output.put_line('Nº Protocolo: ' || v_tabela(y).nu_protocolo );
dbms_output.put_line('Data Movimentação: ' || v_tabela(y).dt_movimento );
END LOOP;
EXCEPTION
WHEN OTHERS THEN
raise_application_error (-20001, 'Erro no processo de montagem de types: ' || SQLERRM );
END;
WHERE a.data_mov > p_data;
WHERE a.data_movi > p_data;
DECLARE
TYPE rec_protocolo IS RECORD ( nu_protocolo tbl_protocolo.nu_protocolo%TYPE,
dt_movimento tbl_movimento.dt_movimento%TYPE );
TYPE tab_protocolo IS TABLE OF rec_protocolo INDEX BY BINARY_INTEGER;
v_tabela tab_protocolo;
CURSOR c_dados
IS -- Retorna data geral
SELECT mov.dt_movimento data_mov
FROM tbl_protocolo prt, tbl_movimento mov
WHERE prt.cd_protocolo = mov.cd_protocolo;
CURSOR c_dados_t (p_data DATE)
IS -- Retorna data do grupo que eu quero e comparar com a data geral.
SELECT a.protocolo, a.data_movi
FROM (SELECT MAX (mov.dt_movimento) data_movi,
prt.nu_protocolo protocolo
FROM tbl_protocolo prt, tbl_movimento mov
WHERE prt.cd_protocolo = mov.cd_protocolo
AND mov.dt_movimento > TO_DATE ('01/01/2007 00:00:00','DD/MM/YYYY HH24:MI:SS')
AND mov.cd_setor_dest IN (670, 671, 672, 1611, 1723, 1882, 1883, 2672, 2990)
GROUP BY prt.nu_protocolo
ORDER BY prt.nu_protocolo) a
WHERE a.data_movi > p_data;
BEGIN
FOR x IN c_dados
LOOP
-- Aqui, populo o type (tabela tab_protocolo, pela variável v_tabela)
FOR z IN c_dados_t (x.data_mov)
LOOP
v_tabela (c_dados_t%ROWCOUNT).nu_protocolo := z.protocolo;
v_tabela (c_dados_t%ROWCOUNT).dt_movimento := z.data_movi;
END LOOP;
END LOOP;
-- com o type populado... posso utilizá-lo, da forma que desejar...
-- vou dar uma mensagem (dbms_output).
FOR y IN 1 .. v_tabela.COUNT
LOOP
DBMS_OUTPUT.put_line ('Nº Protocolo: ' || v_tabela (y).nu_protocolo);
DBMS_OUTPUT.put_line ('Data Movimentação: ' || v_tabela (y).dt_movimento
);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
raise_application_error (-20001, 'Erro no processo de montagem de types: ' || SQLERRM );
END;
CREATE OR REPLACE
PROCEDURE get_emp_rs (p_deptno IN emp.deptno%TYPE,
p_recordset OUT SYS_REFCURSOR) AS
BEGIN
OPEN p_recordset FOR
SELECT ename,
empno,
deptno
FROM emp
WHERE deptno = p_deptno
ORDER BY ename;
END GetEmpRS;
/
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
l_cursor SYS_REFCURSOR;
l_ename emp.ename%TYPE;
l_empno emp.empno%TYPE;
l_deptno emp.deptno%TYPE;
BEGIN
get_emp_rs (p_deptno => 30,
p_recordset => l_cursor);
LOOP
FETCH l_cursor
INTO l_ename, l_empno, l_deptno;
EXIT WHEN l_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(l_ename || ' | ' || l_empno || ' | ' || l_deptno);
END LOOP;
CLOSE l_cursor;
END;
/
var rc refcursor
execute get_emp_rs(10,:rc)
Usuários navegando neste fórum: Nenhum usuário registrado e 20 visitantes