%TYPE
cú pháp được sử dụng trong khai báo PL / SQL. Thật không may, chúng tôi không thể sử dụng nó khi tạo các đối tượng SQL. Tương tự với %rowtype
.
Sẽ rất gọn gàng nếu chúng ta có thể, bởi vì một cách sử dụng phổ biến là create or replace type
sẽ là xây dựng các API bảng như bạn muốn. Tuy nhiên, sẽ quá phức tạp để quản lý các cấu trúc tham chiếu trong từ điển dữ liệu; lưu ý rằng Kiểu có thể được sử dụng để xác định các đối tượng khác bao gồm các cột của Bảng.
Vì vậy, than ôi, bạn cần phải khai báo Loại với các kiểu dữ liệu rõ ràng cho các thuộc tính của nó:
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
);
Rõ ràng là bạn cũng cần phải đồng bộ hóa nó theo cách thủ công bất cứ khi nào cấu trúc của bất kỳ cột T_C_EVO_GAME_CONFIG_CHANGE_LOG nào thay đổi. Nhưng bạn vẫn phải làm điều này nếu bạn thêm hoặc bớt một cột.
Ngoài ra, bạn có thể xác định kiểu dưới dạng bản ghi PL / SQL trong một gói. Điều đó sẽ cho phép bạn sử dụng cú pháp tham chiếu.
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;
Nó phụ thuộc vào cách bạn muốn sử dụng Loại trong ứng dụng rộng hơn của mình.