两个问题
问题1:在定义游标的时候我想根据不同的输入参数取不同的sql数据; 比如: 如果参数值为 1, select * from t1 否则 select * from t2!
问题2:两个游标能不能互相赋值,应该如何写代码!
谢谢
问题1:在定义游标的时候我想根据不同的输入参数取不同的sql数据; 比如: 如果参数值为 1, select * from t1 否则 select * from t2!
问题2:两个游标能不能互相赋值,应该如何写代码!
谢谢
CURSOR CUR_EMP(DEPT_VALUE NUMBER) IS
SELECT EMPNO, ENAME FROM EMP WHERE DEPTNO = DEPT_VALUE;如果是表名值,只有用动态游标了. EXECUTE IMMEDIATE 'SELECT * FROM '||V_TABLENAME;2: 是要实现什么样的需求?
2.能
例子如下:create or replace procedure proc_t(p_i INT,p_o OUT SYS_REFCURSOR) IS
begin
IF p_i=1 THEN
OPEN p_o FOR 'select ename a from scott.emp';
ELSIF p_i=2 THEN
OPEN p_o FOR 'select dname a from scott.dept';
ELSE
OPEN p_o FOR 'select dummy a from dual';
END IF;
end proc_t;
/DECLARE
c SYS_REFCURSOR;
d SYS_REFCURSOR;
l_v VARCHAR2(100);
BEGIN
dbms_output.put_line('*************1*************');
proc_t(1,c);
d:=c; --测试游标赋值
LOOP
FETCH d INTO l_v;
EXIT WHEN d%NOTFOUND;
dbms_output.put_line(l_v);
END LOOP;
dbms_output.put_line('*************2*************');
proc_t(2,c);
LOOP
FETCH c INTO l_v;
EXIT WHEN c%NOTFOUND;
dbms_output.put_line(l_v);
END LOOP;
dbms_output.put_line('*************3*************');
proc_t(3,c);
LOOP
FETCH c INTO l_v;
EXIT WHEN c%NOTFOUND;
dbms_output.put_line(l_v);
END LOOP;
END;
/
输出:
*************1*************
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
*************2*************
ACCOUNTING
RESEARCH
SALES
OPERATIONS
*************3*************
X
CREATE PROCEDURRE PRO_A ( I_WHERE IN VARCHAR(2) ) --I_WHERE 为传入条件
IS
GEGIN
DECLARE
STRSQL VARCHAR2(4000):=''; TYPE CUR_A IS REF CURSOR; --动态定义游标
CUR_B CUR_A;
BEGIN
STRSQL:='SELECT C, D FROM TABLE WHEWE T1='''|| I_WHERE||''''; --写游标SQL语句 OPEN COR_B FOR STRSQL; --打开游标
END; END;仅供参考,我就这样用过