Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Giá trị CLOB vào / ra từ plsql (bộ định vị LOB không hợp lệ được chỉ định:ORA-22275)

Tại thời điểm này:

    dbms_lob.loadclobfromfile(
      DEST_LOB     => l_clob

... l_clob của bạn Tham số OUT chưa được khởi tạo. Đặt nó thành CLOB trống cũng không hoạt động (vì vậy ngay cả khi bạn đã tạo l_clob tham số IN OUT nó vẫn sẽ phàn nàn) làm tài liệu cho empty_clob đề cập :

Thay vào đó, bạn có thể sử dụng CLOB tạm thời bằng cách thêm lệnh gọi vào dbms_lob.createtemporary(l_clob, true) trước khi bạn cố gắng sử dụng nó:

...
begin
    l_bfile := bfilename( 'SCHEMES_OF_PS', p_file_name );
    dbms_lob.fileopen( l_bfile );
    dbms_lob.createtemporary(l_clob, true);
    dbms_lob.loadclobfromfile(
      DEST_LOB     => l_clob
      ...

Và sau đó, bạn không cần phải cung cấp giá trị trống ban đầu khi bạn gọi nó:

declare
  myVal clob;
begin
  dbst_load_a_file('Konotop.svg', myVal);
  DBMS_OUTPUT.PUT_LINE(myVal);
end;
/

Điều này cũng hoạt động như một chức năng:

create or replace 
function dbst_load_a_file( p_file_name in varchar2) return clob
as
    l_clob    clob;
    l_bfile   bfile;
    dst_offset  number := 1 ;
    src_offset  number := 1 ;
    lang_ctx    number := DBMS_LOB.DEFAULT_LANG_CTX;
    warning     number;
begin
    l_bfile := bfilename( 'SCHEMES_OF_PS', p_file_name );
    dbms_lob.fileopen( l_bfile );
    dbms_lob.createtemporary(l_clob, true);
    dbms_lob.loadclobfromfile(
      DEST_LOB     => l_clob
    , SRC_BFILE    => l_bfile
    , AMOUNT       => dbms_lob.getlength( l_bfile )
    , DEST_OFFSET  => dst_offset
    , SRC_OFFSET   => src_offset
    , BFILE_CSID   => DBMS_LOB.DEFAULT_CSID
    , LANG_CONTEXT => lang_ctx
    , WARNING      => warning);
    dbms_lob.fileclose( l_bfile );
    return l_clob;
end;
/

select dbst_load_a_file('Konotop.svg') from dual;

Hoặc sử dụng trong insert như trong câu hỏi đã chỉnh sửa của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách sử dụng các mục nhập tns với trình điều khiển macromedia cho Oracle

  2. Gọi hàm gói Oracle bằng Odbc từ C #

  3. Chuyển đổi hàng cột trong Oracle Sql

  4. Sắp xếp các hàng bằng cách sử dụng các cột từ số lượng ít hơn giá trị null đến không có giá trị nào

  5. Tệp đính kèm trong Ứng dụng Oracle R12