小弟初学oracle,遇到一个难题,有张表
NAME RESULT
------------------------------- ----------
kevin 101
tom 101
...... 我想取出RESULT=101的人的名字,经别人提示,写了一个函数如下: CREATE OR REPLACE FUNCTION "SYSTEM"."get_values" (
p_str in int
) return SYS_REFCURSOR
as
r SYS_REFCURSOR;
BEGIN
OPEN r FOR select name from stu_result where RESULT=p_str;
RETURN r;
END; 写完之后不知道该如何使用了,select get_values('101') from dual 这样不行。不知道怎么才能得到这个函数返回的值?
另外,我想在C#中调用这个函数取它的返回值,又该如何做呢?请说详细点,最好有个demo ,谢谢大家了!!!!
NAME RESULT
------------------------------- ----------
kevin 101
tom 101
...... 我想取出RESULT=101的人的名字,经别人提示,写了一个函数如下: CREATE OR REPLACE FUNCTION "SYSTEM"."get_values" (
p_str in int
) return SYS_REFCURSOR
as
r SYS_REFCURSOR;
BEGIN
OPEN r FOR select name from stu_result where RESULT=p_str;
RETURN r;
END; 写完之后不知道该如何使用了,select get_values('101') from dual 这样不行。不知道怎么才能得到这个函数返回的值?
另外,我想在C#中调用这个函数取它的返回值,又该如何做呢?请说详细点,最好有个demo ,谢谢大家了!!!!
给你个例子:
CREATE OR REPLACE FUNCTION gg(s INT,e INT) RETURN SYS_REFCURSOR AS
r_c SYS_REFCURSOR;
BEGIN
OPEN r_c FOR
SELECT ename,empno
FROM (SELECT ename,empno, ROW_NUMBER() OVER(ORDER BY ENAME) RN FROM SCOTT.EMP T)
WHERE RN >= S
AND RN <= E;
RETURN r_c;
END;
/DECLARE
r_c SYS_REFCURSOR;
v_c1 VARCHAR2(10);
v_c2 VARCHAR2(10);
BEGIN
r_c:=gg(2,6);
LOOP
FETCH r_c INTO v_c1,v_c2;
EXIT WHEN r_c%NOTFOUND;
dbms_output.put_Line(v_c1||'-'||v_c2);
END LOOP;
CLOSE r_c;
END;
/输出:
ALLEN-7499
BLAKE-7698
CLARK-7782
FORD-7902
JAMES-7900
SQL> CREATE OR REPLACE FUNCTION get_values( p_str in int )
2 return SYS_REFCURSOR
3 as
4 r SYS_REFCURSOR;
5 BEGIN
6 OPEN r FOR select ename from emp where deptno=p_str;
7 RETURN r;
8 END;
9 /函数已创建。
SQL> select get_values(10) from dual;GET_VALUES(10)
--------------------
CURSOR STATEMENT : 1CURSOR STATEMENT : 1ENAME
----------
CLARK
KING
MILLER
SQL>
建议用存储过程返回,在C#中指定CommandType 为 storedprocedure
写成存储过程的话,同样返回这个游标就可以了吧???然后在c#中用sqlreader取就行了,是这样吗?我还没试