Oracle
 sql >> база данни >  >> RDS >> Oracle

CLOB стойност при изход/връщане от plsql (посочен невалиден LOB локатор:ORA-22275)

В този момент:

    dbms_lob.loadclobfromfile(
      DEST_LOB     => l_clob

... вашият l_clob Параметърът OUT не е инициализиран. Правенето му на празен CLOB също не работи (така че дори ако сте направили l_clob параметър IN OUT, пак ще се оплаква) като документация за empty_clob споменавания :

Вместо това можете да използвате временен CLOB, като добавите извикване към dbms_lob.createtemporary(l_clob, true) преди да опитате да го използвате:

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

И тогава не е необходимо да давате първоначална празна стойност, когато го извиквате:

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

Това работи и като функция:

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;

Или използвайте в insert както във вашия редактиран въпрос.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP, IIS, Oracle (OCI) не работят

  2. Как да добавя заявка за време в Oracle?

  3. Как да върна няколко реда от съхранената процедура? (Oracle PL/SQL)

  4. Как да инсталирам ruby-oci8?

  5. Маскиране на данни на Oracle