【问题标题】:Oracle forms cursor issueOracle 表单游标问题
【发布时间】:2018-06-07 09:37:04
【问题描述】:

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

【问题讨论】:

    标签: oracle plsql cursor oracleforms


    【解决方案1】:

    它是哪个表单版本?如果它在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); 
    

    【讨论】:

    • 我还没有尝试过 Forms 12c,但是从 Forms 11g 开始,ANSI 连接语法仍然无法在 Forms 中使用。我希望它能在 12c 中工作,我们很快就会迁移到 12c。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2017-10-31
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多