Orace游标:

一、游标简介:                                      

使用游标,我们可以对具体操作数据,比如查询的结果,对行,列数据进行更加细致的处理。以及对其他DML操作进行判断等操作;

二、显示游标:                                        

1.静态的指定变量类型:

SQL> declare cursor cu_emp is select empno,ename,sal from emp;
  2  e_no number;
  3  e_name varchar2(10);
  4  e_sal number;
  5  begin
  6     open cu_emp;
  7     fetch cu_emp into e_no, e_name, e_sal;
  8     while cu_emp%found loop
  9             dbms_output.put_line('编号:'||e_no||',姓名:'||e_name||',基本薪资:'||e_sal);
 10     fetch cu_emp into e_no, e_name, e_sal;
 11     end loop;
 12     close cu_emp;
 13  end;
 14  /
编号:7369,姓名:SMITH,基本薪资:800
编号:7499,姓名:ALLEN,基本薪资:1600
编号:7521,姓名:WARD,基本薪资:1250
编号:7566,姓名:JONES,基本薪资:2975
编号:7654,姓名:MARTIN,基本薪资:1250
编号:7698,姓名:BLAKE,基本薪资:2850
编号:7782,姓名:CLARK,基本薪资:2450
编号:7788,姓名:SCOTT,基本薪资:3000
编号:7839,姓名:KING,基本薪资:5000
编号:7844,姓名:TURNER,基本薪资:1500
编号:7876,姓名:ADAMS,基本薪资:1100
编号:7900,姓名:JAMES,基本薪资:950
编号:7902,姓名:FORD,基本薪资:3000
编号:7934,姓名:MILLER,基本薪资:1300

PL/SQL 过程已成功完成。

2.动态指定变量类型:

SQL> declare cursor cu_emp is select empno,ename,sal from emp;
  2  e_no emp.empno%type;
  3  e_name emp.ename%type;
  4  e_sal emp.sal%type;
  5  begin
  6     open cu_emp;
  7     fetch cu_emp into e_no, e_name, e_sal;
  8     while cu_emp%found loop
  9             dbms_output.put_line('编号:'||e_no||',姓名:'||e_name||',基本薪资:'||e_sal);
 10     fetch cu_emp into e_no, e_name, e_sal;
 11     end loop;
 12     close cu_emp;
 13  end;
 14  /
编号:7369,姓名:SMITH,基本薪资:800
编号:7499,姓名:ALLEN,基本薪资:1600
编号:7521,姓名:WARD,基本薪资:1250
编号:7566,姓名:JONES,基本薪资:2975
编号:7654,姓名:MARTIN,基本薪资:1250
编号:7698,姓名:BLAKE,基本薪资:2850
编号:7782,姓名:CLARK,基本薪资:2450
编号:7788,姓名:SCOTT,基本薪资:3000
编号:7839,姓名:KING,基本薪资:5000
编号:7844,姓名:TURNER,基本薪资:1500
编号:7876,姓名:ADAMS,基本薪资:1100
编号:7900,姓名:JAMES,基本薪资:950
编号:7902,姓名:FORD,基本薪资:3000
编号:7934,姓名:MILLER,基本薪资:1300

PL/SQL 过程已成功完成。

3.行类型:%rowtype:

SQL> declare cursor cu_emp is select * from emp;
  2  e emp%rowtype;
  3  begin
  4     open cu_emp;
  5     fetch cu_emp into e;
  6     while cu_emp%found loop
  7             dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',基本薪资:'||e.sal);
  8     fetch cu_emp into e;
  9     end loop;
 10     close cu_emp;
 11  end;
 12  /
编号:7369,姓名:SMITH,基本薪资:800
编号:7499,姓名:ALLEN,基本薪资:1600
编号:7521,姓名:WARD,基本薪资:1250
编号:7566,姓名:JONES,基本薪资:2975
编号:7654,姓名:MARTIN,基本薪资:1250
编号:7698,姓名:BLAKE,基本薪资:2850
编号:7782,姓名:CLARK,基本薪资:2450
编号:7788,姓名:SCOTT,基本薪资:3000
编号:7839,姓名:KING,基本薪资:5000
编号:7844,姓名:TURNER,基本薪资:1500
编号:7876,姓名:ADAMS,基本薪资:1100
编号:7900,姓名:JAMES,基本薪资:950
编号:7902,姓名:FORD,基本薪资:3000
编号:7934,姓名:MILLER,基本薪资:1300

PL/SQL 过程已成功完成。

上面的也可以查询带条件:

SQL> declare cursor cu_emp is select * from emp where sal > 2000 and sal < 3000;

  2  e emp%rowtype;
  3  begin
  4     open cu_emp;
  5     fetch cu_emp into e;
  6     while cu_emp%found loop
  7             dbms_output.put_line('编号:'||e.empno||',姓名:'||e.ename||',
基本薪资:'||e.sal);
  8     fetch cu_emp into e;
  9     end loop;
 10     close cu_emp;
 11  end;
 12  /
编号:7566,姓名:JONES,基本薪资:2975
编号:7698,姓名:BLAKE,基本薪资:2850
编号:7782,姓名:CLARK,基本薪资:2450

PL/SQL 过程已成功完成。
View Code

相关文章:

  • 2022-01-14
  • 2021-07-06
  • 2021-07-24
  • 2021-07-07
  • 2022-01-07
  • 2022-01-22
  • 2021-07-12
猜你喜欢
  • 2021-07-21
  • 2021-12-27
  • 2021-09-11
  • 2022-12-23
  • 2021-05-27
  • 2021-06-26
相关资源
相似解决方案