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

Declare a BIT variable and set it as a Subquery in SQL Oracle Developer

我正在使用 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);

您需要如下内容。首先,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 是对通过触发器添加或更新的行的引用?