в списке выбора курсора требуется псевдоним - PullRequest
0 голосов
/ 28 мая 2020

Я получаю сообщение об ошибке, когда я скомпилировал приведенный ниже код в качестве псевдонима, необходимого в списке выбора курсора.

   Create Or Replace PROCEDURE pr_no_debit is
     Cursor c_Today(From_date date, To_Date date) is
     Select Today from sttm_dates where today between From_Date and To_Date;

        cursor c_no_debit is
      Select a.* , b.* from STTM_NO_DEBIT_customer a , STTM_FIN_CYCLE b where a.Fin_Cycle = b.Fin_Cycle ;

   l_No_Debit_List   STTM_NO_DEBIT_CUSTOMER%ROWTYPE;

   begin
     For i_indx in c_Today(l_No_Debit_List.From_Date,l_No_Debit_List.To_Date) 
       Loop  
         for j_indx in c_no_debit 

     loop

       update sttm_cust_account set ac_stat_no_Dr='Y' where account_class=j_index.account_class;
     end loop;

   End Loop;

     -- At the end of the period Change No_Debit to 'N'

   End pr_no_debit;  

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Другим решением может быть разделение курсора на две части, хотя в данном случае достаточно указать псевдоним для соответствующих столбцов:

Курсор c_no_debit: c_no_debit_1: на основе таблицы STTM_NO_DEBIT_customer a c_no_debit_2: на основе таблицы STTM_FIN_CYCLE b

Через параметризованный курсор передать значение cursor_1 в cursor_2.

0 голосов
/ 20 июня 2020

Таблицы STTM_NO_DEBIT_CUSTOMER и STTM_FIN_CYCLE имеют столбец с именем FIN_CYCLE, поэтому, когда компилятор PL / SQL пытается построить запись j_indx из c_no_debit, он получает что-то вроде этого:

( fin_cycle      number
, from_date      date
, to_date        date
, account_class  varchar2(20)
, fin_cycle      number
, ... 

, что недопустимо, поскольку в записи не может быть двух полей с одинаковым именем.

Измените c_no_debit, чтобы указать только нужные столбцы, например:

cursor c_no_debit is
    select a.account_class
    from   sttm_no_debit_customer a
           join sttm_fin_cycle b on b.fin_cycle = a.fin_cycle;

(и, возможно, другие столбцы - у меня нет вашей схемы, и я не знаю, что ей нужно делать)

...