Erro ao fazer a carga do campo BLOB - ORA-22275

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
afonso.augusto
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qui, 06 Jun 2013 2:06 pm

Bom dia,

Eu estou fazendo uma carga de campos BLOB's, onde a origem é acessada via DB_LINK:

Selecionar tudo

/* Use of a PL-SQL bloc to perform the Insert (management of LONGS and LOBS etc.) */
declare cursor myCursor is
select 	 
	
	C1_IMG_ID	IMG_ID,
	(select  C2_ICON from dual)	ICON,

	'I' IND_UPDATE

from	DESTINO.C$_0IMAGES
where	(1=1)

;
begin
	/* Loop over the Cursor and execute the insert statement */
	for aRecord in myCursor loop
		insert into	DESTINO.I$_IMAGES
			(
			IMG_ID,
			 ICON,
			IND_UPDATE
			)
		values  	(
			aRecord.IMG_ID,
			aRecord.ICON,
			aRecord.IND_UPDATE
			)
		;
	end loop;
end;
Porem, quando eu rodo o pl ele me retorna o seguinte erro:

Selecionar tudo

Oracle Error: ORA-22275
Error Description:
Invalid LOB locator specified

Error Cause:
There are several causes: (1) the LOB locator was never initialized; (2) the locator is for a BFILE and the routine expects a BLOB/CLOB/NCLOB locator; (3) the locator is for a BLOB/CLOB/NCLOB and the routine expects a BFILE locator; (4) trying to update the LOB in a trigger body -- LOBs in trigger bodies are read only; (5) the locator is for a BFILE/BLOB and the routine expects a CLOB/NCLOB locator; (6) the locator is for a CLOB/NCLOB and the routine expects a BFILE/BLOB locator;.

Action:
For (1), initialize the LOB locator by selecting into the locator variable or by setting the LOB locator to empty. For (2),(3), (5) and (6)pass the correct type of locator into the routine. For (4), remove the trigger body code that updates the LOB value.
Eu fiz o teste usando dois schemas no ORACLE XE mesmo e criando um DB_LINK para uni-los, e deu certo.

Porém , quando faço isso em produção é que ocorre o erro.
Será que isso é um BUG do Banco.

Selecionar tudo

Versão da origem em produção:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production           
PL/SQL Release 11.2.0.2.0 - Production                                           
CORE	11.2.0.2.0	Production                                                         
TNS for 32-bit Windows: Version 11.2.0.2.0 - Production                          
NLSRTL Version 11.2.0.2.0 - Production                                           

Versão do destino em produção:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production     
PL/SQL Release 11.2.0.3.0 - Production                                           
CORE	11.2.0.3.0	Production                                                         
TNS for 64-bit Windows: Version 11.2.0.3.0 - Production                          
NLSRTL Version 11.2.0.3.0 - Production                                           

Versão do banco de teste:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for 32-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá Afonso,

Bom dia,

É possível que o erro esteja relacionado com algum BUG do ORACLE. Notei que um dos seus bancos em produção é 64 bits, e que também eles não pertencem ao MESMO release. Já tentou fazer este teste entre dois bancos de 32bits ou 64 bits, ou entre bancos com o mesmo release?

Não sei se ajudará no seu problema, mas me deparei com um link que talvez lhe ajude a fazer uma "gambiarra" para resolver isso:

http://jiri.wordpress.com/2010/06/04/qu ... mple-view/

Notei que existe um bug "9105438" (erro ORA-22275 para operações com BLOB) para o release 11.2.0.1, que foi acertado no release 11.2.0.2 (precisa aplicar um patch nele). Talvez você possa fazer um teste com bases do release 11.2.0.3 para ver se este problema ocorre.

Abraços,

Sergio Coutinho
Responder
  • Informação