Re: PL/SQL Interpreter oddity - bug or "expected"?

From: Stefan Knecht <knecht.stefan_at_gmail.com>
Date: Sat, 17 Mar 2018 17:29:27 +0700
Message-ID: <CAP50yQ_y6KRxGNUvGTKJFuGDWYPduN+47H8ghQ6YbywEsVQLag_at_mail.gmail.com>



Yeah I don't think it's about reserved words per se - "IF" isn't a reserved word either, but is correctly handled (correct IMHO).

On Sat, Mar 17, 2018 at 3:44 PM, Matthew Parker <dimensional.dba_at_comcast.net
> wrote:

> 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 <Dimensional.dba_at_comcast.net>*
>
> *View Matthew Parker's profile on LinkedIn*
> <http://www.linkedin.com/pub/matthew-parker/6/51b/944/>
>
> 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
> *To:* oracle-l-freelists <oracle-l_at_freelists.org>
> *Subject:* PL/SQL Interpreter oddity - bug or "expected"?
>
>
>
> 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;
>
> /
>
>
>
>
>
> 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
>
>
>
>
>
>
>
>
>
>
>
> --
>
> //
>
> zztat - The Next-Gen Oracle Performance Monitoring and Reaction Framework!
>
> Visit us at zztat.net | Support our Indiegogo campaign at igg.me/at/zztat
> | _at_zztat_oracle
>

-- 
//
zztat - The Next-Gen Oracle Performance Monitoring and Reaction Framework!
Visit us at zztat.net | Support our Indiegogo campaign at igg.me/at/zztat |
_at_zztat_oracle

--
http://www.freelists.org/webpage/oracle-l
Received on Sat Mar 17 2018 - 11:29:27 CET

Original text of this message