2012-12-20 33 views
6

मेरे पास एक प्रक्रिया है जो एक पीडीएफ दस्तावेज़ के साथ एक बीएलओबी वैरिएबल को पॉप्युलेट करता है। मैं जो करने की कोशिश कर रहा हूं वह एक स्थिर तारीख से 60 दिनों की अवधि के भीतर ही पीडीएफ दस्तावेज़ को प्रदर्शित करने के लिए तर्क जोड़ना है। नीचे देखें: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 करने के लिए नया हूँ, और अनिश्चित हूं क्यों z_lob वापस लौट कर मेरी ValidID जाँच काम करता है लेकिन मेरे मामले बयान नहीं है।

संपादित करें: जोड़ना पूर्ण त्रुटि ढेर

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

मुझे यकीन है कि आप इस के लिए ऋण मिल बनाना चाहते थे के साथ अपने कार्य Initialise। यह फिर से सौंप दिया गया और फिर से प्राथमिकता प्राप्त हो गया। हालांकि, आपका जवाब अंततः काम किया। धन्यवाद! – Phoenix

+0

'DBMS_LOB.OPEN' के साथ साथ, इस तरह - ' DBMS_LOB.CREATETEMPORARY ( lob_loc => z_lob , कैश => true , dur => dbms_lob.call); डीबीएमएस_LOB.OPEN ( lob_loc => z_lob , open_mode => DBMS_LOB.LOB_READWRITE); ' - और यह काम करता है। – PhistucK

0

आपका समारोह शायद (आपके audit पैरामीटर मान के आधार पर) SYS.WPG_DOCLOAD तरीका है जिसके बिना क्रिया का अपवाद जैसा कि आप देख फेंकता करने के लिए एक शून्य मूल्य के साथ एक ब्लॉब लौटा रहा है।

शायद आप को संशोधित कर सकता है आपके return z_lob; होने की return nvl(z_lob, empty_blob());