【发布时间】:2016-12-18 15:08:44
【问题描述】:
所以,假设我有一张这样的桌子:
CREATE TABLE MEETINGS(
MEETING_DAY DATE,
MEETING_ROOM NVARCHAR2(10),
MEETING_DURATION NUMBER(2)
);
还有一个像这样的程序,它接收日期和会议室,并返回一个记录,其中包含在给定日期将在会议室中发生的会议持续时间:
CREATE OR REPLACE PROCEDURE meetings_for_today(
v_room IN NVARCHAR2, v_day IN DATE, result_meetings OUT SYS_REFCURSOR)
IS BEGIN
OPEN result_meetings FOR
SELECT MEETING_DAY, MEETING_DURATION
FROM MEETINGS
WHERE MEETING_DAY = v_day AND MEETING_ROOM = v_room;
END;
/
但我想检查该程序是否真的有效,我在这个主题上搜索了很多,但我发现很难找到解决方案。
所以我尝试过这样做:
DECLARE
meeting_res MEETINGS%ROWTYPE;
v_refcur sys_refcursor;
BEGIN
meetings_for_today('1A', to_date('12/12/2016', 'dd/mm/yyyy'), v_refcur);
LOOP
fetch v_refcur into meeting_res;
exit when v_refcur%notfound;
dbms_output.put_line(meeting_res.MEETING_DAY || ' ' || meeting_res.MEETING_DAY);
end loop;
End;
/
这给了我以下错误:
第 1 行的错误: ORA-06504: PL/SQL: 结果集变量或查询的返回类型不匹配 ORA-06512: 在第 8 行
我做错了什么?
PS:请不要给我有效的代码;向我解释我的推理出了什么问题以及我应该如何更好地使用 Oracle 的资源:)
【问题讨论】:
标签: oracle stored-procedures plsql