首页 > 代码库 > Oracle游标
Oracle游标
游标分显示游标跟隐式游标,它们都具有%FOUND、%NOTFOUND、%ISOPEN、%ROWCOUNT四个属性。
%FOUND:如果SQL语句至少影响到一行数据,则该属性为true,反之为false。
%NOTFOUND:与%FOUND相反。
%ISOPEN:判断游标是否打开。
%ROWCOUNT:返回爱SQL语句影响的行数。
1.显示游标
Oracle的游标可以设置参数值,如下,IN表示参数的方向,可以省略,参数的类型不需要指定长度
DECLARE CURSOR emp_cur(jobName IN VARCHAR2:=‘SALESMAN‘) ISSELECT EMPNO,ENAME,SAL FROM EMP WHERE JOB=jobName;
1.1用变量接收值。游标循环时用参数接收值,类似于MS SQL SERVER 的游标。
DECLARE EMP_NO EMP.EMPNO%TYPE; EMP_NAME EMP.ENAME%TYPE; EMP_SAL EMP.SAL%TYPE;BEGIN OPEN emp_cur(‘MANAGER‘); --打开游标 FETCH emp_cur INTO EMP_NO,EMP_NAME,EMP_SAL; --读取第一行 WHILE emp_cur%FOUND LOOP --循环判断,用%FOUND 返回TRUE则表示读取到了 DBMS_OUTPUT.put_line(‘FETCH CURSOR--‘||EMP_NO||‘--‘||EMP_NAME||‘--‘||‘--‘||EMP_SAL); FETCH emp_cur INTO EMP_NO,EMP_NAME,EMP_SAL; --读取下一行 END LOOP;END;END;
1.2 用记录类型
DECLARE CURSOR cur_emp(var_job IN VARCHAR2:=‘SALESMAN‘) ISSELECT EMPNO,ENAME,SAL FROM EMP WHERE JOB=var_job;TYPE emp_record IS RECORD --定义记录类型( EMPNO EMP.EMPNO%TYPE, ENAME EMP.ENAME%TYPE, SAL EMP.SAL%TYPE);emp_row emp_record; --定义类型对象BEGIN OPEN cur_emp(‘MANAGER‘); FETCH cur_emp INTO emp_row; --读取数据到记录对象 WHILE cur_emp%FOUND LOOP DBMS_OUTPUT.put_line(emp_row.EMPNO||‘--‘||emp_row.ENAME||‘--‘||‘--‘||emp_row.SAL); FETCH cur_emp INTO emp_row; END LOOP; CLOSE cur_emp; --关闭游标END;
1.3 FOR循环读取游标
1.3.1 读取游标
DECLARE CURSOR mycur(VAR_JOB VARCHAR2:=‘SALESMAN‘) ISSELECT * FROM EMP WHERE JOB=VAR_JOB;BEGIN FOR cur IN mycur LOOP DBMS_OUTPUT.put_line(cur.EMPNO||‘--‘||cur.ENAME||‘--‘||‘--‘||cur.SAL||‘--‘||cur.JOB); END LOOP; END;
1.3.2 直接循环SQL语句
FOR cur IN (SELECT * FROM EMP) LOOP DBMS_OUTPUT.put_line(‘FOR--‘||cur.EMPNO||‘--‘||cur.ENAME||‘--‘||‘--‘||cur.SAL||‘--‘||cur.JOB);END LOOP;
2.隐式游标
2.1在执行一个SQL,ORACLE会自动的创建一个隐式游标,如INSERT,UPDATE,DELETE语句。使用时需要在属性前面加上隐式游标默认的标识--SQL
--INSERT INTO EMP VALUES(‘7935‘,‘KEN‘,‘ENGINEER‘,7902,SYSDATE,2000,‘‘,20);
UPDATE EMP SET SAL=SAL+100;IF SQL%NOTFOUND THEN DBMS_OUTPUT.put_line(‘NOTFOUND‘); ELSE DBMS_OUTPUT.put_line(SQL%ROWCOUNT||‘受影响‘);END IF;
Oracle游标
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。