2012-02-20 7 views
5

Ho problemi nell'esecuzione della procedura memorizzata in basso.
Viene visualizzato l'errore ORA-00932: inconsistent datatypes: expected - got BLOB quando aggiungo la colonna FM.FAXFILE_BLOB nella procedura memorizzata in basso. FAXFILE_BLOB è un campo BLOB.

Se rimuovo questo campo, tutto funziona correttamente. Non so perché questo sta accadendo.
Please help ....

Errore "ORA-00932: tipi di dati incoerenti: previsto - ottenuto BLOB" nell'informativa di registrazione

 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; 
/

risposta

10

Non è possibile specificare se il DISTINCT select_list contiene colonne LOB.

Provare a utilizzare una sottoquery scalare per ottenere il campo BLOB.

+0

Grazie. Questo ha aiutato. Ma perché è così? – Rohan

+1

Esistono alcune restrizioni su LOB. Probabilmente è perché sono memorizzati in modo diverso dai tipi di dati di base. Per approfondire, fai riferimento a http://docs.oracle.com/cd/B28359_01/appdev.111/b28393/adlob_working.htm#i1006278 e a http://docs.oracle.com/cd/B28359_01/appdev. 111/b28393/adlob_tables.htm # i1000000 –

2

Di seguito vengono applicate restrizioni agli operatori impostati.

Gli operatori fissi sono soggetti alle seguenti limitazioni:

sugli operatori di non sono validi su colonne di tipo BLOB, CLOB, BFILE, VARRAY o tabella nidificata.

Gli operatori UNION, INTERSECT e MINUS non sono validi sulle colonne LONG .

Se l'elenco di selezione che precede l'operatore set contiene un'espressione, quindi è necessario fornire un alias di colonna per l'espressione, al fine di riferimento ad esso nel order_by_clause.

Non è inoltre possibile specificare for_update_clause con gli operatori impostati.

Non è possibile specificare order_by_clause nella sottoquery di questi operatori .

Non è possibile utilizzare questi operatori nelle istruzioni SELECT contenenti le espressioni di raccolta TABLE .

Riferimento doc.