检查值是不是存在的过程

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 数据库中是不是存在存储过程?

检查记录是不是存在,如果它确实加 1(在过程中)

如何在创建存储过程之前检查它是不是存在

用于检查文件是不是存在于 Web 服务器上的 Oracle 过程

如何检查文件是不是存在,那么创建新文件的过程是啥? [复制]

在尝试在 MySQL 中创建存储过程之前,如何检查它是不是存在?