Tôi đang viết một quy trình để xử lý đối tượng được xác định bởi người dùng được lưu trữ trong ANYDATA. Kiểu đối tượng và tên thuộc tính chỉ có thể được biết trong thời gian chạy, vì vậy tôi không thể xác định viarable cho nó trong phần khai báo. Trong Java, tôi có thể sử dụng sự phản chiếu để đối phó với nó, tôi có thể biết tên lớp và tên trường. Sau đó, tôi có thể truy cập các lĩnh vực thông qua sự phản ánh. Có cách nào để làm điều đó trong PLSQL như thế không? Những gì trong đầu của tôi ngay bây giờ là tạo ra một chuỗi sql trong thủ tục động và thực hiện nó. Nhưng nó không phải là những gì tôi muốn chính xác.Phản ánh trong PLSQL?
Giả sử, người dùng A đã xác định loại ADT là create or replace type Person_type as object (fname varchar2(10), lname varchar2(10));
và tạo một đối tượng đối tượng và chèn nó vào ANYDATA.
Trong thủ tục của tôi, bằng cách nào đó tôi biết tôi cần phải đối phó với các thuộc tính đầu tiên của đối tượng này, đó là fname. Vì vậy, nếu biết loại quảng cáo ở vị trí đầu tiên, mã của tôi sẽ như sau:
declare
adobject A.Person_type; -- HERE! I don't know the type yet, so I can't define adobject!
tempAnydata anydata;
rt number;
vbuffer varchar2(10);
...
begin
select somecolumn
into tempAnydata
from sometable
where something='something' for update;
rt := tempAnydata.GetObject(adobject);
vbuffer := adobject.fname; -- HERE! I don't know the attribute name is fname!
-- deal with vbuffer here
end;
Vì vậy, tôi nên làm gì để làm cho động? Cảm ơn trước.
Nếu bạn biết rằng 'tempAnydata' là * thực sự * một' A.person_type' như bạn chắc chắn làm (nếu không bạn không thể làm được 'cái GetObject (adobject) 'với adobject chính xác kiểu này) sau đó bạn * cũng * biết thuộc tính đầu tiên của loại đó là gì. Hay tôi đang thiếu một cái gì đó? –
A.person_type chỉ là một ví dụ, nó có thể là bất kỳ loại người dùng xác định. Nó có thể là B.anymal_type hoặc cái gì khác. – icespace
Đánh máy tĩnh mạnh. (Smalltalker gắt gỏng già đi lang thang, lẩm bẩm tự :-) –