是否可以创建动态 varchar2 变量?

Ser*_*aev 2 sql oracle plsql

我在 PLSQL 中有一个函数,它使用字符串进行操作并返回 VARCHAR2 类型。

该函数中的变量之一是

result_key     VARCHAR2 (4000) := '';
Run Code Online (Sandbox Code Playgroud)

当它处理大量数据时,我会收到ORA-06502: PL/SQL: numeric or value error: character string buffer too small错误。

看来我必须扩展我的result_key变量。我看到的唯一解决方案是声明result_key

result_key     VARCHAR2 (8000) := '';
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以在不声明固定大小的情况下做到这一点result_key

Gor*_*off 5

PL/SQL 允许varchar2()类型最多有 32,767 个字节(请参见此处)。这可能足以满足您的目的。请注意,Oracle 表中存储的数据限制为 4,000(请参阅此处)。(在我看来,不同的长度似乎是一个残酷的恶作剧,尽管我理解其根本原因。)

一般来说,较长字符串的类型是CLOB-- 字符较大的二进制对象。它们的行为很像 char/varchar,它们可以存储在表以及 PL/SQL 变量中。一个缺点是查看该值的最简单方法是将它们复制到varchar2()PL/SQL 中。