首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle DBMS_LOB:在PLSQL块中多次使用DBMS_LOB.convertToBlob

Oracle DBMS_LOB:在PLSQL块中多次使用DBMS_LOB.convertToBlob
EN

Stack Overflow用户
提问于 2015-08-09 07:43:54
回答 1查看 6K关注 0票数 1

当我尝试在同一个PLSQL块中多次使用DBMS_LOB.convertToBlob过程时,只有第一个执行像预期的那样工作。所有其他的处决都会产生空白点。下面是一个示例:

代码语言:javascript
复制
DECLARE 

v_temp1 varchar2(32767) := 'absd'; 
V_temp1_blob BLOB; 
V_temp2 varchar2(32767) := 'efghi'; 
V_temp2_blob BLOB;

v_in      integer := 1;
v_out     integer := 1;
v_lang    integer := 0;
v_warning integer := 0;

BEGIN

DBMS_LOB.createTemporary (V_temp1_blob, TRUE);  
DBMS_LOB.convertToBlob(V_temp1_blob, V_temp1, DBMS_LOB.LOBMAXSIZE, v_in, v_out, DBMS_LOB.DEFAULT_CSID, v_lang, v_warning);
dbms_output.put_line('V_temp1_blob: ' || dbms_lob.getlength(V_temp1_blob));

DBMS_LOB.createTemporary (V_temp2_blob, TRUE);
DBMS_LOB.convertToBlob(V_temp2_blob, V_temp2, DBMS_LOB.LOBMAXSIZE, v_in, v_out, DBMS_LOB.DEFAULT_CSID, v_lang, v_warning);
dbms_output.put_line('V_temp2_blob: ' || dbms_lob.getlength(V_temp2_blob));

END;

产出:

代码语言:javascript
复制
V_temp1_blob: 4
V_temp2_blob: 0

我的预期产出是:

代码语言:javascript
复制
V_temp1_blob: 4
V_temp2_blob: 5

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-09 08:02:22

您的v_inv_out局部变量将作为convertToBlob过程的dest_offsetsrc_offset参数传入。这些是in out参数,因此它们被调用修改。

dest_offset,也就是您要传递v_in的内容,被定义为

( in )在写入开始时,目标LOB中的字节偏移量。指定一个从LOB开头开始的值1。 (OUT)写入结束后的新偏移量(以字节计)。

src_offset,也就是您要传递的v_out,则被定义为

( in )在读取开始时在源LOB中的字符中偏移。 (OUT)读取结束后源LOB中字符的偏移量。

对于第一个电话,在这两种情况下,您都要传递1。对于第二个调用,您将从第一个LOB传入偏移量。在进行第二次调用之前,需要将这两个参数重新初始化为1。

我还建议您为这些变量选择比v_inv_out更好的变量名。如果它们被命名为v_src_offsetv_dest_offset,这通常会使您的代码更清晰,并可能使错误更容易识别。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31902029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档