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