我正在使用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);
答案 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
是对通过触发器添加或更新的行的引用?