%TYPE
синтаксисът е за използване в PL/SQL декларации. За съжаление не можем да го използваме, когато създаваме SQL обекти. Същото важи и за %rowtype
.
Би било много добре, ако можехме, защото една обща употреба на create or replace type
би било да изградите API на таблици, както искате да направите. Въпреки това, би било твърде сложно да се управляват референтни конструкции в речника на данните; имайте предвид, че типовете могат да се използват за дефиниране на други обекти, включително колони на таблица.
Така че, уви, трябва да декларирате типа с изрични типове данни за неговите атрибути:
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
);
Очевидно трябва също да го синхронизирате ръчно, когато структурата на която и да е колона T_C_EVO_GAME_CONFIG_CHANGE_LOG се промени. Но така или иначе ще трябва да направите това, ако добавите или изпуснете колона.
Като алтернатива можете да дефинирате типа като PL/SQL запис в пакет. Това ще ви позволи да използвате референтния синтаксис.
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;
Зависи как искате да използвате Type във вашето по-широко приложение.