Oracle формирует курсор - PullRequest
       12

Oracle формирует курсор

0 голосов
/ 07 июня 2018

Я использую 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 голосов
/ 07 июня 2018

Какая версия Forms это?Если он жалуется на LEFT JOIN, это, вероятно, 6i или что-то.Движок PL / SQL предыдущих (очень старых) версий Forms не совсем соответствовал движку 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); 
...