2012-12-20 32 views
6

Tôi có quy trình điền một biến BLOB bằng tài liệu PDF. Những gì tôi đang cố gắng làm là thêm logic để chỉ hiển thị tài liệu PDF trong khoảng thời gian 60 ngày kể từ ngày tĩnh. Xem dưới đây:Lỗi ORA-22275: trình định vị LOB không hợp lệ được chỉ định

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; 

Các lỗi tôi nhận được là: ORA-22275: invalid LOB locator specified.

Tôi mới vào Oracle SQL, và không chắc chắn lý do tại sao ValidID kiểm tra tác phẩm của tôi bằng cách trả lại z_lob nhưng tuyên bố trường hợp của tôi thì không.

Chỉnh sửa: Thêm đầy đủ lỗi chồng

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 

Trả lời

16

Khởi tạo lob bằng tạm thời đầu tiên

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

tôi muốn chắc chắn rằng bạn có tín dụng cho việc này. Điều này cuối cùng đã được sắp xếp lại và được ưu tiên lại. Tuy nhiên, câu trả lời của bạn cuối cùng đã làm việc. Cảm ơn! – Phoenix

+0

Cùng với 'DBMS_LOB.OPEN', như thế - ' DBMS_LOB.CREATETEMPORARY ( lob_loc => z_lob , cache => true , dur => dbms_lob.call); DBMS_LOB.OPEN ( lob_loc => z_lob , open_mode => DBMS_LOB.LOB_READWRITE); ' - và nó hoạt động. – PhistucK

0

Chức năng của bạn có lẽ trở về (tùy thuộc vào giá trị tham số audit của bạn) một blob với một giá trị NULL vào SYS.WPG_DOCLOAD phương pháp mà ném ngoại lệ unhandled bạn nhìn thấy.

Có lẽ bạn có thể sửa đổi của bạn return z_lob;return nvl(z_lob, empty_blob());

Các vấn đề liên quan