2017-02-23 54 views
-1

我想在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; 
+0

请追加行containi“/”你的第二个脚本(类似于你的第一个SCRPT) – miracle173

+1

这是相当混乱,如果你给boolean类型名称“字符串1”的参数,因为的读者代码将假定它的类型是字符串(VARCHAR2或CHAR)。你可以将它命名为'is_string'。 – miracle173

+0

您是否同意您的问题是如何显示布尔值,并且与函数无关?我的意思是你仍然会遇到'begin dbms_output.put_line(true);结束;' –

回答

2

虽然命名字符串1的变量声明为布尔值,无论是在功能LAB4_527802_FCN和程序LAB4_527802_PROC。 我会首先建议使用不同的名称。但正如你可以想象的那样,这不是问题的原因。

在行

dbms_output.put_line (string1); 

你想打印boolean类型不工作的一个变量。过程put_line需要一个'字符串'(char,varchar,varchar2)参数。

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

​​

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

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

我看到好了,谢谢,我不知道put_line只支持char,varchar,varchar2。 –

+1

您也可以使用'sys.diutil.bool_to_int'将您的布尔返回值转换为1或0并将其与'dbms_output.put_line'一起使用 – XING