2012-12-20 229 views
6

BLOB変数にPDFドキュメントを移入するプロシージャがあります。私がやろうとしているのは、静的な日付から60日以内にPDF文書を表示するだけのロジックを追加することです。以下を参照してください:ORA-22275エラー:無効なLOBロケータが指定されています

check_staticdate  number(1); 

function DisplayPDF (audit in number) RETURN blob is 

person_id  person.person_id%type; 
z_lob   blob; 
blob_length NUMBER; 


CURSOR getPDF(audit number) IS 
    select report 
    from report_table 
    where report_type = 'PDF' 
    and job_no = audit order by rec_no; 


begin 

/* Check Valid ID */ 
if not package.ValidID(person_id, check_only=>TRUE) then 
    return z_lob; 
end if; 


/* Here is the case statement.*/ 
select case 
    when exists 
     (
     SELECT 'x' from table 
     where table_id = person_id 
     and trunc(sysdate) < trunc(table_static_date + 60) 
    ) 

    then 1 
    else 0 
    end into check_staticdate 
from dual; 


if (check_staticdate = 0) then 
    return z_lob; 
end if; 



open getPDF(audit); 
fetch getPDF into z_lob; 
close getPDF; 
return z_lob; 


end DisplayPDF; 

私は受け付けており、エラーがある:ORA-22275: invalid LOB locator specified.

私は、Oracle SQLに新しいですし、私のValidIDチェックがz_lobを返すことで動作しますが、私の場合ステートメントがない理由がわからないと思います。

編集:完全なエラー・スタックに

Failed to execute target procedure ORA-22275: invalid LOB locator specified 

ORA-06512: at "SYS.WPG_DOCLOAD", line 51 

ORA-06512: at "User.Package", line 733 

ORA-06512: at line 33 

答えて

16

一時的に最初の

DBMS_LOB.CREATETEMPORARY(z_lob,true); --true if you want it to be cached. 
+2

であなたのロブを初期化するあなたのreturn z_lob;を変更することができます。これで、再割り当てされ、優先順位が変更されました。しかし、あなたの答えは最終的に働いた。ありがとう! – Phoenix

+0

'DBMS_LOB.OPEN'と同様に、 - ' DBMS_LOB.CREATETEMPORARY( lob_loc => z_lob 、キャッシュ=> true 、dur => dbms_lob.call); DBMS_LOB.OPEN( lob_loc => z_lob 、open_mode => DBMS_LOB.LOB_READWRITE); ' - それが動作します。 – PhistucK

0

を追加するあなたの機能は、おそらくあなたが見る未処理の例外がスローされますSYS.WPG_DOCLOAD方法に(あなたのauditパラメータの値に応じて)NULL値を持つブロブを返しています。

おそらくあなたは、私はあなたがこのために信用を得作りたかったreturn nvl(z_lob, empty_blob());

関連する問題