Kiedy masz BEGIN, END itp., jesteś w PL/SQL, a nie w SQL.
Blok PL/SQL musi być zakończony pojedynczym („do przodu”) ukośnikiem na samym początku wiersza. To mówi Oracle, że skończyłeś z blokiem PL/SQL, więc kompiluje ten blok tekstu.
Zapytanie SQL - zakończone średnikiem:
update orders set status = 'COMPLETE' where order_id = 55255;
Blok PL/SQL - polecenia oddzielone średnikiem, blok jest zakończony ukośnikiem:
create or replace procedure mark_order_complete (completed_order_id in number)
is
begin
update orders set status = 'COMPLETE' where order_id = :completed_order_id;
end mark_order_complete;
/