Как объединить 2 таблицы в PLSQL в ORACLE APEX

#oracle #plsql

Вопрос:

Я пытаюсь создать форму с динамической областью для целей печати. У меня есть простой PLSQL, который работает:

 declare

 cursor c_VYDEJKY is
   select ID, INFO, CUSTOMER_ID
     from VYDEJKY
    where ID = :P54_NEW;
 
    begin
      sys.htp.p('<ul>');
      for a in c_VYDEJKY loop
        sys.htp.p('<li>' || a.ID || ' (' || a.CUSTOMER_ID || ')</li>' );
       end loop;
      sys.htp.p('</ul>');
    end;
 

но когда я пытаюсь присоединиться к другой таблице с предложением LEFT JOIN или WHERE, это не работает:

 declare

 cursor c_VYDEJKY is
   select v.ID, v.INFO, v.CUSTOMER_ID, c.CUSTOMERNAME
     from VYDEJKY v, CUSTOMERS c
    where v.ID = :P54_NEW
    AND v.CUSTOMER_ID > c.ID;

 
begin
  sys.htp.p('<ul>');
  for a in c_VYDEJKY loop
    sys.htp.p('<li> ID VÝDEJKY  :' ||  a.ID ||'</li>' );
    sys.htp.p('<li> POZNÁMKY  :' ||  a.INFO ||'</li>' );
    sys.htp.p('<li> POZNÁMKY  :' ||  c.CUSTOMERNAME ||'</li>' );
   end loop;
  sys.htp.p('</ul>');
end;
 

Я получаю следующую ошибку в c.ИМЯ ПОЛЬЗОВАТЕЛЯ

 ORA-06550: line 15, column 39: PLS-00201: identifier 'C.CUSTOMERNAME' must be declared
 

Может кто-нибудь, пожалуйста, указать, где я совершаю ошибку. Я действительно только начинаю с PLSQL.

Спасибо, Джей-Джей

Ответ №1:

В for цикле префикс для имен столбцов ссылается на переменную строки курсора ( for a in ), а не на псевдоним таблицы, поэтому вам необходимо указать:

 a.CUSTOMERNAME