CREATE OR REPLACE PROCEDURE Get_user(MYCUR OUT SYS_REFCURSOR) IS
BEGIN
OPEN MYCUR FOR
select SSLMMSTF_STFCD,Trim(SSLMMSTF_STFNM2) as SSLMMSTF_STFNM2,SSLMMSTF_PASSWORD from SSLMM_STAFF;
END Get_user;能不能像上面这么写?还是必须用包?
BEGIN
OPEN MYCUR FOR
select SSLMMSTF_STFCD,Trim(SSLMMSTF_STFNM2) as SSLMMSTF_STFNM2,SSLMMSTF_PASSWORD from SSLMM_STAFF;
END Get_user;能不能像上面这么写?还是必须用包?
AS
TYPE refcursor IS REF CURSOR; PROCEDURE GetList(
rst OUT refcursor
) ;
END;
/
create or replace package body PKG_GetListPROCEDURE GetList(
rst OUT refcursor
)
IS
BEGIN
OPEN rst FOR
select SSLMMSTF_STFCD,Trim(SSLMMSTF_STFNM2) as SSLMMSTF_STFNM2,SSLMMSTF_PASSWORD from SSLMM_STAFF ;END GetList;
end;
这种OUT SYS_REFCURSOR的方式可能是不行的,我一直没有试成功过,哪位调试成功了发个demo看看?建议采用建包定义type的方式
如果支持,当然是用SYS_REFCURSOR方便了。
SQL> select * from test; AAA BBB
---------- ----------
1 a
2 b
3 cSQL> create procedure test_p(mycur out sys_refcursor)
2 as
3 begin
4 open mycur for select * from test;
5 end;
6 /过程已创建。SQL> var get_val refcursor
SQL> exec test_p(:get_val)PL/SQL 过程已成功完成。SQL> print get_val AAA BBB
---------- ----------
1 a
2 b
3 cSQL>
就提示refcursor不存在
就提示refcursor不存在
我一般使用包。这样也一样啊。
一样调用,只是多了一个包名+"."而已。
而且写的存储过程还很好分类。
昨天怎么使用sys_refcursor过程编译都通不过,
今天修改了oracle字符集,再重建了xdb方案后,
无意中rebuild这个存储过程,竟然编译通过了,执行也正常了,呵呵
真是奇怪的问题难道这两个操作引起了什么改动吗?困惑
你少写了冒号吧
SQL> create or replace procedure test(mycursor out sys_refcursor) is
2 begin
3 open mycursor for select * from emp;
4 end test;
5 /Procedure created.SQL> var c1 sys_refcursor;
Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
BINARY_FLOAT | BINARY_DOUBLE ] ]SQL> var c1 refcursorSQL> exec test(:c1);PL/SQL procedure successfully completed.SQL> print :c1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------ ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 1014 rows selected.