暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 我用函数返回的光标面对问题

askTom 2018-03-17
220

问题描述

i face prob with the returned cursor from function ,i created function to return cursor ,and in the script  ,i use the function to give me the cursor after that in loop i try to print all data that is in the cursor .

but it didnt work , and it say  invalid cursor  

that is my  code  : 
------------------ creating the function ------------------------------

CREATE OR REPLACE FUNCTION GETDATA 
(
  P_MANAGER_ID IN NUMBER  
) RETURN  SYS_REFCURSOR IS 
EMPS sys_refcursor;
V_LNAME VARCHAR2(20);
V_FNAME VARCHAR2(20);
V_TOTAL NUMBER;

BEGIN
OPEN EMPS for SELECT LAST_NAME,FIRST_NAME 
FROM EMPLOYEES 
WHERE MANAGER_ID =  P_MANAGER_ID  ;
CLOSE EMPS;
RETURN EMPS;
END GETDATA;

--------------------------------------------------------------
--------------------lister  the result --------------------

SET SERVEROUTPUT ON;
DECLARE 
 LISTS SYS_REFCURSOR ;
V_LAST EMPLOYEES.LAST_NAME%TYPE;
V_FIRST EMPLOYEES.FIRST_NAME%TYPE;
BEGIN 
LISTS :=GETDATA(100);
LOOP
FETCH LISTS INTO V_LAST ,V_FIRST;
EXIT WHEN LISTS%NOTFOUND;
dbms_output.put_line(V_LAST||','||V_FIRST);
END LOOP;
END;



thanks  ;
复制

专家解答

SQL>创建或替换函数GETDATA
2 (
3 P_MANAGER_ID编号
4) 返回SYS_REFCURSOR为
5个EMPS系统 _ 参考光标;
6 V_LNAME VARCHAR2(20);
7 V_FNAME VARCHAR2(20);
8 v _ 总数;
9
10开始
11为选择最后名称、名字打开EMPS
12来自人力资源员工
13其中MANAGER_ID = P_MANAGER_ID;
14个返回EMPS;
15 END GETDATA;
16/

函数创建。

SQL>
SQL>设置SERVEROUTPUT ON;
SQL>声明
2个列表SYS_REFCURSOR;
3 V_LAST hr.Employes.LAST_NAME % 类型;
4 V_FIRST hr.Employes.FIRST_NAME % 类型;
5开始
6个列表: = GETDATA(100);
7循环
8个将列表提取到V_LAST,V_FIRST;
9 EXIT WHEN LISTS%NOTFOUND;
10 dbms_output.put_line(V_LAST | | ',' | | V_FIRST);
11端环;
12个关闭列表;
13结束;
14/
内纳科赫哈尔
德哈恩,莱克斯
拉斐尔里,登
魏斯,马修
弗里普,亚当
卡弗林,帕亚姆
沃尔曼,山塔
凯文·穆戈斯
约翰·拉塞尔
合伙人,凯伦
阿尔贝托·埃尔拉祖里兹
杰拉尔德·坎布罗
埃莱尼·兹洛基
迈克尔·哈特斯坦

PL/SQL过程成功完成。

SQL>
SQL>
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论