这个问题我以前问过类似的,但一直没得到如意的答案!在oracle 里soctt的用户下的emp表,比如写一个函数,传入的参数为部门编号,然后返回所有该部门人员信息的函数。要用到游标,且要封装信息,该如何写?且能在pl/sql developer里能调试的,谢谢。
解决方案 »
- oracle11g不能进入OEM,安装时好像程序没有默认安装OEM,怎么办?
- 从数据库里查询交易记录被修改的资料
- 请教达人:往数据库中要插入1亿多条数据用JAVA程序实现可行吗?
- 请教一个简单的触发器的问题
- 请问SQL,PL/SQL,SQL*Plus,PL/SQL Developer之间的关系是什么?
- .Net下用哪种连接比较好,是oledb还是oracleclient?
- 如何建一个通用存储过程,传入参数(表名及字段名)返回相应字段的值
- 有一道应聘题:请写出几种登录远程数据库的方法?
- Pb如何正确显示oracle中数据字符集为iso8859-1的中文数据。多谢各位!
- 也问一个关于oracle的中文问题
- 一个sql求和问题
- 多行转一行的问题
P_USER_ID_I IN VARCHAR2 --接收输入参数
)
RETURN SYS_REFCURSOR
AS
P_RESULT_SET_O SYS_REFCURSOR; --返回游标
X_SQL VARCHAR2(200);
BEGIN
X_SQL :='select user_id,user_name,email from user_mst where user_id like ''%' || P_USER_ID_I ||'%'''; --生成SQL语句
OPEN P_RESULT_SET_O FOR X_SQL;
RETURN P_RESULT_SET_O; --返回游标
END getCursorList;
2 (pi_deptno IN emp.deptno%TYPE,
3 po_result OUT SYS_REFCURSOR)
4 IS
5 begin
6 OPEN po_result FOR
7 SELECT * FROM emp WHERE deptno=pi_deptno;
8 end ;
9 /过程已创建。SQL> var r_cur refcursor
SQL> exec emp_dept(10,:r_cur);PL/SQL 过程已成功完成。SQL> print :r_cur EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
DEPTNO
----------
7782 CLARK MANAGER 7839 09-6月 -81 2450
10 7839 KING PRESIDENT 17-11月-81 5000
10 7934 MILLER CLERK 7782 23-1月 -82 1300
10
SQL>pl/sql developer里调试,单独查看游标结果集。
点击其右边的...按钮,就可以在新窗口里看见你想要的结果集。
2 (pi_deptno IN emp.deptno%TYPE)
3 RETURN SYS_REFCURSOR
4 IS
5 po_result SYS_REFCURSOR;
6 BEGIN
7 OPEN po_result FOR
8 SELECT * FROM emp WHERE deptno=pi_deptno;
9 RETURN po_result;
10 END;
11 /函数已创建。SQL> select func_emp_dept(10) from dual;FUNC_EMP_DEPT(10)
--------------------
CURSOR STATEMENT : 1CURSOR STATEMENT : 1 EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
DEPTNO
----------
7782 CLARK MANAGER 7839 09-6月 -81 2450
10 7839 KING PRESIDENT 17-11月-81 5000
10 7934 MILLER CLERK 7782 23-1月 -82 1300
10SQL>
create or replace function func_emp_dept(v_deptno IN emp.deptno%TYPE)
return cursor IS c_cursor cursor;
BEGIN
OPEN c_cursor FOR
SELECT * FROM emp WHERE deptno = v_deptno;
RETURN c_cursor;
END;
说必须申明表标CURSOR,这怎么理解?
而cursor,只是一个关键字。