Oracle Reserved Words, Keywords, and Namespaces

SYSDBA_SYSOPER
Дата: 16.12.2012 00:56:15
Согласно Oracle Reserved Words, Keywords, and Namespaces идентификаторы со "special meaning to Oracle" делятся на 4 вида:
  • Oracle Reserved Words
  • Oracle Keywords
  • PL/SQL Reserved Words
  • Oracle Reserved Namespaces

    В SQL Language Reference можно получить дополнительную информацию по Oracle SQL Reserved Words and Keywords и обратиться к V$RESERVED_WORDS.

    На основании столбца reserved, становится ясно, что reserved = 'Y' => reserved word, otherwise - keyword.
    Но, в любом случае, в Oracle Keywords входит явно больше чем перечислено по первой ссылке.
    Ясно что туда еще попали хинты, недокументированные вещи типа reverse, встроенные функции типа sin и другое.

    Но для некоторых слово все равно сложно придумать случаи, когда оно может по особенному интерпретироваться Ораклом.
    Например, что означает следующее слово:
    SQL> select * from v$reserved_words where keyword = 'EVALUATION';
     
    KEYWORD                            LENGTH RESERVED RES_TYPE RES_ATTR RES_SEMI DUPLICATE
    ------------------------------ ---------- -------- -------- -------- -------- ---------
    EVALUATION                             10 N        N        N        N        N
    
    ?
  • -2-
    Дата: 16.12.2012 01:24:28
    SYSDBA_SYSOPER
    что означает следующее слово:
    SQL> select * from v$reserved_words where keyword = 'EVALUATION';
     
    KEYWORD                            LENGTH RESERVED RES_TYPE RES_ATTR RES_SEMI DUPLICATE
    ------------------------------ ---------- -------- -------- -------- -------- ---------
    EVALUATION                             10 N        N        N        N        N
    
    ?
    http://docs.oracle.com/cd/E11882_01/server.112/e17069/strms_glossary.htm#STRMS1331
    evaluation context

    A database object that defines external data that can be referenced in rule conditions. The external data can exist as variables, table data, or both.
    SYSDBA_SYSOPER
    Дата: 16.12.2012 14:56:50
    -2-,

    Так это же глоссарий, далеко не все слова из которого являются Keywords.
    В доке без проблем можно найти много упоминаний "evaluation", но, я так понимаю, это слово должно быть частью хоть одной синтаксической диаграммы.

    Например, в V$RESERVED_WORDS перед evaluation идет EVALNAME.
    Картинка с другого сайта.
    После идет - EVENTS. Это уже интереснее. В доке для ALTER SESSION оно не указано, но, тем не менее, все знают, что для интерпретатора это слово имеет значение.

    А вот попадание evaluation в V$RESERVED_WORDS не совсем понятно. Хотя оно там не одно такое...
    -2-
    Дата: 16.12.2012 17:51:37
    SYSDBA_SYSOPER
    Так это же глоссарий, далеко не все слова из которого являются Keywords.
    Искать в rule manager & expression filter
    Вячеслав Любомудров
    Дата: 17.12.2012 03:00:44
    select keyword from v$reserved_words where length=1;
    -2-
    Дата: 17.12.2012 06:53:46
    select listagg(keyword) within group (order by dbms_random.value) keyбуквы 
    from v$reserved_words where length=1 and reserved='N'; 
    
    KEYБУКВЫ    
    -------------
    MUDAK;EPT{GH}
    
    SYSDBA_SYSOPER
    Дата: 17.12.2012 23:34:15
    -2-
    SYSDBA_SYSOPER
    Так это же глоссарий, далеко не все слова из которого являются Keywords.
    Искать в rule manager & expression filter
    Есть оператор EVALUATE, а в v$reserved_words внесено EVALUATION (зато EVALUATE отсутствует).
    Судя по всему, это просто недоработка.
    Спасибо.
    dbms_photoshop
    Дата: 18.12.2012 22:58:43
    -2-,

    Тест кейс-то надо воспроизводимый давать.
    SQL> exec dbms_random.seed (130205);
    
    PL/SQL procedure successfully completed.
    
    SQL> select listagg(keyword) within group (order by dbms_random.value) keyletter
      2  from (select keyword from v$reserved_words where reserved = 'N' and length = 1 order by 1);
    
    KEYLETTER
    --------------------------------------------------------------------------------
    MUDAK{HG};TPE
    
    Правда после двух минут подбора мне надоело ждать. :)