sql >> データベース >  >> RDS >> Oracle

plsqlからの出力/戻りのCLOB値(無効なLOBロケータが指定されました:ORA-22275)

    この時点で:

        dbms_lob.loadclobfromfile(
          DEST_LOB     => l_clob
    

    ...あなたのl_clob OUTパラメータが初期化されていません。空のCLOBにすることも機能しません(したがって、l_clobを作成した場合でも IN OUTパラメータでも文句を言います)のドキュメントとしてempty_clob 言及

    代わりに、dbms_lob.createtemporary(l_clob, true)への呼び出しを追加することにより、一時CLOBを使用できます。 使用する前に:

    ...
    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. データベースにはÂなどの記号がありますが、どうすればよいですか?

    2. 同じ列値を持つmysqlテーブルから特定の行を削除するにはどうすればよいですか?

    3. MySQLを使用して複数の列でGROUPBYすることは可能ですか?

    4. Oracleのビューを参照する外部キー