【发布时间】:2017-10-20 05:34:06
【问题描述】:
我需要使用 oracle 11g 中的成员函数提取并显示 db 中所有记录的所有年份。
CREATE or replace TYPE BODY student_t AS
MEMBER FUNCTION getYear RETURN SYS_REFCURSOR IS
yearDOB SYS_REFCURSOR;
BEGIN
for c in (SELECT EXTRACT(YEAR FROM s.dob) c_year from student s)
loop
yearDOB := c.c_year;
end loop;
return yearDOB;
END;END;/
由于我需要为提取函数返回多个值,我已声明要返回的 SYS_REFCURSOR 类型变量。但它会产生以下错误。
7/1 PL/SQL: Statement ignored,
7/14 PLS-00382: expression is of wrong type
更改后输出如下答案。
S.GETYEAR()
光标语句:1
光标语句:1
C_YEAR
1993
1995
光标语句:1
光标语句:1
C_YEAR
1993
1995
学生类型如下。
create type student_t as object(
stno char(4),
dob date)/
alter type student_t add member function getYear RETURN SYS_REFCURSOR cascade;/
【问题讨论】:
-
您会得到多个结果,因为您将函数调用为 STUDENT 查询的投影,因此显然该函数将在表中的每条记录执行一次,两行 = 两次执行 = 两个结果集。如果表有十行,您将获得十次执行和十个结果集。要运行一次,请使用特殊的 Oracle 表 DUAL:
select get_year() from dual; -
能否请您发布TYPE
STUDENT_T和表格的完整定义。 -
再次,请不要插入图片!将结果复制/粘贴为文本。