#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