当前位置:Gxlcms > 数据库问题 > Oracle游标

Oracle游标

时间:2021-07-01 10:21:17 帮助过:16人阅读

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‘) 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   行数据   

人气教程排行