简体   繁体   English

ORA - 06502:PL / SQL:数字或值错误:批量绑定:截断绑定

[英]ORA - 06502:PL/SQL : Numeric or Value Error:Bulk Bind : truncated Bind

Here is my stored procedure: 这是我的存储过程:

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 MR.MEMO_DATA BULK COLLECT
        INTO  ls_memo_raw
        FROM V3_TO_V4_MEMO A, MEMO_RTF MR
       WHERE A.MEMO_ID = MR.MEMO_ID;     

      RMEMO :=ls_memo_raw;
   End MIGRATE_MEMO_TO_MEMO_CLOB;
END BS_SAMPLES;

When I try to execute the Procedure, I am getting the following error: 当我尝试执行过程时,我收到以下错误:

ORA - 06502:PL/SQL : Numeric or Value Error:Bulk Bind : truncated Bind

Using Oracle version: Oracle Database 11g Release 11.2.0.2.0 - 64bit Production 使用Oracle版本:Oracle Database 11g 11.2.0.2.0版 - 64位生产版

Table Memo_rtf 表Memo_rtf


Name             Null          Type
MEMO_ID          NOT NULL      NUMBER(10)
MEMO_DATA                      LONG RAW()

Table V3_TO_V4_MEMO 表V3_TO_V4_MEMO


Name             Null         Type    
MEMO_ID                       NUMBER(10) 

There is a difference between LONG ROW in PL/SQL and SQL. PL / SQL和SQL中的LONG ROW有所不同。

In SQL: 在SQL中:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm

"Raw binary data of variable length up to 2 gigabytes." “可变长度高达2千兆字节的原始二进制数据。”

In PL/SQL: 在PL / SQL中:

http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/datatypes.htm#i10924 http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/datatypes.htm#i10924

" You use the LONG RAW datatype to store binary data or byte strings. LONG RAW data is like LONG data, except that LONG RAW data is not interpreted by PL/SQL. The maximum size of a LONG RAW value is 32760 bytes. " “您使用LONG RAW数据类型来存储二进制数据或字节字符串.LONG RAW数据类似于LONG数据,但PL / SQL不会解释LONG RAW数据.LONG RAW值的最大大小为32760字节。”

See example below: 见下面的例子:

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;

OK, now I added 1 row to T table and put into X column the image (using PL/SQL Developer tool) what has about 90K size. 好的,现在我在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 

Ok, let's now re-create table T and add the image with about 29K size - all will work: 好的,我们现在重新创建表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 

So LONG ROW should be converted to BLOB and this is the best way to handle it. 所以LONG ROW应该转换为BLOB,这是处理它的最佳方式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM