Tôi có kiểu đối tượng với hàm tạo không có arg, nhưng khi tôi chỉ định giá trị mặc định cho cột thuộc loại đó, tôi nhận được ORA-00904: lỗi định danh không hợp lệ.Oracle: chỉ định giá trị mặc định cho cột kiểu đối tượng
Ví dụ:
CREATE OR REPLACE TYPE test_t AS OBJECT ( val NUMBER(10), CONSTRUCTOR FUNCTION test_t return self as result ) CREATE OR REPLACE TYPE BODY test_t AS CONSTRUCTOR FUNCTION test_t RETURN SELF AS RESULT IS BEGIN val := 1; RETURN; END; END; CREATE TABLE test_table ( test_attr test_t DEFAULT new test_t() ) Error: ORA-00904: "INKA"."TEST_T"."TEST_T": invalid identifier
Nếu tôi thay DEFAULT với ví dụ test_t (1), nó hoạt động, nhưng loại phá vỡ mô hình đóng gói OO, tôi muốn tất cả các trường cùng loại có cùng giá trị mặc định "(hy vọng bạn biết ý tôi là gì :-)
Tôi đang thiếu một cái gì đó ở đây, hoặc là điều này bình thường và nó không thể sử dụng constructor không mặc định như thế này?
ORA-06.553: PLS-307 là kết quả của định nghĩa constructor trùng lặp, Oracle có phần hài hước trong đó; nếu bạn thay thế tên tham số "in_val" bằng val (như tên của thuộc tính), nó sẽ ghi đè chính xác hàm tạo mặc định. –
Phải, nhưng nó vẫn tìm thấy nhà xây dựng này ... –
Tôi biết về giải pháp kích hoạt, nhưng 5-10 dòng mã cho một thứ có thể dễ đọc hơn và dễ quản lý hơn. Ban đầu tôi cho rằng không thể thực hiện được vì ngữ cảnh SQL không nhìn thấy bên trong ngữ cảnh PL/SQL, nhưng rõ ràng không phải là trường hợp vì không có công cụ OO nào hoạt động trong SQL thuần túy. Vì vậy, vấn đề này là hoặc là một giám sát trên một phần của Oracle, hoặc có một số cú pháp tôi không biết ... –