Le %TYPE
La syntaxe est destinée à être utilisée dans les déclarations PL/SQL. Malheureusement, nous ne pouvons pas l'utiliser lors de la création d'objets SQL. Idem pour %rowtype
.
Ce serait très bien si nous pouvions, car une utilisation courante de create or replace type
serait de construire des API de table comme vous le souhaitez. Cependant, il serait trop compliqué de gérer les constructions de référencement dans le dictionnaire de données; gardez à l'esprit que les types peuvent être utilisés pour définir d'autres objets, y compris les colonnes de table.
Alors hélas, vous devez déclarer le Type avec des types de données explicites pour ses attributs :
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
);
Évidemment, vous devez également le synchroniser manuellement chaque fois que la structure d'une colonne T_C_EVO_GAME_CONFIG_CHANGE_LOG change. Mais vous devrez le faire de toute façon si vous avez ajouté ou supprimé une colonne.
Vous pouvez également définir le type en tant qu'enregistrement PL/SQL dans un package. Cela vous permettrait d'utiliser la syntaxe de référencement.
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;
Cela dépend de la manière dont vous souhaitez utiliser le type dans votre application plus large.