El %TYPE
la sintaxis es para uso en declaraciones PL/SQL. Desafortunadamente, no podemos usarlo al crear objetos SQL. Lo mismo ocurre con %rowtype
.
Sería muy bueno si pudiéramos, porque un uso común de create or replace type
sería construir API de tabla como quieras hacer. Sin embargo, sería demasiado complicado administrar construcciones de referencia en el diccionario de datos; tenga en cuenta que los tipos se pueden utilizar para definir otros objetos, incluidas las columnas de la tabla.
Por desgracia, debe declarar el Tipo con tipos de datos explícitos para sus atributos:
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
);
Obviamente, también debe sincronizarlo manualmente cada vez que cambie la estructura de cualquier columna T_C_EVO_GAME_CONFIG_CHANGE_LOG. Pero tendría que hacer esto de todos modos si agregó o eliminó una columna.
Alternativamente, puede definir el tipo como un registro PL/SQL en un paquete. Eso le permitiría usar la sintaxis de referencia.
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;
Depende de cómo quiera usar el Tipo en su aplicación más amplia.