Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Beim Erstellen eines Typs in Oracle wird der Fehler PLS-00201 angezeigt

Der %TYPE Syntax ist für die Verwendung in PL/SQL-Deklarationen vorgesehen. Leider können wir es beim Erstellen von SQL-Objekten nicht verwenden. Dasselbe gilt für %rowtype .

Es wäre sehr nett, wenn wir könnten, denn eine häufige Verwendung von create or replace type wäre es, Tabellen-APIs so zu erstellen, wie Sie es möchten. Allerdings wäre es zu kompliziert, Referenzierungskonstrukte im Data Dictionary zu verwalten; Denken Sie daran, dass Typen verwendet werden können, um andere Objekte einschließlich Tabellenspalten zu definieren.

Leider müssen Sie den Typ mit expliziten Datentypen für seine Attribute deklarieren:

create or replace type TYPE_EVOL_CONFIG_CHANGE_LOG as object
    (
    F_TABLE_MODIFIED        VARCHAR2(40) ,
    F_OPERATION_PERFORMED   VARCHAR2(30),
    F_ROWS_ALTERED          INTEGER , 
    F_LAST_UPDATED_BY       VARCHAR2(20) ,
    F_LAST_UPDATED_DATE     DATE
);

Natürlich müssen Sie es auch manuell synchronisieren, wenn sich die Struktur einer T_C_EVO_GAME_CONFIG_CHANGE_LOG-Spalte ändert. Aber Sie müssten dies trotzdem tun, wenn Sie eine Spalte hinzugefügt oder gelöscht haben.

Alternativ können Sie den Typ als PL/SQL-Datensatz in einem Paket definieren. Das würde Ihnen erlauben, die Verweisungssyntax zu verwenden.

create or replace package game_config as    

    TYPE_EVOL_CONFIG_CHANGE_LOG is record
    (
        F_TABLE_MODIFIED        T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_TABLE_MODIFIED%TYPE ,
        F_OPERATION_PERFORMED   T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_OPERATION_PERFORMED%TYPE,
        F_ROWS_ALTERED          T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_ROWS_ALTERED%TYPE , 
        F_LAST_UPDATED_BY       T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_LAST_UPDATED_BY%TYPE ,
        F_LAST_UPDATED_DATE     T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_LAST_UPDATED_DATE%TYPE
    );

    -- or even
    TYPE TAB_EVOL_CONFIG_CHANGE_LOG is table of T_C_EVO_GAME_CONFIG_CHANGE_LOG%rowtype;
end;

Es hängt davon ab, wie Sie den Typ in Ihrer breiteren Anwendung verwenden möchten.