声明一个BIT变量并将其设置为SQL Oracle Developer中的子查询

时间:2015-03-05 20:27:57

标签: sql oracle variables boolean subquery

我正在使用Oracle SQL Developer,我试图将一个布尔变量设置为子查询的结果。但是我收到一个语法错误,说我错过了“:”。我尝试在我的代码中几乎无处不在插入冒号,但它似乎不起作用。任何想法?

DECLARE @HasntPassedCourse BIT;
SET @HasntPassedCourse = 
EXISTS 
(SELECT P.cid, P.code
FROM PassedCourses P
WHERE P.code != :newline.code AND P.cid != :newline.cid);

1 个答案:

答案 0 :(得分:2)

您需要以下内容。首先,Oracle不允许@符号表示变量名称。它也没有BIT数据类型(尽管PL / SQL允许BOOLEAN)。您也不能将任何类型的列值插入BOOLEAN变量。

DECLARE
  HasntPassedCourse BOOLEAN;
  v_cnt NUMBER;
BEGIN
  HasntPassedCourse := FALSE;
  SELECT COUNT(*) INTO v_cnt FROM dual;
  IF v_cnt != 0 THEN
    HasntPassedCourse := TRUE;
  END IF;
END;
/

就个人而言,我认为您最好只使用查询中返回的行数,并留下0来表示FALSE

DECLARE
  HasntPassedCourse NUMBER;
BEGIN
  SELECT COUNT(*) INTO HasntPassedCourse FROM <your query here>;
END;
/

如果您只想要零和一,那么请在查询中添加AND rownum = 1。所以你可能会做类似以下的事情:

DECLARE
  HasntPassedCourse NUMBER;
BEGIN
  SELECT COUNT(*) INTO HasntPassedCourse FROM PassedCourses P
   WHERE P.code != :newline.code AND P.cid != :newline.cid
     AND rownum = 1;
END;
/

我认为:newline是对通过触发器添加或更新的行的引用?