【问题标题】:Get screen output of a function获取函数的屏幕输出
【发布时间】:2013-12-05 10:05:53
【问题描述】:

我是 PLSQL 的绝对初学者,但我一直被这个问题困扰:

我有一个功能:

FUNCTION fn_easy RETURN VARCHAR2 IS
BEGIN
  RETURN 'This is a simple function';
END fn_easy;

我想在一个简单的 SQL 脚本中看到这个输出,但是这个代码:

set serveroutput on format wraped;

VAR retMsg VARCHAR2;

BEGIN
  dbms_output.put_line('=================================================');
  retMsg := pkg.fn_easy();
  dbms_output.put_line('=================================================');
END;

print retMsg;

给我以下错误:

ORA-06550: Ligne 3, colonne 3 :
PLS-00201: identifier 'RETMSG' must be declared 
ORA-06550: Ligne 3, colonne 3 :
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

【问题讨论】:

  • a) 要引用绑定变量,您需要输入冒号:,后跟变量名,因此在您的PL/SQL 块中retMsg 应该变为:retMsg; b) 当你在 SQL*PLUS 中声明varchar2 数据类型的绑定变量并且没有指定它的最大大小时,大小默认为 1,所以你最好重新声明它,使其足够大以存储 @ 返回的987654328@函数值,否则会打ORA-06502错误。

标签: oracle plsql


【解决方案1】:

使用 DECLARE 关键字在匿名块中添加变量声明。另请注意,您的“打印”也应该是 dbms_output.put_line 并且它在块之外(在 END 关键字之后)。

【讨论】:

    【解决方案2】:

    这完成了工作:

    DECLARE
    retMsg VARCHAR2(100);
    
    /* Appel de la procédure */
    BEGIN
      dbms_output.put_line('=================================================');
      dbms_output.put_line(agi_ws_pkg.fn_easy());
      dbms_output.put_line('=================================================');
    END;
    

    【讨论】:

    • 您可以从声明部分中删除 retMsg,因为您没有在代码中使用它。
    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 2023-03-11
    • 2014-05-22
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多