Problem in the innovation of procedures persists.
Good night sir darold,
I have already installed version 23.1 of ora2pg, but after a test performed as shown in the example below, when migrating a package from oracle to postgres, not only could I not call to call the debug procedure of the looger schema but also placed the procedure sp_valida_plano_mp from the pck_w_gmp_plano package to be called with the select * from clause which is wrong because it should be with CALL.
Exemplo Package oracle:
PROCEDURE sp_importa_plano_mp
(
pcoderro OUT NUMBER,
pmsgerro OUT VARCHAR2,
piduser IN NUMBER,
pidioma IN NUMBER,
pcommit IN NUMBER,
pfilename IN VARCHAR2,
pidsessao IN VARCHAR2,
pid_rep_externo IN VARCHAR2,
plistaerros OUT cursorType,
pNumLinhas OUT NUMBER
)
IS
v_id_ficheiro PLS_INTEGER;
BEGIN
pCodErro := 0;
pMsgErro := 'OK';
logger.debug
(
'pck_w_gmp_plano.sp_importa_plano_mp'
, 'INICIO: piduser = ' || piduser ||
'; pidioma = ' || pidioma ||
'; pcommit = ' || pcommit ||
'; pfilename = ' || pfilename ||
'; pidsessao = ' || pidsessao ||
'; pNumLinhas = ' || pNumLinhas
);
pck_w_gmp_plano.sp_valida_plano_mp(pcoderro, pmsgerro, piduser, pidioma, pcommit, pidsessao);
IF (pcommit=1) THEN
COMMIT;
END IF;
LOGGER.DEBUG('pck_w_gmp_plano.sp_importa_plano_mp'
, 'pcoderro = ' || pcoderro ||
'; pmsgErro = ' || pmsgErro ||
'; pNumLinhas = ' || pNumLinhas
);
EXCEPTION
WHEN OTHERS THEN
pcoderro := SQLCODE;
pmsgerro := SQLERRM;
logger.error('pck_w_gmp_plano.sp_importa_plano_mp', 'sqlcode = ' || pcoderro || ' - ' || 'sqlerrm = ' || pmsgErro);
END sp_importa_plano_mp;
PROCEDURE sp_valida_plano_mp
(
pcoderro OUT NUMBER,
pmsgerro OUT VARCHAR2,
Piduser IN NUMBER,
pidioma IN NUMBER,
pcommit IN NUMBER,
pidsessao IN VARCHAR2
)
IS
vContador NUMBER;
--Variaveis usadas para validar o ano, trimestre e semana
vsemana PLS_INTEGER;
vtrimestre PLS_INTEGER;
vano PLS_INTEGER;
vcoluna_template_plano tra_dd_constante.valor%TYPE;
BEGIN
logger.debug
(
'pck_w_gmp_plano.sp_valida_plano_mp'
, 'piduser = ' || piduser ||
'; pidioma = ' || pidioma ||
'; pcommit = ' || pcommit ||
'; pidsessao = ' || pidsessao
);
EXCEPTION
WHEN OTHERS THEN
pcoderro := sqlcode;
pmsgerro := sqlerrm;
logger.error('pck_w_gmp_plano.sp_valida_plano_mp', 'sqlcode = ' || pcoderro || ' - ' || 'sqlerrm = ' || pmsgerro);
ROLLBACK;
END sp_valida_plano_mp;
END pck_w_gmp_plano;
/
Exemplo Package postgres:
DROP SCHEMA IF EXISTS pck_w_gmp_plano CASCADE;
CREATE SCHEMA IF NOT EXISTS pck_w_gmp_plano;
CREATE OR REPLACE PROCEDURE pck_w_gmp_plano.sp_importa_plano_mp ( pcoderro INOUT numeric, pmsgerro INOUT varchar, piduser numeric, pidioma numeric, pcommit numeric, pfilename varchar, pidsessao varchar, pid_rep_externo varchar, plistaerros INOUT cursorType, pNumLinhas INOUT numeric ) AS $body$
DECLARE
v_id_ficheiro numeric;
BEGIN
pCodErro := 0;
pMsgErro := 'OK';
logger.debug(
'pck_w_gmp_plano.sp_importa_plano_mp()'
, 'INICIO: piduser = ' || piduser ||
'; pidioma = ' || pidioma ||
'; pcommit = ' || pcommit ||
'; pfilename = ' || pfilename ||
'; pidsessao = ' || pidsessao ||
'; pNumLinhas = ' || pNumLinhas
);
SELECT * FROM pck_w_gmp_plano.sp_valida_plano_mp(pcoderro, pmsgerro, piduser, pidioma, pcommit, pidsessao) INTO STRICT pcoderro, pmsgerro;
IF (pcommit=1) THEN
-- COMMIT;
END IF;
LOGGER.DEBUG('pck_w_gmp_plano.sp_importa_plano_mp()'
, 'pcoderro = ' || pcoderro ||
'; pmsgErro = ' || pmsgErro ||
'; pNumLinhas = ' || pNumLinhas
);
EXCEPTION
WHEN OTHERS THEN
pcoderro := SQLSTATE;
pmsgerro := SQLERRM;
logger.error('pck_w_gmp_plano.sp_importa_plano_mp()', 'sqlcode = ' || pcoderro || ' - ' || 'sqlerrm = ' || pmsgErro);
END;
$body$
LANGUAGE PLPGSQL
;
-- REVOKE ALL ON PROCEDURE pck_w_gmp_plano.sp_importa_plano_mp ( pcoderro INOUT numeric, pmsgerro INOUT varchar, piduser numeric, pidioma numeric, pcommit numeric, pfilename varchar, pidsessao varchar, pid_rep_externo varchar, plistaerros INOUT cursorType, pNumLinhas INOUT numeric ) FROM PUBLIC;
----------------------------------------------------------------
-- Valida as colunas do ficheiro EXCEL
----------------------------------------------------------------
CREATE OR REPLACE PROCEDURE pck_w_gmp_plano.sp_valida_plano_mp ( pcoderro INOUT numeric, pmsgerro INOUT varchar, piduser numeric, pidioma numeric, pcommit numeric, pidsessao varchar ) AS $body$
DECLARE
vContador numeric;
--Variaveis usadas para validar o ano, trimestre e semana
vsemana numeric;
vtrimestre numeric;
vano numeric;
vcoluna_template_plano tra_dd_constante.valor%TYPE;
BEGIN
logger.debug(
'pck_w_gmp_plano.sp_valida_plano_mp()'
, 'piduser = ' || piduser ||
'; pidioma = ' || pidioma ||
'; pcommit = ' || pcommit ||
'; pidsessao = ' || pidsessao
);
EXCEPTION
WHEN OTHERS THEN
pcoderro := SQLSTATE;
pmsgerro := sqlerrm;
logger.error('pck_w_gmp_plano.sp_valida_plano_mp()', 'sqlcode = ' || pcoderro || ' - ' || 'sqlerrm = ' || pmsgerro);
-- ROLLBACK;
END;
$body$
LANGUAGE PLPGSQL
;
Can you please confirm that this is an ora2pg error?.
Best regards,
Rui Pereira.
Commit 181d333 might fix this issue but you have to set PG_VERSION to 14 as out parameters are not supported in earlier version.