我在pl sql中有一个函数,它检查特定的emp id是否存在,它是:
CREATE OR REPLACE FUNCTION checkEmpNo(eno numeric)
RETURN boolean IS
emp_number number;
BEGIN
SELECT emp_id INTO emp_number
FROM emp;
IF eno=emp_number
THEN
return true;
ELSE
return false;
END IF;
END checkEmpNo;
Run Code Online (Sandbox Code Playgroud)
函数编译成功..但是当我尝试运行函数时:
DECLARE
exist boolean;
BEGIN
exist=checkEmpNo(1);
dbms_output.put_line(exist);
END;
Run Code Online (Sandbox Code Playgroud)
它返回错误:
ORA-06550: line 5, column 1:
PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
ORA-06550: line 5, column 1:
PL/SQL: Statement ignored
3. BEGIN
4. exist:=checkEmpNo(1);
5. dbms_output.put_line(exist);
6. END;
Run Code Online (Sandbox Code Playgroud)
编辑:
我也试过这个:
DECLARE
exist boolean:=true;
BEGIN
if(exist=checkEmpNo(1))
then
dbms_output.put_line('true');
else
dbms_output.put_line('false');
end if;
END;
Run Code Online (Sandbox Code Playgroud)
它返回错误:emp_id
帮助!!
Jus*_*ave 15
dbms_output.put_line没有重载以接受布尔参数.你可以做点什么
dbms_output.put_line( case when exist = true
then 'true'
else 'false'
end );
Run Code Online (Sandbox Code Playgroud)
将布尔值转换为可以传递给的字符串dbms_output.
ORA-01422错误是一个完全独立的问题.该功能checkEmpNo包括SELECT INTO声明
SELECT emp_id
INTO emp_number
FROM emp;
Run Code Online (Sandbox Code Playgroud)
SELECT INTO如果查询返回除1行以外的任何内容,则A 将生成错误.在这种情况下,如果emp表中有多行,您将收到错误.我的猜测是你希望你的功能可以做类似的事情
CREATE OR REPLACE FUNCTION checkEmpNo(p_eno number)
RETURN boolean
IS
l_count number;
BEGIN
SELECT count(*)
INTO l_count
FROM emp
WHERE emp_id = p_eno;
IF( l_count = 0 )
THEN
RETURN false;
ELSE
RETURN true;
END IF;
END checkEmpNo;
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用Oracle函数diutil.bool_to_int将布尔值转换为整数:True - > 1,False - > 0.
dbms_output.put_line(diutil.bool_to_int(p_your_boolean));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54796 次 |
| 最近记录: |