[英]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互换。
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.