2012-03-09 18 views
9

Tôi đang cố gắng xác định type bằng cách sử dụng mã sau.Làm cách nào để tạo Loại Oracle có đề cập đến các cột trong bảng cho kiểu dữ liệu?

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT (
    app_id  some_table_name.app_id%type 
); 

Nếu tôi chạy điều này, tôi gặp lỗi.

Error(4,32): PLS-00201: identifier 'some_table_name.app_id' must be declared 

Điều gì là sai với điều này?

+1

Thông tin chi tiết về [diễn đàn Oracle] này (https://forums.oracle.com/forums/thread.jspa?threadID=2269924). Làm cho tinh thần tôi đoán nhưng nó dường như tôi là một cái gì đó tôi trực giác muốn làm cho thực hành tốt nhất. – wmorrison365

Trả lời

19

Có gì sai với nó là %type là cú pháp PL/SQL. Nó không được hỗ trợ trong SQL.

Tôi đồng ý đó là một sự xấu hổ, và nó sẽ thực sự gọn gàng nếu chúng ta có thể tham khảo các cột trong bảng khai báo kiểu như thế này. Thật không may Oracle đã thực sự làm chậm những thay đổi để thực hiện TYPE của họ trong vài phiên bản cuối cùng, vì vậy tôi nghĩ rằng nó không chắc điều này sẽ thay đổi trong tương lai gần.

Những gì tôi sẽ thực sự muốn thấy được Oracle hỗ trợ cú pháp sau:

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT 
     ( one_row  some_table_name.%rowtype); 

đối tượng động cho các giao diện: làm thế nào mát mẻ mà sẽ là gì?

+0

'% type' là cú pháp PL/SQL - Đây là bit quan trọng mà tôi bỏ qua. Cảm ơn. – AppleGrew

+1

+1, thật đáng tiếc và sẽ tạo mã hóa cho loại TYPE' linh hoạt hơn này. – Ollie

+0

+2 cho câu trả lời, -1 cho "cool" :-). – Ben

4

Bạn không thể sử dụng some_table_name.app_id%type khi tuyên bố một loại trong cơ sở dữ liệu, nhiều hơn bất kỳ bạn có thể làm điều này:

create table emp (empno number, 
        deptno dept.deptnp%type, -- NOT ALLOWED 
       ); 

Bạn phải sử dụng hoặc là một built-in loại như SỐ, VARCHAR2 (10) hoặc một loại do người dùng xác định, chẳng hạn như mytype

+0

Cảm ơn câu trả lời của bạn. – AppleGrew

Các vấn đề liên quan