oracle 绑定产量太多,sql - ORA - 06502:PL / SQL:数字或值错误:批量绑定:截断绑定 - 堆栈内存溢出...

本文探讨了PL/SQL和SQL中LONGRAW数据类型的差异,以及在处理大容量二进制数据时的问题。通过示例展示了在存储超过限制的二进制数据时,如何将LONGRAW转换为BLOB,以及遇到的错误和解决方案。内容涵盖了数据类型的限制、转换过程以及实际操作中的问题解决。
摘要由CSDN通过智能技术生成

PL / SQL和SQL中的LONG ROW有所不同。

在SQL中:

“可变长度高达2千兆字节的原始二进制数据。”

在PL / SQL中:

“您使用LONG RAW数据类型来存储二进制数据或字节字符串.LONG RAW数据类似于LONG数据,但PL / SQL不会解释LONG RAW数据.LONG RAW值的最大大小为32760字节。”

见下面的例子:

SQL> desc t

Имя Пусто? Тип

----------------------------------------- -------- ----------------------------

X LONG RAW

CREATE OR REPLACE PACKAGE BS_SAMPLES AS

TYPE type_memo_raw IS TABLE OF LONG RAW;

PROCEDURE MIGRATE_MEMO_TO_MEMO_CLOB(RMEMO OUT type_memo_raw);

END BS_SAMPLES;

CREATE OR REPLACE PACKAGE BODY BS_SAMPLES AS

PROCEDURE MIGRATE_MEMO_TO_MEMO_CLOB (RMEMO OUT type_memo_raw)

AS

ls_memo_raw type_memo_raw;

BEGIN

SELECT t.x BULK COLLECT

INTO ls_memo_raw

FROM t;

RMEMO := ls_memo_raw;

End MIGRATE_MEMO_TO_MEMO_CLOB;

END BS_SAMPLES;

好的,现在我在T表中添加了1行,并在X列中放入了大约90K大小的图像(使用PL / SQL Developer工具)。

SQL> declare

2 a BS_SAMPLES.type_memo_raw;

3 begin

4 BS_SAMPLES.MIGRATE_MEMO_TO_MEMO_CLOB(a);

5 end;

6 /

declare

*

error in line 1:

ORA-06502: PL/SQL: : Bulk Bind: Truncated Bind

ORA-06512: at "SCOTT.BS_SAMPLES", line 7

ORA-06512: at line 4

SQL> alter table t modify (x blob);

SQL> select dbms_lob.getlength(x) a from t;

a

------------------------------

90025

好的,我们现在重新创建表T并添加大小约29K的图像 - 一切都会起作用:

SQL> declare

2 a BS_SAMPLES.type_memo_raw;

3 begin

4 BS_SAMPLES.MIGRATE_MEMO_TO_MEMO_CLOB(a);

5 end;

6 /

PL/SQL procedure completed.

SQL> alter table t modify (x blob);

SQL> select dbms_lob.getlength(x) a from t;

a

------------------------------

25554

所以LONG ROW应该转换为BLOB,这是处理它的最佳方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值