estou precisando uma ajuda com a execução de uma procedure, a ideia primaria é a seguinte, eu faço um um select, para pegar os dados requisitados, apos isso, eu tenho que fazer um update e um insert, tudo na mesma tabela, porem, minha procedure esta fazendo o update, mas não esta fazendo o insert. fiz um contador tambem para que a cada mil registros ele faça o commit.
desde já agradeço a ajuda
estou colando o codigo abaixo:
/*
Procedure altera plano contas
PC
14/08/2012
*/
CREATE OR REPLACE PROCEDURE ALTERA_DADOS
cursor c_tst is -- crio o cursor para armazenar query
IS BEGIN
FOR V_FUNC IN
(SELECT *
FROM EVENDESP TABOR
INNER JOIN EMS505BPORO8P930ESP.ESP_DEPARA TMPTAB ON (TMPTAB.CTA_PLANO_ANTIGO = TABOR.CT_CODIGO
AND TMPTAB.CTA_PLANO_ANTIGO <> TMPTAB.CTA_PLANO_NOVO)
WHERE TABOR.AA_VALIDADE = 9999
AND TABOR.MM_VALIDADE = 12
AND TABOR.CT_CODIGO <> ' ')
LOOP
open c_tst; --abro o cursor
/*realizo u upd relacionado com o select para invalidar as contas velhas*/
UPDATE EVENDESP
SET AA_VALIDADE = 2012,
MM_VALIDADE = 06,
CD_USERID = 'ALT_ID_97962'
WHERE AA_VALIDADE = v_func.AA_VALIDADE
AND MM_VALIDADE = v_func.MM_VALIDADE
AND CT_CODIGO = v_func.CTA_PLANO_ANTIGO;
BEGIN /*realizo o insert do novo plano de contas*/
INSERT INTO EVENDESP
(CD_EVENTO,
CD_GRUPO_PRESTADOR,
U##IN_MOVTO,
IN_MOVTO,
U##CDMODPLANOTIPOMODULO,
CDMODPLANOTIPOMODULO,
CD_FORMA_PAGTO,
IN_TIPO_ATO,
AA_VALIDADE,
MM_VALIDADE,
LG_INTERNADO,
CD_GRUPO_TIPO,
CD_PROC_INSUMO,
CT_CODIGO,
SC_CODIGO,
CD_USERID,
DT_ATUALIZACAO,
CHAR_1,
CHAR_2,
CHAR_3,
CHAR_4,
CHAR_5,
DEC_1,
DEC_2,
DEC_3,
DEC_4,
DEC_5,
DATE_1,
DATE_2,
DATE_3,
DATE_4,
DATE_5,
INT_1,
INT_2,
INT_3,
INT_4,
INT_5,
LOG_1,
LOG_2,
LOG_3,
LOG_4,
LOG_5,
U_CHAR_1,
U_CHAR_2,
U_CHAR_3,
U_DATE_1,
U_DATE_2,
U_DATE_3,
U_INT_1,
U_INT_2,
U_INT_3,
U_LOG_1,
U_LOG_2,
U_LOG_3,
U_DEC_1,
U_DEC_2,
U_DEC_3,
CT_TP_CONTRATACAO1,
SC_TP_CONTRATACAO1,
CT_TP_CONTRATACAO3,
SC_TP_CONTRATACAO3,
CT_TP_CONTRATACAO4,
SC_TP_CONTRATACAO4,
CT_TP_CONTRATACAO5,
SC_TP_CONTRATACAO5,
CT_TP_CONTRATACAO6,
SC_TP_CONTRATACAO6,
AA_INICIO_VALIDADE,
MM_INICIO_VALIDADE)
VALUES
( V_FUNC.CD_EVENTO,
V_FUNC.CD_GRUPO_PRESTADOR,
V_FUNC.U##IN_MOVTO,
V_FUNC.IN_MOVTO,
V_FUNC.U##CDMODPLANOTIPOMODULO,
V_FUNC.CDMODPLANOTIPOMODULO,
V_FUNC.CD_FORMA_PAGTO,
V_FUNC.IN_TIPO_ATO,
9999,--ANO FIM CONTA DT-LIMITE-ORIGEM
12, --mês FIM CONTA DT-LIMITE-ORIGEM
V_FUNC.LG_INTERNADO,
V_FUNC.CD_GRUPO_TIPO,
V_FUNC.CD_PROC_INSUMO,
V_FUNC.CT_CODIGO,
V_FUNC.SC_CODIGO,
'INC_ID_97962', -- novo registro incluido no novo plano de contas
V_FUNC.DT_ATUALIZACAO,
V_FUNC.CHAR_1,
V_FUNC.CHAR_2,
V_FUNC.CHAR_3,
V_FUNC.CHAR_4,
V_FUNC.CHAR_5,
V_FUNC.DEC_1,
V_FUNC.DEC_2,
V_FUNC.DEC_3,
V_FUNC.DEC_4,
V_FUNC.DEC_5,
V_FUNC.DATE_1,
V_FUNC.DATE_2,
V_FUNC.DATE_3,
V_FUNC.DATE_4,
V_FUNC.DATE_5,
V_FUNC.INT_1,
V_FUNC.INT_2,
V_FUNC.INT_3,
V_FUNC.INT_4,
V_FUNC.INT_5,
V_FUNC.LOG_1,
V_FUNC.LOG_2,
V_FUNC.LOG_3,
V_FUNC.LOG_4,
V_FUNC.LOG_5,
V_FUNC.U_CHAR_1,
V_FUNC.U_CHAR_2,
V_FUNC.U_CHAR_3,
V_FUNC.U_DATE_1,
V_FUNC.U_DATE_2,
V_FUNC.U_DATE_3,
V_FUNC.U_INT_1,
V_FUNC.U_INT_2,
V_FUNC.U_INT_3,
V_FUNC.U_LOG_1,
V_FUNC.U_LOG_2,
V_FUNC.U_LOG_3,
V_FUNC.U_DEC_1,
V_FUNC.U_DEC_2,
V_FUNC.U_DEC_3,
V_FUNC.CT_TP_CONTRATACAO1,
V_FUNC.SC_TP_CONTRATACAO1,
V_FUNC.CT_TP_CONTRATACAO3,
V_FUNC.SC_TP_CONTRATACAO3,
V_FUNC.CT_TP_CONTRATACAO4,
V_FUNC.SC_TP_CONTRATACAO4,
V_FUNC.CT_TP_CONTRATACAO5,
V_FUNC.SC_TP_CONTRATACAO5,
V_FUNC.CT_TP_CONTRATACAO6,
V_FUNC.SC_TP_CONTRATACAO6,
V_FUNC.AA_INICIO_VALIDADE,
V_FUNC.MM_INICIO_VALIDADE );
if contador = 1000 then -- a cada 1000 registros realizo o commit.
commit;
contador :=0; -- zero o contador
end if;
contador := contador +1; -- incremento 1
END;
COMMIT;
END LOOP;
close c_tst;
Update set progress_recid = rownum;
END;