Oracle形成游标问题

时间:2018-06-07 09:37:04

标签: oracle plsql cursor oracleforms

我正在使用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提示符下工作正常。请建议。

1 个答案:

答案 0 :(得分:1)

是哪种表格版本?如果它在LEFT JOIN上抱怨,那可能是6i或者其他什么。以前(非常旧)表单版本的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); 
相关问题