oracle - 无法编译此小型oracle 10g数据库功能

标签 oracle plsql oracle10g syntax-error

在oracle 10g R2上进行实验时,以下代码不起作用,或者我不知道该怎么做。

我预计当我传递id时,此函数的行将从STUDENTS表返回。

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.

注意我确实对表和模式具有适当的权限,并且创建了函数,但有错误。

请帮助我了解这里的问题。

最佳答案

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 ..,因为它已经隐式为TYPE!

关于oracle - 无法编译此小型oracle 10g数据库功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22061640/

相关文章:

java.util.Timestamp.after() 比较毫秒时出错?

C# 在 refcursor(Oracle) 中读取游标

database - 是否建议在 Oracle 表空间中使用统一的扩展区大小?

oracle - 在文本字段中显示 PDF 文件的内容

oracle - 每组最大的行 - 进一步将结果集与左连接与 Hibernate 中的其他相关表相结合 - HQL。是否可以?

sql - 甲骨文 : Swapping table names

oracle - 将数据插入相关 Oracle 表并维护标识值列表

oracle - 从右侧获取字符串

oracle - PL/SQL 匿名 block 与 PL/SQL 过程 - ORA-01418 : specified index does not exist

oracle - dbms_output.put_line 在存储过程的 Cursor For 循环中不起作用