Câu trả lời ngắn: Không, bạn không thể, và không phải vì đó là loại hệ thống. Bạn không thể neo một kiểu độc lập với bất kỳ kiểu dữ liệu cột nào của bảng.
% TYPE là cấu trúc PL / SQL. TẠO [HOẶC THAY THẾ] LOẠI là SQL. Bạn không thể sử dụng% TYPE trong SQL.
Nó phần nào có ý nghĩa rằng bạn không thể. Nếu bạn sử dụng MYTABLE.MYCOLUMN% TYPE trong PL / SQL, bạn đã neo loại PL / SQL đó vào bảng và nếu loại MYCOLUMN thay đổi PL / SQL có thể làm mất hiệu lực mã của bạn, sau đó biên dịch lại mã đó. Rõ ràng là Oracle sẽ phải làm gì nếu ví dụ của bạn hoạt động.
Hãy tưởng tượng điều gì sẽ xảy ra nếu bạn đang lưu trữ các đối tượng của SQLID_T trong một bảng và định nghĩa của SQL_ID trong V_ $ SQL đã thay đổi. Oracle sẽ cần phải thay đổi định nghĩa của các đối tượng được lưu trữ? Điều gì xảy ra nếu không thể (ví dụ: SQL_ID đã thay đổi từ VARCHAR2 thành SỐ)? Điều đó có nên ngăn định nghĩa của V_ $ SQL thay đổi không? Hoặc bảng nào đó đã sử dụng loại đó trở nên không hợp lệ theo một cách nào đó ... bạn không thể CHỌN từ nó nữa?
Oracle cố gắng ngăn điều này xảy ra ( từ Hướng dẫn dành cho nhà phát triển đối tượng của Oracle ):
SQL> CREATE OR REPLACE TYPE t1 FORCE AS OBJECT (c varchar(20));
2 /
Type created.
SQL> CREATE TABLE tb1 (c1 t1);
Table created.
SQL> CREATE OR REPLACE TYPE t1 FORCE AS OBJECT (d number);
2 /
CREATE OR REPLACE TYPE t1 FORCE AS OBJECT (d number);
*
ERROR at line 1:
ORA-22866: cannot replace a type with table dependents