Это проблема, при которой форматирование вашего кода сделает проблему очевидной. Если вы всегда начинаете новую строку и отступ после for xxx in (
, а также ставите закрывающую скобку на своей строке и добавляете несколько пробелов между командами, вы получите это, что явно неверно:
begin
dbms_output.put_line('Customer_Id ' || 'Customer_Name '|| 'Customer_Phone');
for cur_d in (
select o.c_id, total as sum(o.quantity)
from orders o
group by o.c_id
)
loop
from customers c
where c.id = cur_d.c_id
and cur_d.total > 200;
dbms_output.put_line(c.id || c.name || c.contact_no);
end loop;
end;
Первое утверждение внутри l oop, кажется, что-то упустило, как упоминал Экочергин.
total as sum(o.quantity)
в обратном порядке, как упомянул Туро.
Если вы хотите id
, name
и contact_no
для печати в столбцах, вы должны посмотреть lpad
и rpad
для их форматирования. Просто объединяя их вместе, вы получите что-то нечитаемое.
dbms_output
внутри l oop относится к c.id
, c.name
и c.contact_no
, но запись называется cur_d
, а не c
.
Также cur_d
- слегка запутанное название записи (это не курсор). Я всегда использую r
для записей курсора, если нет каких-либо других r
, которые могут быть перепутаны с.