declare
v1 boolean;
begin
select plsql_package.plsql_function('arg1', 'arg2') into v1 from dual;
dbms_output.put_line('result = ' || v1);
end;
2 回答
2
它不会像那样工作; DBMS_OUTPUT.PUT_LINE 需要字符串,而不是布尔数据类型,所以你必须"convert"一个布尔数据类型变量的值为一个字符串 - 例如,使用 CASE (就像我做的那样) . 看看这个例子:
SQL> create or replace function plsql_function return boolean as
2 begin
3 return false;
4 end;
5 /
Function created.
SQL> set serveroutput on
SQL> declare
2 v1 boolean;
3 begin
4 v1 := plsql_function;
5 dbms_output.put_line('result ' || case when v1 then 'true' else 'false' end);
6 end;
7 /
result false
PL/SQL procedure successfully completed.
SQL>
2
您的代码中有两个错误:
BOOLEAN 数据类型是PL / SQL数据类型,因此不存在于SQL范围内
CREATE FUNCTION test_fn RETURN BOOLEAN IS BEGIN RETURN FALSE; END;
/
declare
v1 boolean;
begin
select test_fn() into v1 from dual;
end;
/
会失败的
ORA-06550: line 4, column 25:
PLS-00382: expression is of wrong type
2 回答
它不会像那样工作;
DBMS_OUTPUT.PUT_LINE
需要字符串,而不是布尔数据类型,所以你必须"convert"一个布尔数据类型变量的值为一个字符串 - 例如,使用CASE
(就像我做的那样) . 看看这个例子:您的代码中有两个错误:
BOOLEAN
数据类型是PL / SQL数据类型,因此不存在于SQL范围内会失败的
因为您正在使用SQL调用函数返回仅PL / SQL数据类型 .
相反,只需将函数结果分配给变量而不使用SQL:
||
和DBMS_OUTPUT.PUT_LINE
函数都不接受BOOLEAN
参数 .会失败的:
和
会失败的:
相反,您需要将
BOOLEAN
数据类型转换为它接受的内容,如VARCHAR2
/CHAR
: