RE: PL/SQL Interpreter oddity - bug or "expected"?
Date: Sat, 17 Mar 2018 01:44:21 -0700
Message-ID: <010101d3bdcc$25929da0$70b7d8e0$_at_comcast.net>
From a Oracle SQL Reserved Word prospective you might think so but when you go to the documentation on Reserved Words, “loop” is not listed.
https://docs.oracle.com/database/121/SQLRF/ap_keywd001.htm#SQLRF55621
Also in testing words it appears to error on the listed Reserved Words, but some other words that are also fundamental to SQL such as “merge” do not error either and are not in the key word list.
Matthew Parker
Chief Technologist
Dimensional DBA
Oracle Gold Partner
425-891-7934 (cell)
D&B 047931344
CAGE 7J5S7
Dimensional.dba_at_comcast.net <mailto:Dimensional.dba_at_comcast.net>
<http://www.linkedin.com/pub/matthew-parker/6/51b/944/> View Matthew Parker's profile on LinkedIn
www.dimensionaldba.com <http://www.dimensionaldba.com/>
From: oracle-l-bounce_at_freelists.org <oracle-l-bounce_at_freelists.org> On Behalf Of Stefan Knecht
Sent: Friday, March 16, 2018 10:14 PM
Ran into this recently, and personally I feel that this should not compile. What do you guys think?
Simple case in point:
create or replace package foo as
procedure bar;
end;
/
Package created.
create or replace package body foo as
procedure bar
is
begin
begin
null;
end loop;
end;
end;
/
Package body created.
show errors
No errors.
SQL> exec foo.bar
PL/SQL procedure successfully completed.
What is happening is that Oracle interprets the "end loop" as being "end anonymous_block_name". And in my opinion, with a keyword like "loop" that should not be happening. In essence, the above is interpreted as:
create or replace package body foo as
procedure bar
is
begin
begin
null;
end anon_block_name;
end;
end;
/
To: oracle-l-freelists <oracle-l_at_freelists.org>
Subject: PL/SQL Interpreter oddity - bug or "expected"?
If we switch the "end loop" to an "end if" (which is a similar flow control keyword) it reacts (in my opinion) correctly:
create or replace package body foo as
procedure bar
is
begin
begin
null;
end if;
end;
end;
/
Warning: Package Body created with compilation errors.
SQL> show errors
Errors for PACKAGE BODY FOO:
LINE/COL ERROR
- -----------------------------------------------------------------
7/7 PLS-00103: Encountered the symbol "IF" when expecting one of the
following:
; <an identifier> <a double-quoted delimited-identifier>
The symbol "IF" was ignored.
SQL> Would you agree that that should not compile in the first place?
Stefan
--Received on Sat Mar 17 2018 - 09:44:21 CET
//
zztat - The Next-Gen Oracle Performance Monitoring and Reaction Framework! Visit us at zztat.net <http://zztat.net> | Support our Indiegogo campaign at igg.me/at/zztat <http://igg.me/at/zztat> | _at_zztat_oracle -- http://www.freelists.org/webpage/oracle-l