ora-06502写入LONG变量

时间:2014-11-12 07:16:14

标签: oracle plsql plsqldeveloper

这是一个简化的请求:

declare
  long_var long;
begin
  select long_column into long_var from my_table where id = 1;
end;

适用于大多数情况但是当long_column值太大时(我发现至少有一个条目 - 它的值大约为5兆字节)会导致

ORA-06502: PL/SQL: numeric or value error

1 个答案:

答案 0 :(得分:1)

来自Oracle PL / SQL文档

  

您无法从LONG或LONG RAW列中检索长度超过32,760字节的值为LONG或LONG RAW变量。

https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/datatypes.htm#CJAEGDEB

您可以使用CLOB,但必须将列从LONG更改为CLOB

ALTER TABLE my_table MODIFY ( long_column CLOB );

然后你使用:

declare
  clob_var clob;
begin
  select long_column into clob_var from my_table where id = 1;
end;

如果您无法更改表格,请将其复制:

1)使用CLOB创建表

create table my_table_2 (clob_column clob, id number);

2)复制

insert into my_table_2 
select to_lob(long_column), id from my_table;

3)访问新表

declare
  clob_var clob;
begin
  select clob_column into clob_var from my_table_2 where id = 1;
end;