在SQLPLUS中,如果结果是n>n的varchar2(N),如何将PL/SQL函数的结果赋给变量

tf7tbtn2  于 2022-10-04  发布在  Oracle
关注(0)|答案(2)|浏览(125)
CREATE function f4001 return varchar2
is
begin
   return rpad('*', 4100, '*');
end;

select f4001() from dual;

不起作用:SQL缓冲区太小

因此,要为SQL变量赋值,我使用该变量:

variable buffer varchar(32000);
execute :buffer = f4001();

我可以打印出来:

print buffer

但我不能提示它。或者将其用作PowerShell函数的参数:

host powershell echo '&buffer'

因此,我必须使用‘定义’或‘列’。

定义:我还没有找到一种方法来给出带有定义的pl/SQL函数的结果。我所能做的就是:

define buffer= cte

列:仅适用于N>4000的varchar(N)。

column buffer new_value buffer
  select f3999 as buffer from dual

好的

select f4001 as buffer from dual

缓冲区太小

fumotvh3

fumotvh31#

用lob替换varchar2类型确实帮助我解决了“缓冲区太小”的问题。

所以,换句话说,试试这个:

CREATE or replace function f4001 return clob ...

variable buffer clob;
y4ekin9u

y4ekin9u2#

Create Function文档说明:
数据库从调用函数的环境派生返回值的长度、精度或小数位数。

您的环境是SQL,在其中,varchar2被限制为4000个字符。

怎么办呢?

  • 如果您的数据库版本为12c或更高版本,请与数据库管理员联系,看看他们是否可以将MAX_STRING_SIZE设置为EXTENDED(则最大大小为32767而不是4000),或者
  • 切换到CLOB数据类型

相关问题