Kategorien:

Systemfunktionen (Informationen)

SYSTEM$REFERENCE

Gibt eine Referenz auf ein Objekt (Tabelle, Ansicht oder Funktion) zurück. Wenn Sie SQL-Aktionen auf einer Objektreferenz ausführen, werden die Aktionen mit der Rolle des Benutzers ausgeführt, der die Referenz erstellt hat.

Bemerkung

Alternativ zum Aufrufen dieser Funktion können Sie das Schlüsselwort TABLE verwenden, wenn Sie einen Verweis auf ein Objekt erstellen müssen, das Sie nicht ändern möchten (z. B. wenn Sie eine Tabelle übergeben, die von der gespeicherten Prozedur abgefragt werden soll), und wenn Sie möchten, dass dieser Verweis nur für den Geltungsbereich des Aufrufs (und nicht für die gesamte Sitzung) gültig ist. Siehe Verwenden des Schlüsselworts TABLE, um einen Verweis auf eine Tabelle, Ansicht oder Abfrage zu erstellen.

Siehe auch:

SYSTEM$QUERY_REFERENCE

Syntax

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

Argumente

Erforderlich

'object_type'

Typ des Objekts. Sie können einen der folgenden Werte angeben:

  • api_integration

  • compute_pool

  • database

  • external_table

  • function

  • materialized_view

  • pipe

  • procedure

  • schema

  • table

  • task

  • view

  • warehouse

'object_identifier'

Bezeichner für das Objekt. Wenn der Bezeichner Leerzeichen oder Sonderzeichen enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen gesetzt werden. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Informationen zu Bezeichnern finden Sie unter Anforderungen an Bezeichner.

Optional

'reference_scope'

Gibt den Geltungsbereich der Referenz an.

Bei 'CALL' oder bei Weggelassen wird angegeben, dass die Referenz in dem Kontext gültig, in dem sie erstellt wurde. Siehe Angeben des Geltungsbereichs der Referenz.

'SESSION' gibt an, dass die Referenz für die Dauer der Sitzung gültig sein soll.

Bei 'PERSISTENT' wird angegeben, dass der Verweis gültig sein soll, bis das Objekt gelöscht wird. Siehe persistente Referenzen.

Hinweis: Wenn Sie das 'privilege'-Argument angeben müssen, ist auch das 'reference_scope'-Argument erforderlich.

Gültige Werte:

  • 'CALL'

  • 'SESSION'

  • 'PERSISTENT'

Standardwert: 'CALL'

'privilege'

Zusätzliche Berechtigung die erforderlich ist, um eine SQL-Aktion auf dem Objekt auszuführen.

Angenommen, Sie übergeben den Verweis auf eine Tabelle an eine gespeicherte Prozedur, mit der Zeilen in diese Tabelle eingefügt werden. Geben Sie 'INSERT' an, um der gespeicherten Prozedur die Berechtigung INSERT für diese Tabelle zu erteilen.

Eine Liste der unterstützten Objekte und Berechtigungen finden Sie unter Unterstützte Objekttypen und Berechtigungen für Referenzen.

Wenn Sie mehr als eine zusätzliche Berechtigung angeben möchten, übergeben Sie jeden Berechtigungsnamen als zusätzliches Argument an die Funktion. So erteilen Sie beispielsweise die Berechtigungen INSERT, UPDATE und TRUNCATE:

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

Beachten Sie, dass Sie OWNERSHIP oder ALL nicht als Berechtigungen angeben können.

Rückgabewerte

Eine serialisierte Zeichenfolgendarstellung der Referenz, die als Bezeichner verwendet werden kann.

Nutzungshinweise

Das Argument 'object_type' muss mit Typ des Objekts übereinstimmen, das durch object_identifier angegebenen wurde.

Problembehandlung

Die folgenden Szenarios können Ihnen helfen, möglicherweise auftretende Probleme zu beheben.

Fehler

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

Ursache

Wenn Sie versuchen, einen Verweis mit der Funktion SYSTEM$REFERENCE zu erstellen, und das object_type-Argument nicht mit dem Typ des Objekts übereinstimmt, das durch object_identifier angegeben wird, schlägt die Funktion fehl. Wenn beispielsweise das Argument object_type den Wert TABLE ist, aber object_identifier einen anderen Objekttyp als TABLE ergibt (z. B. VIEW), schlägt die Funktion fehl.

Lösung

Überprüfen Sie, ob der Typ des durch object_identifier angegebenen Objekts mit dem Argument object_type übereinstimmt. Eine Liste der unterstützten Objekttypen finden Sie unter Unterstützte Objekttypen und Berechtigungen für Referenzen.

Beispiele

Siehe Hintergrund: Das Problem bei der Übergabe von Tabellen, Ansichten und Abfragen an gespeicherte Prozeduren.