检查值是不是存在的过程
Posted
技术标签:
【中文标题】检查值是不是存在的过程【英文标题】:Procedure that checks if values exist检查值是否存在的过程 【发布时间】:2014-03-15 02:52:43 【问题描述】:我还是 PL/SQL 的新手,我想做的是创建一个过程,该过程将显示输出活动以及俱乐部的计数。如果输入活动未记录在案,则显示“活动不在数据库中”之类的消息。我已经创建了一个函数,我现在需要调用这个函数来执行我所描述的。
我的功能是:
create or replace function ex3b_activity_check (club_id_in in number)
return boolean is
act integer;
begin
select activity into act
from club_activity
where club_id = club_id_in;
if act is not null then
return true;
else
return false;
end if;
end;
我的程序没有给我想要的结果。桌子是这样的
SPORTING_CLUBS TABLE
CLUB_ID - NAME - STREET - CITY - STATE - ZIP - PHONE - FEE
------- ----- ------ ----- ----- ---- ----- -----
CLUB_ACTIVITY TABLE
CLUB_ID - ACTIVITY
------- --------
我花了更多的时间来解决它而不是其他任何事情。非常感谢您的帮助。
【问题讨论】:
您能提供两个表中的一些示例数据吗?您面临的问题是什么 - 没有返回行、返回不正确的行等。 我的程序没有真正正确编译。因此我没有返回数据 @user3311980 粘贴您实际收到的错误会很有帮助。只看源码很难从一大堆错误信息中推断出错误 你是如何调用你的函数的?如果您在 SQL 上下文中调用它,***.com/questions/5260238/… 应该可以帮助您。 乍一看,我看不出您的函数无法编译的任何明显原因。请编辑您的问题并包含您遇到的错误。谢谢。 【参考方案1】:我不建议使用布尔值,因为它不能被纯 sql 识别,无论如何你可以像下面这样使用你的函数:
declare MyValue boolean;
begin
MyValue := ex3b_activity_check(1);
end;
我建议使用 varchar2,它将返回 Y 或 N 的单个字符,如下所示:
CREATE OR REPLACE FUNCTION EX3B_ACTIVITY_CHECK (CLUB_ID_IN IN NUMBER)
RETURN VARCHAR2
IS
COUNT_IT NUMBER;
BEGIN
SELECT COUNT(ACTIVITY)
INTO COUNT_IT
FROM CLUB_ACTIVITY
WHERE CLUB_ID = CLUB_ID_IN;
IF COUNT_IT = 0
THEN
RETURN 'N';
ELSE
RETURN 'Y';
END IF;
END;
然后你就可以轻松使用它了
Select EX3B_ACTIVITY_CHECK(1) from dual;
【讨论】:
以上是关于检查值是不是存在的过程的主要内容,如果未能解决你的问题,请参考以下文章
如何在创建存储过程之前检查 PERVASIVE 数据库中是不是存在存储过程?
用于检查文件是不是存在于 Web 服务器上的 Oracle 过程