【问题标题】:In sqlplus how how to assign the result of PL/SQL function to a variable if the result is a varchar2(n) with n> n在 sqlplus 中,如果结果是 n> n 的 varchar2(n),如何将 PL/SQL 函数的结果分配给变量
【发布时间】:2022-09-28 20:03:56
【问题描述】:
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

但我无法提示。或者使用 it 作为 powershell 函数的参数:

 host powershell echo \'&buffer\'

出于这个原因,我必须使用 \'define\' 或 \'column\'。

定义:我没有找到一种方法来给出带有定义的 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

缓冲区变小

    标签: oracle sqlplus


    【解决方案1】:

    用 clob 替换 varchar2 类型确实帮助我摆脱了“缓冲区太小”的问题。

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

    CREATE or replace function f4001 return clob ...
    

    variable buffer clob;
    

    【讨论】:

    • 但我想在主机 powershell 缓冲区中进行缓冲区。我不能这样做,我使用一个 clob
    【解决方案2】:

    CREATE FUNCTION 文档说:

    数据库从调用函数的环境中导出返回值的长度、精度或小数位数。

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

    该怎么办?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      相关资源
      最近更新 更多