ora2pg icon indicating copy to clipboard operation
ora2pg copied to clipboard

Problem in the innovation of procedures persists.

Open RuiFilipeGoncalvesPereira opened this issue 3 years ago • 1 comments

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.

darold avatar Mar 12 '22 12:03 darold