2014-02-27 33 views
0

在Oracle 10g R2上進行實驗時,以下代碼無法運行,或者我不知道該怎麼做。無法編譯這個小型Oracle 10g數據庫函數

我期待這個函數的行將從STUDENTS表返回,當我通過id。

CREATE OR REPLACE FUNCTION OCT.GET_Student(ID_IN NUMBER) RETURN OCT.STUDENTS%ROWTYPE 
IS 
TYPE REC OCT.STUDENTS%ROWTYPE; 
BEGIN 
SELECT * INTO REC FROM OCT.STUDENTS WHERE STUD_ID=ID_IN 
EXCEPTION WHEN OTHERS THEN 
DBMS_OUTPUT.PUT_LINE('ERR'||SQLCODE); 
END; 

預期的輸出將是數據庫表中的一行或兩行。 現在我不能編譯這個函數。

錯誤返回

FUNCTION OCT.GET_STUDENT 
On line: 3 
PLS-00103: Encountered the symbol "OCT" when expecting one of the following: 

    (array limited new private range record VARRAY_ char_base 
    number_base decimal date_base clob_base blob_base bfile_base 
    table ref object fixed varying opaque sparse 
The symbol "range" was substituted for "OCT" to continue. 

我有上表架構和功能創建的,但有錯誤的正當權利。

Plz幫助我瞭解這裏有什麼問題。

+0

「IS」是否是DECLARE?另外當聲明你想要的變量名稱類型(大小)的變量。這只是黑暗中的一個鏡頭,我從來沒有看到過你放置它們的地方。 – TheOneWhoPrograms

回答

2
CREATE OR REPLACE FUNCTION OCT.GET_Student(ID_IN NUMBER) RETURN OCT.STUDENTS%ROWTYPE 
IS 
    REC OCT.STUDENTS%ROWTYPE; 
BEGIN 
    SELECT * INTO REC FROM OCT.STUDENTS WHERE BCODE=ID_IN; 
    RETURN(REC); --- A FUNCTION SHOULD RETURN SOMTHING. 
EXCEPTION 
WHEN OTHERS THEN 
    DBMS_OUTPUT.PUT_LINE('ERR'||SQLCODE); 
    RETURN(NULL); --- A FUNCTION SHOULD RETURN SOMTHING. 
END; 

在使用ROWTYPE定義變量,我們不需要指定關鍵字TYPE。因爲它已經隱含的類型!