Можно закрыть BEGIN - END LOOPом?

lexxora
Дата: 18.03.2011 16:36:07
Скомпилируется ли этот код?
BEGIN
BEGIN
NULL;
END LOOP;
END;
tru55
Дата: 18.03.2011 16:38:58
и что должен означать сей код?
comphead
Дата: 18.03.2011 16:42:01
lexxora,

можно даже
end rollback
луп
Дата: 18.03.2011 16:43:42
lexxora
Скомпилируется ли этот код?
BEGIN
BEGIN
NULL;
END LOOP;
END;


Да. Потому что "LOOP" будет восприниматься как комментарий к вложенному анонимному блоку.
AlexFF__|
Дата: 18.03.2011 16:48:39
comphead
lexxora,

можно даже
end rollback

rollback - для ламеров.
Продвинутые разрабы применяют end commit
orawish
Дата: 18.03.2011 19:07:33
lexxora,

да. баян известный.
и сам end loop - с прицепом. и в триггере за end-ом пиши что хочешь, ..
(кроме, разве что только if)
begin
  for i in 1..1 loop
    null;
  end loop commit;
end loop;
orawish
Дата: 18.03.2011 19:09:33
orawish
lexxora,

да. баян известный.
и сам end loop - с прицепом. и в триггере за end-ом пиши что хочешь, ..
(кроме, разве что только if и case)
SY
Дата: 18.03.2011 22:55:08
orawish
да. баян известный.


END can be followed by a label. LOOP is keyword, not a reserved word. So where do you see баян? Now try using reserved word as label:

SQL> BEGIN
  2  BEGIN
  3  NULL;
  4  END SELECT;
  5  END;
  6  /
END SELECT;
    *
ERROR at line 4:
ORA-06550: line 4, column 5:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
; <an identifier> <a double-quoted delimited-identifier>
The symbol "SELECT" was ignored.


SQL> BEGIN
  2  BEGIN
  3  NULL;
  4  END IF;
  5  END;
  6  /
END IF;
    *
ERROR at line 4:
ORA-06550: line 4, column 5:
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> 

SY.
orawish
Дата: 19.03.2011 01:28:38
SY
orawish
да. баян известный.


END can be followed by a label. LOOP is keyword, not a reserved word. So where do you see баян? Now try using reserved word as label:

..
SY.


а вот и попробую :)
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set serveroutput on
SQL> begin
  2    for x in ( select * from v$reserved_words
  3    where reserved ='Y' order by keyword
  4    ) loop
  5      begin
  6        execute immediate 'begin null; end '||x.keyword||';';
  7        dbms_output.put_line( x.keyword );
  8      exception when others then
  9        null;
 10      end;
 11    end loop;
 12  end;
 13  /
CHAR
DATE
DECIMAL
FLOAT
INTEGER
LONG
NUMBER
PCTFREE
RAW
RENAME
SET
SMALLINT
SYNONYM
TRIGGER
VARCHAR
VARCHAR2

PL/SQL procedure successfully completed.

зы. а баян я употребил лишь в смысле - известная (обсуждавшаяся на форуме) тема
SY
Дата: 19.03.2011 21:20:54
orawish
а вот и попробую :)


And now check list you got aginst PL/SQL list of reserved words Table D-1 PL/SQL Reserved Words and the only one match will be DECIMAL, which I think is just a documentation bug:

SQL> declare
  2      decimal varchar2(10);
  3  begin
  4      decimal := 'orawish';
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> declare
  2      varchar2 decimal;
  3  begin
  4      varchar2 := 99;
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> declare
  2      varchar2 number;
  3  begin
  4      varchar2 := 99;
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL>  

SY.