%TYPE
składnia jest używana w deklaracjach PL/SQL. Niestety nie możemy jej użyć przy tworzeniu obiektów SQL. To samo dotyczy %rowtype
.
Byłoby bardzo fajnie, gdybyśmy mogli, ponieważ jedno powszechne użycie create or replace type
byłoby tworzenie interfejsów API tabel tak, jak chcesz. Jednak zarządzanie konstrukcjami odwołań w słowniku danych byłoby zbyt skomplikowane; pamiętaj, że typy mogą być używane do definiowania innych obiektów, w tym kolumn tabeli.
Niestety, musisz zadeklarować Type z wyraźnymi typami danych dla jego atrybutów:
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
);
Oczywiście musisz również zsynchronizować go ręcznie za każdym razem, gdy zmieni się struktura dowolnej kolumny T_C_EVO_GAME_CONFIG_CHANGE_LOG. Ale i tak musiałbyś to zrobić, jeśli dodałeś lub upuściłeś kolumnę.
Alternatywnie możesz zdefiniować typ jako rekord PL/SQL w pakiecie. To pozwoliłoby ci użyć składni odniesienia.
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;
To zależy od tego, jak chcesz używać Typu w szerszej aplikacji.