oracle cursor-光标

来源:互联网 发布:nsfc 数据 编辑:程序博客网 时间:2024/06/07 02:56

SQL过程化语言PL

*****初衷:通过JDBC调用PL,可以优化SQL的执行效率

关于cursor

首先来看一个例子:

不带参数光标

--使用光标查询员工姓名和工资,并打印declare  Cursor cur_emp is    select ename,sal from emp;  pname emp.ename%type;  psal emp.sal%type;begin    open cur_emp;  loop      fetch cur_emp  into pname,psal;
      exit when cur_emp%notfound;
  dbms_output.put_line(pname); dbms_output.put_line(psal); end loop; close cur_emp; end;


补充:

Cursor 的属性:

    %isopen 是否打开

    %rowcount 行数

    %notfound 没有记录


oracle默认允许一次打开300个cursor

    这对于大型的系统是不够用的,除了用户占用一些光标,系统也会占用,需要通过命令更改该配置

    登陆sqlplus  :

        sqlplus / as sysdba

    查看 cursor当前的一些配置

        show parameters cursor

SQL> show parameters cursor

NAME                                 TYPE
------------------------------------ --------------
VALUE
------------------------------
cursor_sharing                       string
EXACT
cursor_space_for_time                boolean
FALSE
open_cursors                         integer
300
session_cached_cursors               integer
50


带参数的光标

--使用光标查询员工姓名和工资,并打印declare  Cursor cur_emp(peno number) is    select ename,sal from emp where empno=peno;  pname emp.ename%type;begin  open cur_emp(7839);  loop      fetch cur_emp  into pname,psal;      exit when cur_emp%notfound;      dbms_output.put_line(pname);  end loop;  close cur_emp; end;