gpt4 book ai didi

oracle - 在 PL/SQL 中使用 bool 值

转载 作者:行者123 更新时间:2023-12-04 02:50:30 30 4
gpt4 key购买 nike

我在 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;

该函数编译成功,但是当我尝试将其运行为:
DECLARE
exist boolean;
BEGIN
exist=checkEmpNo(1);
dbms_output.put_line(exist);
END;

它返回错误:
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;

编辑:

我也试过这个:
DECLARE
exist boolean:=true;
BEGIN
if(exist=checkEmpNo(1))
then
dbms_output.put_line('true');
else
dbms_output.put_line('false');
end if;
END;

它返回错误: ORA-01422: exact fetch returns more than requested number of rows

最佳答案

dbms_output.put_line不会重载以接受 bool 参数。你可以做类似的事情

dbms_output.put_line( case when exist = true 
then 'true'
else 'false'
end );

将 bool 值转换为字符串,然后您可以将其传递给 dbms_output .

ORA-01422 错误是一个完全独立的问题。函数 checkEmpNo包括 SELECT INTO陈述
SELECT emp_id 
INTO emp_number
FROM emp;

一个 SELECT INTO如果查询返回 1 行以外的任何内容,则会产生错误。在这种情况下,如果 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;

关于oracle - 在 PL/SQL 中使用 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13560040/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com