sql >> Databasteknik >  >> RDS >> Oracle

CLOB-värde in ut/retur från plsql (ogiltig LOB-locator specificerad:ORA-22275)

Vid det här laget:

    dbms_lob.loadclobfromfile(
      DEST_LOB     => l_clob

... din l_clob OUT-parametern har inte initierats. Att göra det till en tom CLOB fungerar inte heller (så även om du gjorde l_clob en IN OUT-parameter skulle den fortfarande klaga) som dokumentation för empty_clob nämner :

Du kan använda en tillfällig CLOB istället genom att lägga till ett anrop till dbms_lob.createtemporary(l_clob, true) innan du försöker använda den:

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

Och då behöver du inte ange ett initialt tomt värde när du kallar det:

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

Detta fungerar också 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 använd i en insert som i din redigerade fråga.



  1. Scala Slick:MTable.getTables returnerar tom vektor/lista

  2. Hur man sammanfogar flera värden från flera relationstabeller i en enda mysql-fråga

  3. Bästa metoder för mjuk borttagning (PHP/MySQL)

  4. Ruby:Hur man dynamiskt ersätter parametrar i native PG gem