When you have BEGIN, END, etc you are in PL/SQL, not SQL.
A PL/SQL block needs to be terminated with a single ("forward") slash at the very beginning of the line. This tells Oracle that you are done with your PL/SQL block, so it compiles that block of text.
SQL query - terminated by semicolon:
update orders set status = 'COMPLETE' where order_id = 55255;
PL/SQL block - commands separated by semicolon, block is terminated by forward-slash:
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;
/
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…