我正在使用Oracle表单,但在编写游标时遇到问题。我的光标是
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 或其他什么。以前(非常旧的(表单版本的PL/SQL引擎并不完全遵循数据库的PL/SQL引擎,因此并非所有在数据库中工作的东西都可以在表单中工作。
因此,我建议您尝试使用旧的 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);