如何在过程中显示函数返回的值

Posted

技术标签:

【中文标题】如何在过程中显示函数返回的值【英文标题】:How to display value return from function in procedure 【发布时间】:2017-02-23 06:13:49 【问题描述】:

我想将p_string传递给过程,然后过程将它传递给函数,函数将返回布尔值给过程,然后使用dbms_output.put_line显示返回过程的布尔值。但是,我在显示它时遇到了问题。我应该如何显示它?

CREATE OR REPLACE PACKAGE BODY LAB4_527802_pkg AS
FUNCTION LAB4_527802_FCN( p_string VARCHAR2)
  RETURN BOOLEAN
  AS
  string1 BOOLEAN;
    BEGIN
      IF p_string = 'AAA' THEN
          string1 := TRUE;
        ELSE
          string1 := FALSE;
      END IF;
      return string1;
  END LAB4_527802_FCN;

  PROCEDURE LAB4_527802_PROC (p_string varchar2)
  AS
  string1 boolean;
  BEGIN
  string1 := LAB4_527802_pkg.LAB4_527802_FCN(p_string);
  dbms_output.put_line (string1);
  END LAB4_527802_PROC;
  END LAB4_527802_pkg;
  /
  SHOW ERRORS

这就是我调用程序的方式。

  set serveroutput on;  
  begin
  LAB4_527802_pkg.LAB4_527802_PROC ('AAA');
  end; 

【问题讨论】:

请在您的第二个脚本(类似于您的第一个脚本)中添加一行包含“/”的行 如果你给布尔类型的参数命名为'string1'会相当混乱,因为代码的读者会认为它的类型是字符串(VARCHAR2 或 CHAR)。您可以将其命名为“is_string”。 您是否同意您的问题是如何专门显示布尔值,而与函数无关?我的意思是begin dbms_output.put_line(true); end; 仍然会有同样的问题 【参考方案1】:

尽管变量名为 string1,但在函数 LAB4_527802_FCN 和过程 LAB4_527802_PROC 中都将变量声明为布尔值。 我首先建议使用不同的名称。但正如您可能想象的那样,这不是问题的原因。

排队

dbms_output.put_line (string1);

您正在尝试打印一个不起作用的布尔类型变量。过程 put_line 需要一个 'string' (char, varchar, varchar2) 参数。

我怀疑您收到以下错误,不是吗?

PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'

您需要将布尔值转换为字符串才能打印。例如:

DBMS_OUTPUT.put_line (CASE WHEN string1 THEN 'TRUE' ELSE 'FALSE' END);

【讨论】:

我明白了,谢谢,我不知道 put_line 只支持 char、varchar、varchar2。 您也可以使用sys.diutil.bool_to_int 将您的布尔返回值转换为1 或0 并与dbms_output.put_line 一起使用

以上是关于如何在过程中显示函数返回的值的主要内容,如果未能解决你的问题,请参考以下文章

如何获取AsyncTask 异步处理的返回值

如何在excel的if函数的返回某一个单元格的数值(即引用某单元格的值)

如何通过c#在SQL中检索SUM函数的值

如何将注册中设置的值显示到 seevalue() 函数中?范围

如何在函数中返回 CLLocationManager didUpdateLocations 的值?

我如何最终在 Lambda 函数中返回 promise 的值?