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