如何在过程中显示函数返回的值
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
一起使用以上是关于如何在过程中显示函数返回的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在excel的if函数的返回某一个单元格的数值(即引用某单元格的值)
如何将注册中设置的值显示到 seevalue() 函数中?范围