sql >> Database >  >> RDS >> Oracle

PLS-00201-fout krijgen tijdens het maken van een type in orakel

De %TYPE syntaxis is voor gebruik in PL/SQL-declaraties. Helaas kunnen we het niet gebruiken bij het maken van SQL-objecten. Hetzelfde geldt voor %rowtype .

Het zou heel netjes zijn als we dat konden, omdat een algemeen gebruik van create or replace type zou zijn om tabel-API's te bouwen zoals u dat wilt. Het zou echter te ingewikkeld zijn om referentieconstructies in de datadictionary te beheren; onthoud dat Types kunnen worden gebruikt om andere objecten te definiëren, inclusief Tabelkolommen.

Dus helaas, je moet het Type declareren met expliciete datatypes voor zijn attributen:

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
);

Uiteraard moet je het ook handmatig synchroniseren wanneer de structuur van een T_C_EVO_GAME_CONFIG_CHANGE_LOG-kolom verandert. Maar u zou dit toch moeten doen als u een kolom heeft toegevoegd of verwijderd.

Als alternatief kunt u het type definiëren als een PL/SQL-record in een pakket. Dat zou je in staat stellen om de verwijzingssyntaxis te gebruiken.

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;

Het hangt ervan af hoe u het Type in uw bredere toepassing wilt gebruiken.




  1. PDO::ERRMODE_EXCEPTION onderdrukt waarschuwing niet

  2. Hoe vind je unieke paren uit twee kolommen in SQL?

  3. 2 manieren om rijen te retourneren die alleen niet-alfanumerieke tekens bevatten in MariaDB

  4. Bulk upsert met SQLAlchemy