Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Nilai CLOB masuk/kembali dari plsql (penentu lokasi LOB tidak valid:ORA-22275)

Pada titik ini:

    dbms_lob.loadclobfromfile(
      DEST_LOB     => l_clob

... l_clob Anda Parameter OUT belum diinisialisasi. Membuatnya menjadi CLOB kosong juga tidak berfungsi (jadi meskipun Anda membuat l_clob parameter IN OUT masih akan mengeluh) sebagai dokumentasi untuk empty_clob menyebutkan :

Anda dapat menggunakan CLOB sementara sebagai gantinya, dengan menambahkan panggilan ke dbms_lob.createtemporary(l_clob, true) sebelum Anda mencoba menggunakannya:

...
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
      ...

Dan kemudian Anda tidak perlu memberikan nilai kosong awal saat Anda memanggilnya:

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

Ini juga berfungsi sebagai fungsi:

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;

Atau gunakan dalam insert seperti pada pertanyaan Anda yang telah diedit.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengubah format tanggal

  2. Terhubung antara visual dan oracle

  3. Bagaimana cara memasukkan/memperbarui ukuran data yang lebih besar di tabel Oracle?

  4. Pertanyaan Wawancara Oracle

  5. dapatkan daftar angka di antara dua kolom