SQLステートメントでオブジェクトを参照する場合、OceanBaseデータベースはSQLステートメントのコンテキストを考慮し、名前空間内でそのオブジェクトを見つけて、指定された操作を実行します。名前空間内で命名されたオブジェクトが見つからない場合、エラーが返されます。
ユーザーのSchemaオブジェクトの参照
このドキュメントでは、具体的な例を通じて、OceanBaseデータベースがSQLステートメント内のオブジェクト参照をどのように解析するかを説明します。
以下のSQLステートメントを実行して、departments という名前のテーブルに1行のデータを追加します:
INSERT INTO departments
VALUES (280, 'ENTERTAINMENT_CLERK', 206, 1700);
SQLステートメントのコンテキストに基づき、departments はデータベース内で以下のいずれかの状況にある可能性があります:
ご自身のSchema内のテーブル
ご自身のSchema内のビュー
テーブルまたはビューのプライベートシノニム
パブリックシノニム
OceanBaseデータベースは、まずご自身のSchemaの名前空間内で参照されたオブジェクトを解析しようと試み、その後、そのSchema外の名前空間を検索します。この例では、OceanBaseデータベースの解析プロセスは以下のとおりです:
OceanBaseデータベースはまず、ご自身のSchemaの名前空間内でオブジェクトを特定しようと試みます。オブジェクトがプライベートシノニムの場合、OceanBaseデータベースはそのシノニムが表すオブジェクトを見つけます。そのオブジェクトはご自身のSchema内にある場合も、他のSchemaや別のデータベースにある場合もあります。また、そのオブジェクトが他のシノニムである可能性もあります。その場合、OceanBaseデータベースはそのシノニムが表すオブジェクトを見つけます。
オブジェクトが名前空間内で見つかった場合、OceanBaseデータベースはそのオブジェクトに対してSQLステートメントを実行しようと試みます。この例では、OceanBaseデータベースは
departmentsに1行のデータを追加しようと試みます。このオブジェクトの型がSQLステートメントで必要とされる型でない場合、OceanBaseデータベースはエラーを返します。この例では、departmentsはテーブル、ビュー、またはテーブルまたはビューに解決できるプライベートシノニムでなければなりません。departmentsがシーケンスの場合、OceanBaseデータベースはエラーを返します。これまでにそのオブジェクトがどの名前空間でも検索されなかった場合、OceanBaseデータベースはパブリックシノニムを含む名前空間を検索します。オブジェクトがパブリックシノニムを含む名前空間に存在する場合、OceanBaseデータベースはそのオブジェクトに対してSQLステートメントを実行しようと試みます。このオブジェクトの型がSQLステートメントで必要とされる型でない場合、OceanBaseデータベースはエラーを返します。この例では、
departmentsがシーケンスを表すパブリックシノニムである場合、OceanBaseデータベースはエラーを返します。
パブリックシノニムが依存テーブルやユーザー定義型を含む場合、そのシノニムと同名のオブジェクトを、依存オブジェクトと同じSchema内に作成することはできません。
逆に、シノニムが依存テーブルやユーザー定義型を含まない場合、依存オブジェクトと同じSchema内に同名のオブジェクトを作成できます。OceanBaseデータベースはすべての依存オブジェクトを無効にし、次回アクセス時に再検証を行います。
他のSchemaのオブジェクトの参照
参照するオブジェクトが他のSchemaに属する場合、オブジェクト名の前に対応するSchema名を付加する必要があります。構文は以下のとおりです:
schema.object
以下の例は、hr という名前のSchemaから employees テーブルを削除する様子を示しています:
DROP TABLE hr.employees;