Funktion SYSTEM$REFERENCE: Erstellen einer Referenz mit nicht übereinstimmenden Objekttypen schlägt fehl

Achtung

Diese Verhaltensänderung ist in Bundle 2023_08 enthalten.

Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.

Sie können eine Referenz auf ein Objekt mit der Funktion SYSTEM$REFERENCE erstellen. Eine Referenz autorisiert den Zugriff auf ein Objekt für gespeicherte Prozeduren, Klasseninstanzen oder Anwendungen, die sonst nicht auf das Objekt zugreifen könnten. Die Referenz wird in Form eines Bezeichners an die gespeicherte Prozedur mit Eigentümerrechten, die Klasseninstanz oder die Anwendung mit definierten und begrenzten Berechtigungen für ein Objekt übergeben.

Das Argument object_type der Funktion SYSTEM$REFERENCE muss mit dem Typ des Objekts übereinstimmen, das die Referenz identifiziert. Im folgenden Beispiel ist t1 eine Tabelle, die dem Objekttyp TABLE entspricht:

SELECT SYSTEM$REFERENCE('TABLE', 't1', 'SESSION', 'SELECT');
Copy

Die Funktion SYSTEM$REFERENCE verhält sich wie folgt:

Vor der Änderung

Wenn Sie mit der Funktion SYSTEM$REFERENCE eine Referenz erstellen, wobei das Argument object_type den Wert TABLE hat, und der Objektname zu einem beliebigen tabellenähnlichen Objekttyp aufgelöst wird (d. h. TABLE, VIEW, EXTERNAL TABLE oder MATERIALIZED VIEW), ist die Funktion erfolgreich.

Nach der Änderung

Wenn Sie versuchen, mit der Funktion SYSTEM$REFERENCE eine Referenz zu erstellen, wobei das Argument object_type den Wert TABLE hat, aber der Objektname zu einem tabellenartigen Objekttyp aufgelöst wird, der nicht TABLE ist (d. h. VIEW, EXTERNAL TABLE oder MATERIALIZED VIEW), wird die Funktion fehlschlagen.

Wenn Sie zum Beispiel den Objekttyp TABLE für die Ansicht v1 mit der folgenden Anweisung verwenden:

SELECT SYSTEM$REFERENCE('TABLE', 'v1', 'SESSION', 'SELECT');
Copy

Die Anweisung führt zu folgendem Fehler:

505028 (42601): Object type VIEW does not match the specified type TABLE for reference creation

Ref.: 1315