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.