0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle 21c SQL言語リファレンス のバッカス正規形構文のバグ(見つける都度追記)

Last updated at Posted at 2022-07-03

Oracle公式のSQL言語リファレンスは、丸や四角を線で結んだ図形構文図は殆どの場合正しいが、Oralcle版BNF(バッカス正規形構文)は不具合が多い。
てっきりバッカス正規形構文から自動的に図形構文図を作っているのかと思ったが、品質の差が大きいので違うらしい。
MicrosoftのSQL Serverのリファレンスにも不具合は有るが、英語版のリファレンスのGitに不具合を報告すればすぐに直してくれる。日本語版のリファレンスの不具合は、報告しても反応は無いが、いずれ英語版の記載の修正が日本語版にも降ってくるはず。多分。
しかしOracleは、そもそもどこに報告すれば良いのかわからない。品質はぼろぼろで自分たちではどうにもしないのに。

以下は、SQL言語リファレンスのバッカス正規形構文に見つけたのバグ一覧。
バッカス正規形構文はSQL言語リファレンスのバッカス正規形構文のページに則っている。

バッカス正規形構文が下書きのまま公開されている

かっこの誤用

かっこの誤用1 中かっこを使うべきところを、かっこを使っている

Description of add_delete_secret_seps
image.png
上記の(ADD | UPDATE)はADD UPDATEの何れか片方が選ばれる事を表す。
バッカス正規形構文では'('と')'に文法上の意味は無いため、'(' ')'という文字を表すことになる。
正しくはかっこ内の項目のうち、1つが必須であることを表す中かっこ'{' '}'がかっこの代わりに使われるべき。

下記のページで確認している。

かっこの誤用2 偶然)...となって安心し中かっこ/大かっこが抜けている

Description of the illustration alter_java.eps
image.png

4行目の下記は、かっこで囲まれたmatch_stringを複数指定できる事を表している。

( match_string [, ] { schema_name | - } )...

しかしこの記載では繰り返されるのは閉じかっこ記号のみ。
正しくは、中かっこで囲みこう書くべき。

{ ( match_string [, ] { schema_name | - } ) }...

下記のページで確認している。

かっこの誤用3 混同している上カンマが抜けている

Description of the illustration attr_dim_using_clause.eps
image.png

  • source_clause を、,区切りで複数繰り返せる事を示す意図。繰り返しの指定に中かっこの代わりに誤ってかっこを使っている。加えて、区切り文字の,の記載が無い。

下記で確認している。

かっこの誤用4 かっこをエスケープして使っている

Description of the illustration drop_constraint_clause.eps
かっこを中かっこと混同して文法上の意味が有ると誤解し、文字の中かっこを表現するためにエスケープしている。
image.png

下記で確認している。

かっこの誤用5 不要なかっこ

Description of JSON_value_on_mismatch_clause
image.png
最後から2行目のMISSING DATA、EXTRA DATA、TYPE ERRORはかっこで囲う必要は無い。また、囲ってはいけない。

下記で確認している。

かっこの誤用6 中括弧が抜けている

Description of JSON_value_on_mismatch_clause
image.png
最後から2行目は、中括弧が抜けている。
こうなるべき。

[ ( { MISSING DATA | EXTRA DATA | TYPE ERROR } ) ]

下記で確認している。

かっこの誤用7 開き/閉じかっこそれぞれを[ ]で囲っている

Description of the illustration key_clause.eps

image.png

  • 開きかっこ、閉じかっこそれぞれを[ ] で囲ってしまっているため、開きかっこだけ有り閉じかっこは無いといった不整合を許してしまう。

下記で確認している。

かっこの誤用8 大かっこを使うべきところを、中括弧を使っている

image.png

  • 4行目の中括弧は大かっこが正しい。

下記で確認している。

かっこの誤用9 大かっこが抜けている

Description of inline_external_table_properties
image.png

下記で確認している。

その他のSQL言語リファレンスの記載ルール違反

キーワード以外も強調されてしまっている

Description of the illustration enable_disable_volume.eps
下記で縦線が強調されているように、キーワードではない部分も強調されてしまっている。

下記で確認している。

キーワードの強調漏れ

Description of the illustration enable_disable_volume.eps

  • キーワードの強調漏れ
    VOLUMEが強調されていない。
    image.png

下記で確認している。

繰り返しの中でカンマが抜けている

Description of the illustration alter_datafile_clause.eps

image.png

  • 3行目のfilenumberの前の,が抜けている

下記で確認している。

誤ったエスケープ

ドットを誤ってエスケープしている

Description of JSON_relative_object_access
image.png

下記を確認している。

カンマを誤ってエスケープしている

Description of nested_clause

image.png

下記で確認。

アスタリスクを誤ってエスケープしている

Description of wildcard

image.png

確認できているのはこのページのみ。

等号を誤ってエスケープしている

Description of the illustration create_analytic_view

下記で確認している。

セミコロンを誤ってエスケープしている

Description of drop_pmem_filestore
image.png

コロンを誤ってエスケープしている

[Description of regular_entry

](https://docs.oracle.com/cd/F39414_01/sqlrf/img_text/regular_entry.html)
image.png

下記で確認。

シングルクォートを誤ってエスケープしている

Description of the illustration pdb_settings_clauses.eps
image.png

下記で確認

かっこを誤ってエスケープしている

下記で確認

Oracleの文法に適していない

中括弧を開くor閉じる位置が間違っている

Description of the illustration advanced_index_compression.eps

{ COMPRESS ADVANCED [ LOW | HIGH ] } | NOCOMPRESS

  • 中かっこを閉じる位置が間違っている。
    COMPRESS ADVANCED・・・もしくは NOCOMPRESS のどちらか片方が必須。なので閉じる位置はNOCOMPRESSの前ではなく下記のように後で閉じるのが正しい。

{ COMPRESS ADVANCED [ LOW | HIGH ] | NOCOMPRESS}

下記で確認。

繰り返しの表記が抜けている

下記で確認。

Description of the illustration add_disk_clause.eps

ADD
{ SITE sitename [ QUORUM | REGULAR ] [ FAILGROUP failgroup_name ]
DISK qualified_disk_clause [, qualified_disk_clause ]...
}...

SITE sitenameの指定は、その他の指定と独立して任意なので中かっこはおかしい。
ただし最後の繰り返しを受けるために中かっこは必要。

ADD
{ [ SITE sitename ] [ QUORUM | REGULAR ] [ FAILGROUP failgroup_name ]
DISK qualified_disk_clause [, qualified_disk_clause ]...
}...

かっこ/中括弧/大かっこが余計

Description of the illustration alter_index

ALTER INDEX [ schema. ] index_name [ index_ilm_clause ]
{ { deallocate_unused_clause
| allocate_extent_clause
| shrink_clause
| parallel_clause
| physical_attributes_clause
| logging_clause
| partial_index_clause
} ...
| rebuild_clause
| PARAMETERS ( 'ODCI_parameters' )
)
| COMPILE
| { ENABLE | DISABLE }
| UNUSABLE [ ONLINE ] [ { DEFERRED | IMMEDIATE } INVALIDATION ]
| VISIBLE | INVISIBLE
| RENAME TO new_name
| COALESCE [ CLEANUP ] [ ONLY ] [ parallel_clause ]
| { MONITORING | NOMONITORING } USAGE
| UPDATE BLOCK REFERENCES
| alter_index_partitioning
}
;

  • 12行目の")" が余計。

下記を確認。

Description of the illustration alter_datafile_clause.eps

image.png

  • 3行目のfilenumberの前の,が抜けている
  • 4行目の閉じ中括弧が不要

Description of alter_pmem_filestore

ALTER PMEM FILESTORE filestore_name
(
[ RESIZE size_clause ] | autoextend_clause
| ( MOUNT [ { MOUNTPOINT file_path | BACKINGFILE file_name } ] [ FORCE ] )
| DISMOUNT
)

  • 2行目と最終行のかっこは中かっこの誤り
    [ RESIZE size_clause ]略と、MOUNT略と、DISMOUNT略の何れか一つが選ばれるべき。
    かっこはただのかっこという文字でしかなく、かっこ内の項目のうち、1つが必須であることを表す中かっこが正しい。
  • MOUNTの前と [FORCE] の後のかっこは不要
    この記載だとMOUNTから[FORCE]までをかっこが囲んでいるとなっているが、そうではない。
    よってMOUNTの前と [FORCE] の後のかっこは不要。

Description of the illustration alter_system_set_clause.eps

{ set_parameter_clause
| USE_STORED_OUTLINES = (TRUE | FALSE | category_name)
| GLOBAL_TOPIC_ENABLED = (TRUE | FALSE)
}

Description of the illustration pdb_close

image.png

  • 先頭と末尾の中かっこが不要

  • [IMMEADIAGE]・・・と[ABORT]・・・のどちらかを選ばせるために下記のように中かっこが必要

    CLOSE { [ IMMEDIATE ] [ instances_clause | relocate_clause ]
          | [ ABORT ] [ instances_clause ] }

Description of application_clauses

image.png

  • 最後から2行目の/が不要

[Description of add_external_partition_attrs

](https://docs.oracle.com/cd/F39414_01/sqlrf/img_text/add_external_partition_attrs.html)
image.png

  • 最後のpreが不要

Description of the illustration partitioning_storage_clause.eps

json_storage_clauseの記載が抜けている

図形構文図も間違っている

Description of result_cache_clause

image.png
image.png

  • バッカス正規形構文の1行目でかっこがエスケープされている
    かっこはバッカス正規形構文ではただの文字なのでエスケープ不要。
  • 2行目と4行目の開きかっこと閉じかっこが不要
  • 図形構文図の開きかっこと閉じかっこが対応していないので、図形構文図は間違っている。
  • どちらか片方を選ばせる中かっこのつもりでかっこを誤用している
  • バッカス正規形構文と図形構文図の両方で、MODE {DEFAULT|FORCE}と , STANDBY {ENABLE|DISABLE}がそれぞれ任意になっている。これだと前者を指定せず後者だけ指定可能で、その場合に,から始まる構文となってしまう。
  • 同様に、STANDBY {ENABLE|DISABLE}と, MODE {DEFAULT|FORCR}もそれぞれ任意になってしまっている。

正解は例えばこうではないだろうか。

RESULT_CACHE ( {
[ MODE {DEFAULT | FORCE} [ , STANDBY {ENABLE | DISABLE} ] ]
|
[ STANDBY {ENABLE | DISABLE} [ , MODE {DEFAULT | FORCE} ] ]
} )

バッカス正規形構文と図形構文図で書いていることが違う

バッカス正規形構文のフォーマットのミス

バッカス正規形構文の冒頭に構文名が入っている

Description of JSON_value_on_mismatch_clause
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?