ORA-06502: PL/SQL: numeric or value error: raw variable length too long
ORA-06502: PL/SQL: numeric or value error: raw variable length too long
你好,当我 select BLOB 尝试了 Whosebug
的一些答案但没有帮助时,我正面临 raw variable length too long issue
。
有什么方法可以从 BLOB
字段中获取所有数据吗? 如果我们得到两列或更多列中的数据,我可以进行调整。
这是我的查询 -
SELECT ID,
utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE_VALUE))
FROM XYZ t1
LEFT OUTER JOIN ABC t2 ON
t1.SPEC_ID = T2.SPEC_ID
这是错误-
ORA-06502: PL/SQL: numeric or value error: raw variable length too long
ORA-06512: at line 1
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause: An arithmetic, numeric, string, conversion, or constraint error
occurred. For example, this error occurs if an attempt is made to
assign the value NULL to a variable declared NOT NULL, or if an
attempt is made to assign an integer larger than 99 to a variable
declared NUMBER(2).
*Action: Change the data, how it is manipulated, or how it is declared so
that values do not violate constraints.
已尝试以下答案但无效
numeric or value error: raw variable length too long ORA-06512: at "SYS.UTL_RAW"
在SQL中,VARCHAR2的最大长度为4000字节(除非你的数据库修改了MAX_STRING_SIZE)。 RAW 的最大长度为 2000 字节(如果 MAX_STRING_SIZE 没有更改)。
由于调用DBMS_LOB.SUBSTR
时没有指定长度,默认为32767。如果将长度缩短为2000,应该不会出错。
SELECT ID, UTL_RAW.cast_to_varchar2 (DBMS_LOB.SUBSTR (NOTE_VALUE, 2000))
FROM XYZ t1 LEFT OUTER JOIN ABC t2 ON t1.SPEC_ID = T2.SPEC_ID
另一种选择是,您可以尝试从 BLOB -> CLOB -> VARCHAR2 而不是从 BLOB -> RAW -> VARCHAR2 进行,这样您可以获得 4000 个字符而不是 2000 个字符
SELECT ID, SUBSTR (TO_CLOB (NOTE_VALUE), 1, 4000)
FROM XYZ t1 LEFT OUTER JOIN ABC t2 ON t1.SPEC_ID = T2.SPEC_ID;
我使用以下查询解决了问题 -
SELECT ID,
utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE_VALUE, 2000, 1)) as First_Part,
utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE_VALUE, 4000, 2001)) as Second_Part,
utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE_VALUE, 6000, 4001)) as third_Part,
FROM XYZ t1
LEFT OUTER JOIN ABC t2 ON
t1.SPEC_ID = T2.SPEC_ID
你好,当我 select BLOB 尝试了 Whosebug
的一些答案但没有帮助时,我正面临 raw variable length too long issue
。
有什么方法可以从 BLOB
字段中获取所有数据吗? 如果我们得到两列或更多列中的数据,我可以进行调整。
这是我的查询 -
SELECT ID,
utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE_VALUE))
FROM XYZ t1
LEFT OUTER JOIN ABC t2 ON
t1.SPEC_ID = T2.SPEC_ID
这是错误-
ORA-06502: PL/SQL: numeric or value error: raw variable length too long
ORA-06512: at line 1
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause: An arithmetic, numeric, string, conversion, or constraint error
occurred. For example, this error occurs if an attempt is made to
assign the value NULL to a variable declared NOT NULL, or if an
attempt is made to assign an integer larger than 99 to a variable
declared NUMBER(2).
*Action: Change the data, how it is manipulated, or how it is declared so
that values do not violate constraints.
已尝试以下答案但无效
numeric or value error: raw variable length too long ORA-06512: at "SYS.UTL_RAW"
在SQL中,VARCHAR2的最大长度为4000字节(除非你的数据库修改了MAX_STRING_SIZE)。 RAW 的最大长度为 2000 字节(如果 MAX_STRING_SIZE 没有更改)。
由于调用DBMS_LOB.SUBSTR
时没有指定长度,默认为32767。如果将长度缩短为2000,应该不会出错。
SELECT ID, UTL_RAW.cast_to_varchar2 (DBMS_LOB.SUBSTR (NOTE_VALUE, 2000))
FROM XYZ t1 LEFT OUTER JOIN ABC t2 ON t1.SPEC_ID = T2.SPEC_ID
另一种选择是,您可以尝试从 BLOB -> CLOB -> VARCHAR2 而不是从 BLOB -> RAW -> VARCHAR2 进行,这样您可以获得 4000 个字符而不是 2000 个字符
SELECT ID, SUBSTR (TO_CLOB (NOTE_VALUE), 1, 4000)
FROM XYZ t1 LEFT OUTER JOIN ABC t2 ON t1.SPEC_ID = T2.SPEC_ID;
我使用以下查询解决了问题 -
SELECT ID,
utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE_VALUE, 2000, 1)) as First_Part,
utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE_VALUE, 4000, 2001)) as Second_Part,
utl_raw.cast_to_varchar2(dbms_lob.substr(NOTE_VALUE, 6000, 4001)) as third_Part,
FROM XYZ t1
LEFT OUTER JOIN ABC t2 ON
t1.SPEC_ID = T2.SPEC_ID