【问题标题】:Declare a BIT variable and set it as a Subquery in SQL Oracle Developer在 SQL Oracle Developer 中声明一个 BIT 变量并将其设置为子查询
【发布时间】:2015-03-05 20:27:56
【问题描述】:

我正在使用 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 中不能有以@ 开头的不带引号的标识符;您是针对 Oracle DB 运行此程序,还是仅使用 SQL Developer 连接到不同的 RDBMS?您收到的整个错误消息是什么?
  • 这肯定不可能是oracle。 DECLARE variable BIT; Oracle 可能会说无效的 plsql 块,因为 DECLARE
  • 我想你想要DECLARE HasntPassedCourse BOOLEAN;
  • @ruudvan,用DECLARE 启动 PL/SQL 块有什么无效的?
  • @DavidFaber,不是 DECLARE 本身,而是 DECLARE 没有 BEGIN 的事实。

标签: sql oracle variables boolean subquery


【解决方案1】:

您需要以下内容。首先,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;
/

如果您只需要 0 和 1,请将 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 是对通过触发器添加或更新的行的引用?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多