2012-02-20 2 views
5

У меня возникла проблема с выполнением ниже хранимой процедуры.
Я получаю ошибку ORA-00932: inconsistent datatypes: expected - got BLOB, когда я добавляю FM.FAXFILE_BLOB столбец ниже хранимой процедуры. FAXFILE_BLOB - поле blob.

Если я удалю это поле, все будет хорошо работать. Я не знаю, почему это происходит.
Пожалуйста, помогите ....

Ошибка «ORA-00932: непоследовательные типы данных: ожидается - получен BLOB» в заявлении о присоединении

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

ответ

10

Вы не можете указать DISTINCT если список_выборки содержит столбцы больших объектов.

Попробуйте использовать скалярный подзапрос, чтобы получить поле BLOB.

+0

Спасибо. Это помогло. Но почему это так? – Rohan

+1

На LOB есть некоторые ограничения. Вероятно, это потому, что они хранятся по-другому от базовых типов данных. Чтобы углубиться в это, обратитесь к http://docs.oracle.com/cd/B28359_01/appdev.111/b28393/adlob_working.htm#i1006278 и к http://docs.oracle.com/cd/B28359_01/appdev. 111/b28393/adlob_tables.htm # i1000000 –

2

Ниже применяются ограничения на операторы набора.

Поставленные операторы подчиняются следующим ограничениям:

Поставленные операторы не являются действительными на столбцах типа BLOB, CLOB, BFILE, VARRAY или вложенной таблицы.

Операции UNION, INTERSECT и MINUS не действительны на столбцах LONG .

Если список выбора, предшествующий оператору набора, содержит выражение, , тогда вы должны предоставить псевдоним столбца для выражения, чтобы ссылается на него в order_by_clause.

Вы также не можете указать for_update_clause с заданными операторами.

Вы не можете указать order_by_clause в подзапросе этих операторов .

Вы не можете использовать эти операторы в операторах SELECT, содержащих выражения коллекции TABLE .

Ссылка doc.