Вам не нужны отдельные таблицы для подтипов, вы можете просто вставить их в таблицу MENU
, а затем использовать функцию TREAT
для преобразования в подтип при необходимости:
CREATE TYPE MenuType AS OBJECT(
MenuCode VARCHAR2(5),
Description VARCHAR2(20)
) NOT FINAL;
/
CREATE TYPE VegetarianType UNDER MenuType (
ProteinLevel VARCHAR2(20)
);
/
CREATE TYPE LowFatType UNDER MenuType (
KCal VARCHAR2(20)
);
/
CREATE TABLE Menu of MenuType (
MenuCode PRIMARY KEY
);
Затем вы можете INSERT
:
INSERT INTO Menu
VALUES ( VegetarianType( 'VEGE1', 'Vegetarian Meal 1', 'Lots of Protein' ) );
INSERT INTO Menu VALUES ( LowFatType( 'LFAT1', 'Low Fat Meal 1', '500kCal' ) );
Затем вы можете использовать TREAT
для получения значений из полей подтипа:
SELECT m.*,
TREAT( VALUE(m) AS VegetarianType ).ProteinLevel AS ProteinLevel,
TREAT( VALUE(m) AS LowFatType ).KCal AS KCal
FROM Menu m;
Какие выходные данные:
MENUCODE | DESCRIPTION | PROTEINLEVEL | KCAL
:------- | :---------------- | :-------------- | :------
VEGE1 | Vegetarian Meal 1 | Lots of Protein | <em>null</em>
LFAT1 | Low Fat Meal 1 | <em>null</em> | 500kCal
дБ <> скрипка здесь