sql >> データベース >  >> RDS >> Oracle

Oracleで継承テーブルを作成する方法

    正しい構文を使用してタイプを作成します:

    CREATE TYPE Event_t AS OBJECT(
      EventID   char(5),
      EventType varchar(20),
      VenueName varchar(50),
      NoOfGuest number(10)
    ) NOT FINAL;
    
    CREATE TYPE HotelEvent_t UNDER Event_t (
      datetime date,                -- Date is a keyword, try to use a different name.
      Price  number(8,2)
    );
    
    CREATE TYPE SpecialEvent_t UNDER event_t (
      BookingDate date,
      EndDate     date,
      MenuNumbers NUMBER(2),
      Reservation ref Reservation_t
    );
    

    次に、オブジェクトテーブルを作成できます:

    CREATE TABLE Events OF Event_T(
      eventid CONSTRAINT Events__EventID__PK PRIMARY KEY
    );
    

    次に、さまざまなタイプを挿入できます:

    INSERT INTO EVENTS VALUES(
      HotelEvent_T(
        'H1',
        'HOTEL',
        'Venue1',
        42,
        DATE '0001-02-03' + INTERVAL '04:05:06' HOUR TO SECOND,
        123456.78
      )
    );
    
    INSERT INTO EVENTS VALUES(
      SpecialEvent_T(
        'SE1',
        'SPECIAL',
        'Time Travel Convention',
        -1,
        SYSDATE,
        TRUNC(SYSDATE),
        0,
        NULL
      )
    );
    

    そこからデータを取得します:

    SELECT e.*,
           TREAT( VALUE(e) AS HotelEvent_T ).datetime AS datetime,
           TREAT( VALUE(e) AS HotelEvent_T ).price AS price,
           TREAT( VALUE(e) AS SpecialEvent_T ).bookingdate AS bookingdate,
           TREAT( VALUE(e) AS SpecialEvent_T ).enddate AS enddate,
           TREAT( VALUE(e) AS SpecialEvent_T ).menunumbers AS menunumbers
    FROM   Events e;
    

    どの出力:

    db <> fiddle こちら



    1. json、jsonb、hstore、xml、enum、ipaddrなどの保存は、列xがタイプjsonで失敗しますが、式はタイプ文字が異なります

    2. ORDERBYおよびLIMIT後のUNION

    3. MariaDB VERSION()の説明

    4. Oracleの日付からJavaの日付