データ型定義

SQL文内のOracle NoSQL Databaseデータ・モデル型は、type_definition構文を使用して参照されます。この構文は、データ定義言語(DDL)文とデータ操作言語(DML)文の両方で使用されます。

構文

type_definition ::= 
   INTEGER | 
   LONG | 
   FLOAT | 
   DOUBLE | 
   NUMBER | 
   STRING | 
   BOOLEAN | 
   ANY | 
   JSON | 
   ANYRECORD | 
   ANYATOMIC | 
   ANYJSONATOMIC |
   array_definition | 
   map_definition | 
   binary_definition | 
   timestamp_definition | 
   enum_definition | 
   record_definition 

array_definition ::= ARRAY "(" type_definition ")"
map_definition ::= MAP "(" type_definition ")"
binary_definition ::= BINARY ["(" INT_CONSTANT ")"]
timestamp_definition ::= TIMESTAMP ["(" INT_CONSTANT ")"]

enum_definition ::= ENUM "(" id_list ")"
id_list ::= id ["," id]

record_definition ::= RECORD "(" field_definition ("," field_definition)* ")"
field_definition ::= id type_definition [default_definition] [comment]
default_definition ::= 
   (default_value [NOT NULL]) | (NOT NULL [default_value])
default_value ::= DEFAULT (number | string | TRUE | FALSE | id)

セマンティクス

type_definition

DDL文でtype_def構文規則が使用される場合、使用できるワイルドカードのタイプはJSON型のみです。そのため、たとえば、JSON型の列を持つ表は作成できますが、ANY型の列を持つ表は作成できません。

timestamp_definition

TIMESTAMP型を指定する場合、精度はオプションです。省略した場合、デフォルトの精度は9 (ナノ秒)です。これは、TIMESTAMP型(精度が指定されていない)が、他のすべてのTIMESTAMP型(指された精度がある)のスーパータイプであることを意味します。ただし、CREATE TABLE文のコンテキストでは、精度を明示的に指定する必要があります。この制限は、実際には高い精度が必要とされない場合に、ユーザーが(より多くの領域を必要とする)精度9でTIMESTAMP値を誤って作成するのを防ぐためです。

record_definition

フィールドのデフォルト値と説明は、RECORD型の値には影響しません。つまり、前述の構文に従って作成され、デフォルト値またはフィールドの説明(あるいはその両方)のみが異なる2つのRECORD型には同じ値があります(これらは基本的には同じ型です)。

field_definition

field_definitionルールは、RECORD型のフィールドを定義します。フィールド名、フィールドのタイプおよびオプションでデフォルト値とコメントを指定します。コメントが存在する場合は、フィールドの説明として永続的に保存されます。

default_definition

デフォルトでは、すべてのRECORDフィールドはNULL値可能です。default_definitionルールを使用すると、NULL値不可のフィールドを宣言したり、フィールドのデフォルト値を指定できます。レコードが作成され、フィールドに値が割り当てられていない場合、そのフィールドに対してデフォルト値が宣言されていれば、Oracle NoSQL Databaseによってデフォルト値が割り当てられます。そうでない場合、フィールドはNULL値可能である必要があり、その場合、NULL値が割り当てられます。現在、デフォルト値は、数値型、STRING、BOOLEANおよびENUMでのみサポートされます。