Oracle 表单游标问题

Oracle forms cursor issue

我正在使用 Oracle Forms 并在编写游标时遇到问题。我的光标是

   CURSOR ss
   IS
        SELECT pjno, bdate, PROJECT
          FROM billcrown
               LEFT JOIN bank_details ON billcrown.pjno = bank_details.pjno
         WHERE billcrown.bdate > '01-Jul-2017'
      GROUP BY billcrown.pjno
        HAVING SUM (billcrown.PAMT) <> NVL (SUM (bank_details.AMOUNT), 0);

   s   ss%ROWTYPE;

固定左连接时显示错误。 错误是(遇到以下符号之一时遇到符号 'JOIN'。, ; ) 它在 SQL 提示符下工作正常。请提出建议。

它是哪个表单版本?如果它在 LEFT JOIN 上抱怨,那可能是 6i 或其他东西。以前的(非常旧的)Forms 版本的 PL/SQL 引擎并没有完全遵循数据库的 PL/SQL 引擎,所以并不是所有在数据库中工作的东西在 Forms 中也工作。

因此,我建议您尝试使用旧的 Oracle 外连接运算符 (+)。

此外,如果 BDATE 列的数据类型是 DATE,您应该针对它使用 DATE 值,而不是字符串。 '01-Jul-2017' 是一个字符串。 DATE '2017-07-01' 是日期(文字)。

最后,说你的代码在 SQL*Plus 中运行良好 - 不,它不是。 GROUP BY 仅包含 c.pjno 列,因此 bdate, PROJECT 也应该包含在其中(或者您应该重写该查询)。

像这样:

   CURSOR ss
   IS
        SELECT c.pjno
          -- , bdate, PROJECT                 --> removed because of the GROUP BY clause
          FROM billcrown c, bank_details d
         WHERE c.pjno = d.pjno (+)            --> this
         and c.bdate > date '2017-07-01'      --> use dates, not strings!
      GROUP BY c.pjno
        HAVING SUM (c.PAMT) <> NVL (SUM (d.AMOUNT), 0);