时间:2021-07-01 10:21:17 帮助过:16人阅读
1.2 用记录类型
DECLARE CURSOR cur_emp(var_job IN VARCHAR2:=‘SALESMAN‘) IS SELECT 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‘) IS SELECT * 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游标
标签:长度 ken record values acl row 记录 end 行数据