Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

cách tạo bảng kế thừa trong oracle

Tạo các loại của bạn bằng cú pháp chính xác:

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
);

Sau đó, bạn có thể tạo một bảng đối tượng:

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

Sau đó, bạn có thể chèn các kiểu khác nhau vào đó:

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
  )
);

và lấy dữ liệu ra khỏi nó:

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;

Kết quả đầu ra:

db <> fiddle tại đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt ROracle trên Mac OS X - Oracle cần những gì?

  2. Câu hỏi phỏng vấn:Làm thế nào để lấy tổng hợp 3 tháng trước ở cấp cột?

  3. Làm thế nào để loại bỏ nhiều phân vùng khoảng thời gian dựa trên ngày?

  4. ORA-12560:TNS:lỗi bộ điều hợp giao thức

  5. PARTITION BY có và không có KEEP trong Oracle