存储过程及游标用法

存储过程及游标用法

1.for循环用法:for c in cursor(游标)

DECLARE
CURSOR cur IS SELECT DNAME,JOB FROM EMP;
BEGIN
FOR c IN cur LOOP
DBMS_OUPUT.PUTLINE(C.DNAME || ‘是一名:’ C.JOB);
END LOOP;
END;

2.cursor(参数)
DECLARE
V_NAME VARCHAR2(20);
CURSOR C_NAME(C_DNAME VARCHAR2) IS SELECT DNAME FROM EMP ;
BEGIN
OPEN C_NAME(C_DNAME );
LOOP
FETCH C_NAME INTO V_NAME;
IF V_NAME = ‘TOM’ THEN DBMS_OUPUT.PUTLINE(‘优秀’);
END IF;
EXIT FETCH C_NAME%NOTFOUND;
END LOOP;
CLOSE C_NAME;
END;

例如:
CREATE OR REPLACE PROCEDURE v_cursor(p_table IN VARCHAR2)
IS
–声明记录类型
TYPE emp_dept IS RECODE(
v_empno emp.empno%TYPE,
v_ename emp.ename%TYPE,
v_job emp.job%TYPE,
v_dname dept.dname%TYPE,
v_dept dept.loc%TYPE
);
–声明一个记录类型的变量
v_cur_recode emp_dept;

BEGIN
–定义游标,打开游标
IF p_table = ‘emp’ THEN
v_empno := 1111;
–定义游标名字 ,打开游标变量
OPEN v_cur_recode FOR
SELECT ename, job FROM emp WHERE empno = v_empno;
ELSIF p_table = ‘dept’ THEN
–打开游标变量
OPEN v_cur_recode FOR
SELECT dname, dept FROM dept;
ELSE
raise_application_error(-2000, ‘异常’);
END IF;

–循环变量
LOOP
IF p_table = ‘emp’ THEN
FETCH v_cur_recode INTO emp_dept ;
EXIT WHEN v_cur_recode %NOTFOUND;
dbms_output.put_line(‘v_ename=’ || emp_dept .v_ename || ‘,v_job=’ || emp_dept .v_job);
ELSE
FETCH v_cur_recode INTO emp_dept ;
EXIT WHEN v_cur_recode %NOTFOUND;
dbms_output.put_line(‘v_dname=’ || emp_dept .v_dname || ‘,v_dept=’ || emp_dept .v_dept);
END IF;
END LOOP;
–关闭游标变量
CLOSE v_cur_recode ;
END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值