カテゴリ:

システム関数 (情報)

SYSTEM$REFERENCE

オブジェクト(テーブル、ビュー、または関数)への 参照 を返します。オブジェクトへの参照に対して SQL アクションを実行すると、その参照を作成したユーザーのロールを使用してアクションが実行されます。

注釈

この関数を呼び出す代わりに、変更する予定のないオブジェクトへの参照を作成する必要があり(例: ストアドプロシージャがクエリするテーブルを渡す場合)、その参照を(セッション全体ではなく)呼び出しの範囲内で有効にする場合は、 TABLE キーワードを使用できます。 TABLE キーワードを使用して、テーブル、ビュー、またはクエリへの参照を作成します。 をご参照ください。

こちらもご参照ください。

SYSTEM$QUERY_REFERENCE

構文

SYSTEM$REFERENCE('<object_type>', '<object_identifier>',
  [ , '<reference_scope>' [ , '<privilege>' [ , '<privilege>' ... ] ] ] )
Copy

引数

必須

'object_type'

オブジェクトの型。次の値のいずれかを指定できます。

  • api_integration

  • compute_pool

  • database

  • external_table

  • function

  • materialized_view

  • pipe

  • procedure

  • schema

  • table

  • task

  • view

  • warehouse

'object_identifier'

オブジェクトの識別子。識別子にスペースまたは特殊文字が含まれる場合は、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

識別子の詳細については、 識別子の要件 をご参照ください。

オプション

'reference_scope'

参照のスコープを指定します。

これが 'CALL' であるか省略された場合、参照は作成されたコンテキスト内で有効であることを指定します。 参照のスコープの指定 をご参照ください。

'SESSION' の場合は、参照をセッション期間中有効にすることを指定します。

'PERSISTENT' の場合は、オブジェクトがドロップされるまで参照が有効であることを指定します。 永続的な参照 をご参照ください。

注: 'privilege' 引数を指定する必要がある場合は、 'reference_scope' 引数が必要です。

有効な値:

  • 'CALL'

  • 'SESSION'

  • 'PERSISTENT'

デフォルト値: 'CALL'

'privilege'

オブジェクトに対して SQL アクションを実行するために必要な追加の 権限

たとえば、テーブルに行を挿入するストアドプロシージャにテーブルの参照を渡すとします。ストアドプロシージャにそのテーブルに対する INSERT 権限を付与するには、 'INSERT' を指定します。

サポートされるオブジェクトと権限のリストについては、 参照のサポートされるオブジェクト型と権限 をご参照ください。

複数の追加の権限を指定するには、各権限名を追加の引数として関数に渡します。たとえば、 INSERT、 UPDATE、 および TRUNCATE の権限を付与する場合は以下のようにします。

CALL myprocedure( SYSTEM$REFERENCE('TABLE', 'table_with_different_owner', 'SESSION', 'INSERT'. 'UPDATE', 'TRUNCATE'));
Copy

権限として OWNERSHIP や ALL は指定できないことに注意してください。

戻り値

識別子として使用できる、参照をシリアル化した文字列表現。

使用上の注意

'object_type' 引数は、 object_identifier で指定されたオブジェクトの型と一致しなければなりません。

トラブルシューティング

次のシナリオは、発生する可能性のある問題のトラブルシューティングに役立ちます。

エラー

505028 (42601): Object type <object_type> does not match the specified type <type_of_the_specified_object> for reference creation

原因

SYSTEM$REFERENCE 関数を使用して参照を作成しようとし、 object_type 引数が object_identifier で指定されたオブジェクトの型と一致しない場合、この関数は失敗します。たとえば、 object_type 引数が TABLE であるにもかかわらず、 object_identifier が TABLE 以外のオブジェクト型(例: VIEW)に解決される場合、この関数は失敗します。

解決策

object_identifier で指定されたオブジェクトの型が object_type 引数と一致することを確認します。サポートされるオブジェクトの型のリストは、 参照のサポートされるオブジェクト型と権限 をご参照ください。

背景: テーブル、ビュー、クエリをストアドプロシージャに渡す際の問題 をご参照ください。