簡體   English   中英

將BLOB / CLOB作為參數傳遞給PL / SQL函數

[英]Passing BLOB/CLOB as parameter to PL/SQL function

我有這個程序我的包裹:

PROCEDURE pr_export_blob(
    p_name              IN      VARCHAR2,
    p_blob              IN      BLOB,
    p_part_size         IN      NUMBER);

我想參數p_blob是BLOB或CLOB。

當我用BLOB參數調用這個過程時,一切都很好。 當我用CLOB參數調用它時,我得到編譯錯誤:

PLS-00306: wrong number or types of arguments in call to 'pr_export_blob'

有沒有辦法編寫一個過程,可以將這些類型中的任何一個作為參數? 某種超級階級可能嗎?

為什么不重載該過程以獲得CLOB實現

PROCEDURE pr_export_lob(
    p_name              IN      VARCHAR2,
    p_blob              IN      BLOB,
    p_part_size         IN      NUMBER);

PROCEDURE pr_export_lob(
    p_name              IN      VARCHAR2,
    p_clob              IN      CLOB,
    p_part_size         IN      NUMBER);

然后,您需要確定在每個過程中如何處理的邏輯。 正如科林所說,CLOB不是BLOB - 所以我不確定你打算用這個做什么

首先是愚蠢的問題,你實際上是在改變程序包中的程序來接受CLOB嗎? CLOB不能與BLOB互換。

可以將CLOB轉換為BLOB

create or replace procedure CLOB2BLOB (p_clob in out nocopy clob, p_blob in out nocopy blob) is
-- transforming CLOB â BLOB
l_off number default 1;
l_amt number default 4096;
l_offWrite number default 1;
l_amtWrite number;
l_str varchar2(4096 char);
begin
  begin
    loop
      dbms_lob.read ( p_clob, l_amt, l_off, l_str );

      l_amtWrite := utl_raw.length ( utl_raw.cast_to_raw( l_str) );
      dbms_lob.write( p_blob, l_amtWrite, l_offWrite,
      utl_raw.cast_to_raw( l_str ) );

      l_offWrite := l_offWrite + l_amtWrite;

      l_off := l_off + l_amt;
      l_amt := 4096;
    end loop;
    exception
      when no_data_found then
        NULL;
 end;
end;

Victor在OTN論壇上的例子 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM