2012-02-20 107 views
5

Tengo un problema al ejecutar debajo del procedimiento almacenado.
Recibo el error ORA-00932: inconsistent datatypes: expected - got BLOB cuando agrego columna FM.FAXFILE_BLOB en el siguiente procedimiento almacenado. FAXFILE_BLOB es un campo blob.

Si elimino este campo todo funciona bien. No sé por qué sucede esto.
Por favor, ayuda ....

Error "ORA-00932: tipos de datos incoherentes: esperado - got BLOB" en la instrucción Join

 CREATE OR REPLACE Procedure HCADMIN.Proc_GetFaxDetailsByDate 
     ( 
      FromDate varchar2 default null, 
      ToDate varchar2 default null, 
      FaxNo varchar2 default null, 
      ClaimNo varchar2 default null, 
      NspCode varchar2 default null, 
      PolicyNo varchar2 default null, 
      HEGICNo varchar2 default null, 
      cur_faxdetails OUT SYS_REFCURSOR 
      ) 
     IS 
     BEGIN 
     OPEN cur_faxdetails For 

     Select distinct 
     FM.RECORDNO_NUM, 
     FM.CLAIMNO_VAR, 
     FM.FAXNO_VAR, 
     FM.FAXSTATUS_VAR, 
     FM.FAXTYPE_VAR, 
     FM.USERNAME_VAR, 
     FM.HEGIC_NO_VAR, 
     FM.RESEND_NO_NUM, 
     FM.RESNDCOUNT_NUM, 
     TO_date(FM.TIMESTAMP_DTE,'dd/MM/yyyy') as "TIMESTAMP_DTE", 
     FR.RECIPIENTFAXNO_VAR, 
     FM.FAXFILE_BLOB 

     From TPA_FAXMASTER FM Left join TPA_FAXRECIPIENT FR on          FM.RECORDNO_NUM=FR.RECORDNO_NUM 
WHERE 
     NVL(FM.FAXNO_VAR,'0')=NVL(FaxNo,NVL(FM.FAXNO_VAR,'0')) And 
     NVL(FR.RECIPIENTFAXNO_VAR,'0')=NVL(FaxNo,NVL(FR.RECIPIENTFAXNO_VAR,'0')) And   
     NVL(FM.CLAIMNO_VAR,'0')=NVL(ClaimNo,NVL(FM.CLAIMNO_VAR,'0')) And 
     NVL(FM.NSPID_VAR,'0')=NVL(NspCode,NVL(FM.NSPID_VAR,'0')) And 
     NVL(FM.POLICYNO_VAR,'0')=NVL(PolicyNo,NVL(FM.POLICYNO_VAR,'0')) And 
     NVL(FM.HEGIC_NO_VAR,'0')=NVL(HEGICNo,NVL(FM.HEGIC_NO_VAR,'0')) And  
     (NVL(TO_date(FM.TIMESTAMP_DTE,'dd/MM/yyy'),To_Date('09/09/9999','dd/MM/yyyy')) 
     BETWEEN NVL (TO_date(FromDate,'dd/MM/yyyy'), NVL(TO_date(FM.TIMESTAMP_DTE,'dd/MM/yyy'),To_Date('09/09/9999','dd/MM/yyyy'))) 
     AND NVL (TO_date(ToDate,'dd/MM/yyyy'), NVL(TO_date(FM.TIMESTAMP_DTE,'dd/MM/yyy'),To_Date('09/09/9999','dd/MM/yyyy')))); 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
    Null; 
WHEN OTHERS THEN 
    -- Consider logging the error and then re-raise 
    RAISE; 
END; 
/

Respuesta

10

No se puede especificar si el DISTINCT select_list contiene columnas LOB.

Intente utilizar una subconsulta escalar para obtener el campo BLOB.

+0

Gracias. Esto ayudó. Pero ¿por qué es esto así? – Rohan

+1

Existen algunas restricciones en los LOB. Probablemente es porque están almacenados de una manera diferente a los tipos de datos básicos. Para profundizar, consulte http://docs.oracle.com/cd/B28359_01/appdev.111/b28393/adlob_working.htm#i1006278 y http://docs.oracle.com/cd/B28359_01/appdev. 111/b28393/adlob_tables.htm # i1000000 –

2

Las restricciones siguientes se aplican a los operadores del conjunto.

Los operadores de conjuntos están sujetos a las siguientes restricciones:

Los operadores de conjuntos no son válidos en columnas de tipo BLOB, CLOB, BFILE, VARRAY, o tabla anidada.

Los operadores UNION, INTERSECT y MINUS no son válidos en las columnas LONG .

Si la lista de selección que precede al operador del conjunto contiene una expresión, , debe proporcionar un alias de columna para la expresión con el fin de referirse a ella en el order_by_clause.

No puede especificar también for_update_clause con los operadores establecidos.

No puede especificar la orden_por_claús en la subconsulta de estos operadores .

No puede usar estos operadores en las sentencias SELECT que contienen las expresiones de la colección TABLE .

Referencia doc.

Cuestiones relacionadas