我遇到了一些使用oracle對象類型的問題。我的成員函數正在編譯時出錯。在SELECT對象中遇到問題在Oracle對象類型成員函數
這裏的類型:
CREATE OR REPLACE TYPE t_Customer as OBJECT
(custID NUMBER
,fname varchar2(50)
,lname varchar2(50)
,MEMBER FUNCTION getHighest RETURN INTEGER
);
CREATE OR REPLACE TYPE t_Order AS OBJECT
(OrderID NUMBER, custID REF t_Customer, quantity INTEGER);
CREATE TABLE Order_Tbl of t_Order;
CREATE TABLE Customer_Tbl of t_Customer;
CREATE OR REPLACE TYPE BODY t_Customer AS
MEMBER FUNCTION getHighest RETURN INTEGER IS
v_max integer;
BEGIN
SELECT Max(Order.quantity) INTO v_max FROM Order WHERE Order.CustID = self.custID;
return v_max;
end;
我的SELECT INTO不工作。它告訴我我有無效的標識符。如果我想寫一個成員函數來爲客戶返回最高數量的訂單,我可以查詢Order的表嗎,還是可以使用對象引用?我也嘗試創建視圖無濟於事。
這是最簡單的,我可以簡化它,我也需要寫一些其他方法,但沒有一個我需要SELECT INTO
現在的工作。
錯誤是SELF.custid INVALID IDENTIFIER
和Component 'custid' must be declared.
感謝
編輯:SELECT INTO
PL/SQL查詢來訪問對象類型和他們的觀點必須別名。添加別名後,我的問題解決了。感謝您的幫助 - 我發佈瞭解決方案和幾個例子。
狂猜:ORDER是SQL子句「order by」的一部分,也許這就是錯誤的原因 - 嘗試使用模式名稱的前綴順序。 – 2013-05-04 07:22:13
@FrankSchmitt對不起,我的例子中有一些不一致(這是其中之一)。他們不會給我我抱怨的錯誤,但我糾正了我的例子,以避免混淆。 – Scotch 2013-05-04 19:45:02