2014-02-27 34 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。因为它已经隐含的类型!