Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FernandoHein

[Resolvido] Erro Package utl_file

Recommended Posts

Bom dia,

Foi criada a package conforme abaixo porem a mesma não esta carregando as informações do arquivo texto para a tabela destino, porem tambem não me retorna erro algum.

A Pack foi compilada sem nenhum erro tanto na spec quanto na body.

Pode ser problema de diretorio? O Banco esta instalado localmente na minha maquina e o diretorio que estou utilizando esta na raiz (C:\).

 

Existe algo errado no codigo abaixo?

 

Obrigado.

WHENEVER SQLERROR EXIT FAILURE ROLLBACK
WHENEVER SQLERROR CONTINUE

CREATE OR REPLACE PACKAGE BODY mrsc_gl_interface001_pk IS
   -- $Header: %M% %I% %E% %U% appldev ship $
   -- +=================================================================+
	  -- |	   Copyright (c) 2006 Oracle Brasil, São Paulo, Brasil	   |
	  -- |					   All rights reserved.					  |
	  -- +=================================================================+
	  -- | FILENAME								   |
	  -- |   MRSC_GL_INTERFACE001_PK_B.PLS				   |
	  -- |																 |
	  -- | PURPOSE														 |
	  -- |   Script de criacao de package.								 |
	  -- |																 |
	  -- | DESCRIPTION													 |
	  -- |   Package de carga de Saldos Contábeis MRS				   |
	  -- |																 |
	  -- | CREATED BY													  |
	  -- |   Fernando Hein Magalhães  (09/02/2009)						 |
	  -- |																 |
	  -- | UPDATED BY													  |
	  -- |							 					   |
   -- +=================================================================+

   -- Interface GL
PROCEDURE ins_carga_saldo(	   errbuf				OUT VARCHAR2
								,retcode		   OUT NUMBER
							  --  ,p_set_of_books_id IN gl_sets_of_books.set_of_books_id%TYPE
								,p_period_name_ini IN gl_periods.period_name%TYPE
								,p_period_name_fim IN gl_periods.period_name%TYPE
								,p_dt_contabil IN date) IS

l_set_of_books_id	  NUMBER(15,0);
l_accounting_date	  DATE;
l_creation_date		DATE;
l_created_by	   	NUMBER (15,0);
l_user_je_source_name 	VARCHAR2(25);
l_user_je_category_name VARCHAR2(25);
l_period_name		VARCHAR2(15);
l_reference10		VARCHAR2(100);
l_segment01		VARCHAR2(25);
l_segment02		VARCHAR2(25);
l_segment03		 	VARCHAR2(25);
l_segment04		 	VARCHAR2(25);
l_segment05		 	VARCHAR2(25);
l_segment06		 	VARCHAR2(25);
l_segment07		 	VARCHAR2(25);
l_segment08		 	VARCHAR2(25);
l_segment09		 	VARCHAR2(25);
l_segment10		 	VARCHAR2(25);
l_segment11		 	VARCHAR2(25);
l_segment12		 	VARCHAR2(25);
l_debit		 	NUMBER(10,2);
l_credit 	   	NUMBER(10,2);
l_tam_linha		 	varchar2(5000)   ;
v_nome_arquivo		  utl_file.file_type;
FND_FILE 			utl_file.file_type;	


--BEGIN
--	  --
--	  ---------------------------------------gravacao de log  ---------------------------------- 
--	  FND_FILE.PUT_LINE(FND_FILE.OUTPUT, chr(10) ||
--						 '							 INÍCIO Processo de Carga de Saldos Contábeis MRS');
--	  FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '					   --------------------------------------------------------------------');
--	  FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '										 ' ||
--						 to_char(SYSDATE, 'DD-MON-RRRR HH24:MI:SS'));
--   
--	  ------------------------------------Carga do Arquivo texto de Saldos Contábeis----------------------------- 
   
   BEGIN
	   -- abre o arquivo para escrita
	  v_nome_arquivo := UTL_FILE.FOPEN('PROJETO_MRS','TESTE_INSERT.TXT','r');
	  
	  BEGIN
			  
		 LOOP
		 
		  utl_file.get_line(v_nome_arquivo, l_tam_linha);
		  
			BEGIN
		
		l_segment03 :=  trim(substr( l_tam_linha,1 ,instr(l_tam_linha ,'|',1,1)-1));
		l_segment04 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,1)+1, instr(l_tam_linha,'|',1,1) -1));
		l_segment05 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,2)+1, instr(l_tam_linha,'|',1,1) -1));
		l_segment06 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,3)+1, instr(l_tam_linha,'|',1,1) -1));
		l_segment07 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,4)+1, instr(l_tam_linha,'|',1,1) -1));
		l_segment08 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,5)+1, instr(l_tam_linha,'|',1,1) -1));
		l_segment09 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,6)+1, instr(l_tam_linha,'|',1,1) -1));
		l_segment10 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,7)+1, instr(l_tam_linha,'|',1,1) -1));
		l_segment11 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,8)+1, instr(l_tam_linha,'|',1,1) -1));
		l_segment12 :=  trim(substr( l_tam_linha, instr(l_tam_linha, '|',1,9)+1, instr(l_tam_linha,'|',1,1) -1));
		l_debit :=  trim(to_number(substr( l_tam_linha, instr(l_tam_linha, '|',1,10)+1, instr(l_tam_linha, '|',1,1)-1)));
		l_credit := trim(to_number(substr( l_tam_linha, instr(l_tam_linha, '|',1,11)+1)));	
			
			
		   		BEGIN
		   		
						SELECT DISTINCT SET_OF_BOOKS_ID
						INTO L_SET_OF_BOOKS_ID
						FROM GL_SETS_OF_BOOKS
						WHERE NAME = 'MRS_FISCAL';
						
					EXCEPTION WHEN NO_DATA_FOUND THEN
					DBMS_OUTPUT.PUT_LINE('NÃO FOI ENCONTRADO ID PARA O LIVRO FISCAL');
					
					END;
			
			
			
					   BEGIN
						select period_name 
						INTO l_period_name
						from gl_periods
					where start_date >= p_period_name_ini
						and end_date <= p_period_name_fim;
					   
					   EXCEPTION WHEN NO_DATA_FOUND THEN
					   DBMS_OUTPUT.PUT_LINE ('NÃO FOI ENCONTRADO O PERIODO NA TABELA ORIGEM');
					   
					   END;
			 
			 
				BEGIN
				
					 INSERT INTO GL_INTERFACE_TESTE (
					 STATUS,			   		--1				
					 		 SET_OF_BOOKS_ID,			--2
					 		 ACCOUNTING_DATE,			--3
					 		 CURRENCY_CODE	,			--4
					 		 DATE_CREATED,				--5
					 		-- CREATED_BY,				--6
					 		 ACTUAL_FLAG	,			--7
					 		 USER_JE_CATEGORY_NAME	,		--8
					 		 USER_JE_SOURCE_NAME	,		--9
					 		 SEGMENT1		,		--10
					 		 SEGMENT2		,		--11
					 		 SEGMENT3,				--12
					 		 SEGMENT4,				--13
					 		 SEGMENT5,				--14
					 		 SEGMENT6,				--15
					 		 SEGMENT7,				--16
					 		 SEGMENT8,				--17
					 		 SEGMENT9,				--18
					 		 SEGMENT10,				--19
					 		 SEGMENT11,				--20
					 		 SEGMENT12,				--21
					 		 ENTERED_DR,				--22
					 		 ENTERED_CR,				--23
					 		 ACCOUNTED_DR,				--24
					 		 ACCOUNTED_CR,				--25
					 		 REFERENCE10,					  --26	
					 		 PERIOD_NAME)				--27
					 	VALUES (
					 		'NEW',					--01
					 		L_SET_OF_BOOKS_ID,			--02
					 		p_dt_contabil,				--03
						  'BRL',					--04
						  SYSDATE,				--05
						  --FND_PROFILE.VALUE('USER_ID'),		--06
						  'A',					--07
						  'CARGA INICIAL',			--08
						  'CARGA',				--09
						  '001',					--10
						  '0000',					--11
						  l_segment03,				--12
						  l_segment04,				--13
						  l_segment05,				--14
						  l_segment06,				--15
						  l_segment07,				--16
						  l_segment08,				--17
						  l_segment09,				--18
						  l_segment10,				--19
						  l_segment11,				--20
						  l_segment12,				--21
						  l_debit,				--22
						  l_debit,				--23
						  l_credit,				--24
						  l_credit,				--25
						  'CARGA INICIAL',			--26
						  l_period_name	);			--27
				 
				EXCEPTION
		WHEN OTHERS THEN
			 errbuf  := SQLERRM;
					retcode := SQLCODE;
				
				END;
			
			EXCEPTION WHEN NO_DATA_FOUND THEN
			EXIT;
			
			END;
		 
		  END LOOP;
	  
	  EXCEPTION
	  WHEN OTHERS THEN
				   errbuf  := SQLERRM;
					 retcode := SQLCODE;
	  
	  END;
	  
   COMMIT;
  
  -- END;	  
   utl_file.fclose(v_nome_arquivo);	   
	  
	  
	  ---------------------------------------gravacao de log  ----------------------------------
   
--	  FND_FILE.PUT_LINE(FND_FILE.OUTPUT, chr(10) ||
--						 '							 FIM  Processo de Carga de Saldos Contábeis MRS	  ');
--	  FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '					   --------------------------------------------------------------------');
--	  IF to_char(SQLCODE) <> '0' THEN
--		 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'ERRO: ' || to_char(SQLCODE) || '-' ||
--							errbuf);
--	  END IF;
--   
--	  FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '																									  ' ||
--						 to_char(SYSDATE, 'DD-MON-RRRR HH24:MI:SS'));
 
exception
	  when utl_file.invalid_operation then
		   utl_file.fclose(v_nome_arquivo);
		   raise_application_error(-20002,'Operação invalida !!!');
	  when utl_file.read_error then
		   utl_file.fclose(v_nome_arquivo);
		   raise_application_error(-20003,'Erro de leitura !!!');
	  when utl_file.write_error then
		   utl_file.fclose(v_nome_arquivo);
		   raise_application_error(-20004,'Erro de gravação !!!');
	  when TOO_MANY_ROWS then
		   utl_file.fclose(v_nome_arquivo);
		   raise_application_error(-20006,'Arquivo já Processado !!!');
		   
end INS_CARGA_SALDO;		   
		   
END;

-- indicativo de final de arquivo, nao deve ser removido
/

--EXIT;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Motta.

Consegui resolver o problema do arquivo texto, estava apresentando o erro invalid number. Verifiquei que a chamada do utl_file estava incorreta no codigo na parte do instr, eu havia digitado o codigo incorreto e estava subindo o delimitador pipe no campo numerico.

O meu problema agora esta na parte de mensagem de inicio e fim da package, pois vou subir a mesma via EBS.

 

Se verificar o meu codigo vai ver que a parte dos FND_FILE esta comentada no inicio e final da pack, quando eu vou processar a pack com essa parte sem comentar me retorna o erro PLS-00302: o componente 'OUTPUT' deve ser declarado.

Eu declarei o fnd_file.

FND_FILE utl_file.file_type;

 

Porem eu não estou conseguindo declarar corretamente o que a pack esta solicitando.

 

Você teria uma luz?

 

[]'s

 

Fernando Hein

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falta um sinonimo público para a package ou então declarar o owner no código

 

FND_FILE sys.utl_file.file_type;

 

Acho que resolve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente mudar o nome do arquivo talvez seja alguma coisa já definida em outro ponto ou reservada (pouco provável).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá FernandoHein,

 

Acredito que o problema seja facil de resolver, para voce escrever no arquivo a linha correta levando em conta o contexto do seu script o comando é:

 

utl_file.put_line(fnd_file,chr(10) || ' INÍCIO Processo de Carga de Saldos Contábeis MRS');

 

Isso já deve resolver, porém não se esqueça de que voce precisa abrir o arquivo em modo de escrita ('w') antes de começar a escrever as linhas.

 

Espero ter ajudado.

 

Um Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, consegui solucionar o problema.

Na verdade não era um problema.

A principio o codigo de carga do utl_file estava incorreto, com isso estavam subindo caracteres em campos numericos.

Após solucionar esse problema, como eu estava realizando testes no banco na minha propria maquina estava apresentando o erro do fnd_file, porem quando a package foi compilada no ambiente EBS a compilação ocorreu corretamente.

Coisas de leigo em EBS que não tinha o conhecimento que o pacote fnd_file fazia parte do EBS.

 

Obrigado pelas dicas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.