Oracle实践--PL/SQL基础之游标

PL/SQL基础入门之游标

PL/SQL:过程语言(Procedure 
Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性。

--------------------------------------------------------------------------------------------------------------------------------------

/*

   游标:可以用来存放查询结果,逐行提取查询结果,以编程的方式访问数据

   类型:1.隐式游标;2.显示游标;3.引用游标

*/

/*

在PL/SQL中使用DML语句时自动创建隐式游标

隐式游标自动声明、打开和关闭,其名为 SQL

通过检查隐式游标的属性可以获得最近执行的DML语句的信息

隐式游标的属性有:

1.%FOUND – SQL语句影响了一行或多行时为 TRUE

2.%NOTFOUND – SQL语句没有影响任何行时为TRUE

3.%ROWCOUNT – SQL语句影响的行数

4.%ISOPEN -游标是否打开,始终为FALSE

*/

create or replace procedure sopV(obj varchar2)
as       --定义一个存储过程,用于输出字符串,简化书写
begin
 dbms_output.put_line(obj);
end;
create or replace procedure sopN(obj number)
as       --定义一个存储过程,用于输出number类型
begin
 dbms_output.put_line(obj);
end;

--隐式游标1

declare
 v_ename emp.ename%type;
 v_sq lvarchar2(200);
 v_no number :=‘&编号:‘;
begin
  v_sql :=‘select * from emp where empno =: no‘;
 execute immediate v_sql using v_no;
 if sql%notfound then--如果没有影响函数,notfound
   sopV(‘没有找到!‘);
 elsif sql%found then
   sopN(sql%rowcount);
 end if;
end;

--隐式游标2

declare
 v_name varchar2(20) :=‘ysjian‘;
begin
 update emp set ename = v_name where empno =7369;
 if sql%found then
   sopV(‘更新成功‘);
   sopN(sql%rowcount);
 elsif sql%notfound then
    sopV(‘没有找到!‘);
 end if;
end;

--隐式游标3

declare
    v_emp_rec emp%rowtype;
    v_empno number :=‘&empno‘;
begin
    select * into v_emp_rec from emp where empno=v_empno;
    if sql%notfound
       then dbms_output.put_line(‘没有找到‘);
    else
       dbms_output.put_line(v_emp_rec.empno||‘-->‘||v_emp_rec.ename);
    end if;
    exception
      when no_data_found--异常类型,没有找到数据时
        then dbms_output.put_line(‘data no found exception!‘);
end;

--显示游标1,关键字,cursor
is opoen fetch close

declare
 v_emp emp%rowtype;
 cursor v_cur is--此处与一般的变量声明不同,类型发在名称前面,关键字不能用as,用is
       select *from emp;
begin
 open v_cur;--打开游标
 loop
   fetch v_cur into v_emp;--提取游标
   sopV(v_emp.ename);
   exit when v_cur%notfound;
 end loop;
 close v_cur;--关闭游标
end;

--显示游标2,for循环遍历,打开,提取和关闭游标的操作自动完成

declare
 v_emp emp%rowtype;
 cursor v_cur is select  * from emp;
begin
 for resin v_cur
   loop
     sopV(res.ename);
   end loop;
end;

--显示游标3,带参数

declare
   v_emp emp%rowtype;
   cursor v_cur(parameter varchar2) is select * from emp where ename = parameter;
begin
 for v_res in v_cur(‘&ename:‘)
     loop
       sopV(v_res.ename);
     end loop;
end;

--显示游标4:用游标更新数据,关键字:select
... for update

select *from emp;
declare
 v_salnumber;
 cursor emp_cur is select  * from emp where  sal<1500 for update of sal; -- 更新sal字段
begin
 for cin emp_cur
   loop
     v_sal := c.sal;
     update emp set sal = v_sal*1.2 where current of emp_cur;-- 当前游标所指的行
   end loop;
end;

-- REF游标:用于处理运行时动态地执行sql查询

declare
  type emp_ref is ref cursor;--声明一个游标类型,此处又有不同哦
  emp_cur emp_ref;--声明一个游标,类型是上面定义好的类型
  v_emp emp%rowtype;
  v_sal number :=‘&输入薪水:‘;
begin
  open emp_cur for ‘select * from emp where sal>:s‘--此处可以是字符串,也就是可以动态传值的
  using v_sal;--给占位符绑值
  loop
    fetch emp_cur into v_emp;
    exit when emp_cur%notfound;
    sopV(v_emp.ename);
  end loop;
  close emp_cur;
end;

给游标简单的做个小结

1.游标用于处理查询结果集中的数据

2.游标类型有:隐式游标、显式游标和 REF游标

3.隐式游标由 PL/SQL自动定义、打开和关闭

4.显式游标用于处理返回多行的查询

5.显式游标可以删除和更新活动集中的行

6.要处理结果集中所有记录时,可使用循环游标

7.在声明 REF游标时,不需要将 SELECT语句与其关联

*/

文章来源:http://blog.csdn.net/ysjian_pingcx/article/details/25645515接

Oracle实践--PL/SQL基础之游标,布布扣,bubuko.com

时间: 2024-12-26 21:52:01

Oracle实践--PL/SQL基础之游标的相关文章

Oracle实践--PL/SQL基础之代码块

PL/SQL基础入门之代码块 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 优点: 1.       支持SQL,可以使用:DML,DCL,游标控制和SQL运算符 2

Oracle实践--PL/SQL基础之触发器和程序包

PL/SQL基础之触发器和程序包  程序包 /* 程序包:对相关存储过程,函数,变量,游标和异常等对象的封装 有声明和主体组成 优点:1.模块化:2.更轻松的应用程序设计;3.信息隐藏;4.性能更佳 */ --程序包的声明:关键字:package is end create or replace package my_pack as procedure packageTest(v_num number); end my_pack;--也可以是 end; --程序包的主体 create or re

Oracle实践--PL/SQL基础之同义词和序列

PL/SQL基础入门之同义词和序列             PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 同义词: /*     同义词:现有对象的一个别名:    

Oracle实践--PL/SQL基础之表分区

PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ---------------------------------------------

Oracle实践--PL/SQL基础之视图和索引

PL/SQL基础入门之视图和索引         PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. -----------------------------------

Oracle实践--PL/SQL基础之存储过程

PL/SQL基础之存储过程 存储过程:过程是用于完成特定任务的子程序(代码的集合) /* 子程序的优点:1.模块化,将程序分解为逻辑模块: 2.可重用性,可以被任意数目的程序调用: 3,可维护性,简化维护操作: 4.安全性:通过设置权限,使数据更安全 */ --存储过程1,打印HelloWorld create or replace procedure my_pro is --用于声明一些变量 v_string varchar2(20) :='helloworld!'; begin dbms_o

Oracle实践--PL/SQL基础之函数

PL/SQL基础之函数 /* 函数:可以有返回值得命名的PL/SQL子程序,必须有返回值 关键字:function return */ --函数1 create or replace function helloworld return varchar2--指定返回类型,不能给定长度 as v_hello varchar2(50); begin v_hello :='helloworld!'; return v_hello;--不可少的return end; --函数调用方式: select h

Oracle实践--PL/SQL综合之分页存储过程

当我们查看JDK API的时候,总会发现一些类说明写着,线程安全或者线程不安全,比如说StringBuilder中,有这么一句,"将StringBuilder 的实例用于多个线程是不安全的.如果需要这样的同步,则建议使用StringBuffer. ",那么下面手动创建一个线程不安全的类,然后在多线程中使用这个类,看看有什么效果. Count.java: [java] view plaincopy public class Count { private int num; public 

Oracle数据库—— PL/SQL基础编程

一.涉及内容 1. 掌握PL/SQL程序块的结构,理解并熟悉各种变量的应用. 二.具体操作 (一)使用system用户登录SQL*PLUS,使用SQL语句创建用户:u_你的姓名首字母(例如:u_zs),密码为: t_你的学号后三位(例如:t_165).并授予新用户连接数据库的权限,然后以新用户连接数据库. 1. 创建用户u_sxl 2. 授予新用户u_sxl连接数据库的权限 3. 以新用户u_sxl连接数据库 (二)使用scott用户连接数据库,使用SQL语句创建表dep_你的学号后三位(例如: