Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wartość CLOB w out/return z plsql (określono nieprawidłowy lokalizator LOB:ORA-22275)

W tym momencie:

    dbms_lob.loadclobfromfile(
      DEST_LOB     => l_clob

... Twój l_clob Parametr OUT nie został zainicjowany. Uczynienie go pustym CLOBem również nie działa (więc nawet jeśli zrobiłeś l_clob parametr IN OUT, nadal będzie narzekać) jako dokumentacja dla empty_clob wzmianki :

Zamiast tego możesz użyć tymczasowego CLOB, dodając wywołanie dbms_lob.createtemporary(l_clob, true) zanim spróbujesz go użyć:

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

A potem nie musisz podawać początkowej pustej wartości, gdy ją wywołasz:

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

Działa to również jako funkcja:

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;

Lub użyj w insert jak w edytowanym pytaniu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. problem ze znalezieniem listy plików w katalogu

  2. Różnica między klasami sterowników Oracle jdbc?

  3. Jak odzyskać bazę danych za pomocą RMAN

  4. Asp Classic Connection String 500 — wewnętrzny błąd serwera

  5. Co jest potrzebne do pracy z Oracle z Visual Studio 2010?