sql >> Database teknologi >  >> RDS >> Oracle

CLOB-værdi i ud/retur fra plsql (ugyldig LOB-locator specificeret:ORA-22275)

På dette tidspunkt:

    dbms_lob.loadclobfromfile(
      DEST_LOB     => l_clob
 

... din l_clob OUT-parameteren er ikke blevet initialiseret. At gøre det til en tom CLOB virker heller ikke (så selvom du lavede l_clob en IN OUT-parameter ville det stadig klage) som dokumentationen for empty_clob omtaler :

Du kan bruge en midlertidig CLOB i stedet ved at tilføje et kald til dbms_lob.createtemporary(l_clob, true) før du prøver at bruge det:

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

Og så behøver du ikke angive en indledende tom værdi, når du kalder den:

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

Dette fungerer også som en funktion:

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;
 

Eller brug i en insert som i dit redigerede spørgsmål.



  1. T-SQL for at finde Remote Server Name på den linkede server

  2. Har rækkefølgen af ​​kolonner i en WHERE-sætning betydning?

  3. Sådan bestemmes feltværdien, som ikke kan konverteres til (decimal, float,int) i SQL Server

  4. ORA-01791 Pl-Sql fejl