【oracle】补充 cursor 基本例子

1118-02补充 cursor 基本例子

查看 共享的命令:
cmd
fsmgmt.msc

/*
cursor
1.参数列表,is <select_statement> 是否含有 变量
2.接收游标值
2.1 标量类型变量
2.2 记录类型变量
2.3 for循环中的循环计数变量
3.游标属性
3.1 显式游标,ref cursor 语法: 游标名%游标属性
3.2 隐式游标 语法: SQL%游标属性
*/

set serveroutput on;
/*cursor,无参,接收游标值:1.标量类型变量*/
declare
cursor v_cur is
select serial_no,type_code,brand_code,brand_name from t_sales;
vi_serial_no integer;
vv_type_code varchar2(30);
vv_brand_code varchar2(30);
vv_brand_name varchar2(30);
begin
open v_cur;
loop
fetch v_cur into vi_serial_no,vv_type_code,vv_brand_code,vv_brand_name;
exit when v_cur%notfount;
dbms_output.put_line( vi_serial_no||','||vv_type_code||','||vv_brand_code||','||vv_brand_name );
end loop;
close v_cur;
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

set serveroutput on;
/*cursor,无参,接收游标值:2.记录类型变量*/
declare
cursor v_cur is
select serial_no,type_code,brand_code,brand_name from t_sales;
type t_record is record (
serial_no integer,
type_code varchar2(30),
brand_code varchar2(30),
brand_name varchar2(30)
);
v_record t_record; --记录类型 的显式定义
--v_record t_sales%rowtype; --记录类型 的隐式定义(table)
-- v_record v_t_sales%rowtype; --记录类型 的隐式定义(view)
--v_record v_cur%rowtype; --记录类型 的游标定义
begin
open v_cur;
loop
fetch v_cur into v_record;
-- fetch v_cur into v_record.serial_no,v_record.type_code,v_record.brand_code,v_record.brand_name;
exit when v_cur%notfount;
dbms_output.put_line( vi_serial_no||','||vv_type_code||','||vv_brand_code||','||vv_brand_name );
end loop;
close v_cur;
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

set serveroutput on;
/*cursor,无参,接收游标值:3.for循环中的循环计数标量*/
declare
cursor v_cur is
select serial_no,type_code,brand_code,brand_name from t_sales;
begin
for i_row in v_cur loop
dbms_output.put_line( i_row.serial_no||','||i_row.type_code||','||i_row.brand_code||','||i_row.brand_name );
end loop;
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

set serveroutput on;
/*cursor,有参,无变量*/
declare
cursor v_cur(vp_serial_no integer default 5) is
select serial_no,type_code,brand_code,brand_name from t_sales where serial_no <= vp_serial_no;
begin
for i_row in v_cur(3) loop
dbms_output.put_line( i_row.serial_no||','||i_row.type_code||','||i_row.brand_code||','||i_row.brand_name );
end loop;
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

set serveroutput on;
/*cursor,有参,有变量*/
declare
vv_type_code varchar2(30);
cursor v_cur(vp_serial_no integer default 5) is
select serial_no,type_code,brand_code,brand_name from t_sales where serial_no <= vp_serial_no and type_code = upper(vv_type_code);
v_record v_cur%rowtype;
begin
vv_type_code := 'T01'; --open前 赋值
--open v_cur; --参数列表 有默认值的游标,open时可以不带参数列表
open v_cur(3);
loop
fetch v_cur into v_record;
exit when v_cur%notfount;
dbms_output.put_line( v_record.serial_no||','||v_record.type_code||','||v_record.brand_code||','||v_record.brand_name );
end loop;
close v_cur;
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

set serveroutput on;
/*游标属性:1.显式游标,ref cusor*/
declare
cursor v_cur is
select serial_no,type_code,brand_code,brand_name from t_sales;
v_record v_cur%rowtype;
begin
if not (v_cur%isopen) then
open v_cur;
end if;

fetch v_cur into v_record;
while v_cur%found loop
dbms_output.put_line( v_cur%rowcount||':'||v_record.serial_no||','||v_record.type_code||','||v_record.brand_code||','||v_record.brand_name );
fetch v_cur into v_record;
end loop;
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

set serveroutput on;
/*游标属性: 2.隐式游标*/
declare
type t_record is record (
serial_no integer,
type_code varchar2(30),
brand_code varchar2(30),
brand_name varchar2(30)
);
v_record t_record;
begin
select serial_no,type_code,brand_code,brand_name into v_record from t_sales where serial_no = 1;
dbms_output.put_line(to_char(SQL%rowcount));
update t_sales set brand_name = brand_name||'_01';
dbms_output.put_line(to_char(SQL%rowcount));
--commit;
rollback;
dbms_output.put_line(to_char(SQL%rowcount));
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

/* ref cursor
定义:
1.select语句
2.sql字符串
*/
set serveroutput on;
/*ref cursor,指定游标语句:1.select语句*/
declare
type t_ref_cursor is ref cursor;
v_ref_cur t_ref_cursor;
vi_serial_no integer := 5;
v_record t_sales%rowtype;
begin
open v_ref_cur for
select serial_no,type_code,brand_code,brand_name into v_record from t_sales where serial_no <= vi_serial_no;
loop
fetch v_ref_cur into v_record;
exit when v_reg_cur%notfound;
dbms_output.put_line(v_record.serial_no||','||v_record.type_code||','||v_record.brand_code||','||v_record.brand_name );
end loop;
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

set serveroutput on;
/*ref cursor,指定游标语句:2.sql字符串*/
declare
type t_ref_cursor is ref cursor;
v_ref_cur t_ref_cursor;
vi_serial_no integer := 5;
v_record t_sales%rowtype;
vv_sql varchar2(500);
begin
vi_serial_no := 3;
/*使用 普通变量
vv_sql := ' select serial_no,type_code,brand_code,brand_name into v_record from t_sales where serial_no <= '||vi_serial_no ;
open v_ref_cur for vv_sql;
*/
/*使用 绑定变量*/
vv_sql := ' select serial_no,type_code,brand_code,brand_name into v_record from t_sales where serial_no <= :serial_no' ;
open v_ref_cur for vv_sql using vi_serial_no; --open时指定绑定变量的值
loop
fetch v_ref_cur into v_record;
exit when v_reg_cur%notfound;
dbms_output.put_line(v_record.serial_no||','||v_record.type_code||','||v_record.brand_code||','||v_record.brand_name );
end loop;
exception
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

posted on 2018-04-05 12:02 绿Z 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/greenZ/p/8721850.html

【oracle】补充 cursor 基本例子相关推荐

  1. oracle存储过程游标调用,oracle存储过程调用游标例子-Oracle

    oracle存储过程调用游标例子. 1:首先你需要创建一个包,并定义你返回的游标的类型.存储过程 create or replace package TEST_PKG is --定义游标 type t ...

  2. oracle的cursor的介绍

    oracle的cursor的介绍 一  概念      游标是SQL的一个内存工作区,由系统或用户以变量的形式定义. 游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在 ...

  3. Oracle/PLSQL CURSOR FOR Loop

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Orac ...

  4. oracle外关联更新操作,记要oracle 关联更新的例子

    记录oracle 关联更新的例子 1.说明 修改某一天"本期值"数据时,需要把第二天的"上期值"更新. 2.sql如下,作为备忘 update (select ...

  5. 【Oracle】Cursor(游标)

    [Oracle]Cursor(游标) Cursour(游标)是Oracle数据库中解析SQL和执行SQL的载体. Shared Cursor 定义 Shared Cursor 是指缓存在库缓存里 SQ ...

  6. oracle补充日志

    简介 概述 Oracle 补充日志(supplemental log)又叫附加日志,可以指示数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,如逻辑standby.streams.Golde ...

  7. oracle补充日志条件,Oracle补充日志-Oracle

    Oracle补充日志 -–补充日志 Supplemental Logging 补充日志只要是针对 UPDATE 命令的,是对重做日志记录中 变更矢量块的补充信息,增加了变更矢量记载的记录量. 日志挖掘 ...

  8. oracle 记录给游标,Oracle游标 CURSOR实例详解

    一.游标概述: 游标(cursor)是数据库系统在内存中开设的一个数据缓冲区,存放SQL语句的执行结果. 每个游标都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给变量做进一步处理. 作用 ...

  9. Oracle中cursor的介绍和使用,以及自己对cursor的理解

    一,概念         Oracle的游标是一个指向上下文区域的指针,这个上下文区域是PL/SQL语句块中在执行SELECT语句或DML数据操纵语句时分配的.比如当使用SELECT语句查询返回多行数 ...

最新文章

  1. linux系统关于ping的命令,详解Linux系统中ping和arping命令的用法
  2. 深度学习领域四个不可不知的重大突破
  3. asp.net夜话之五:Page类和回调技术
  4. 从强提醒说起——社交场景下的万有“隐力”
  5. 玩转GIT系列之【git的分支操作(查看分支/切换分支/新建分支/删除分支)】
  6. Android--百度地图之基础地图(三)
  7. STM32之SPI原理
  8. 【计算机网络】—— 停止-等待协议
  9. Java 使用execute方法执行Sql语句
  10. 金蝶kis记账王使用前要准备哪些资料
  11. 解决java使用Runtime.exec执行linux复杂命令不成功问题
  12. linux rootfs制作
  13. windowsbuilder 的介绍
  14. php 12306查询结果,使用php怎么编写一个12306余票查询功能
  15. 淘码手机验证码平台——唯一可以批量接收验证码及批量解封账号的平台
  16. 中科大凸优化P345678 Chapter2Conve Set
  17. Ajax创建步骤内含兼容
  18. 爱奇艺qsv视频下载后怎么转换为3gp格式
  19. 题解 | Coffee Chicken-2019牛客暑期多校训练营第十场B题
  20. 仿短视频竖屏播放美nv网站源码

热门文章

  1. 微信公众平台开发教程(四) 实例入门:机器人(附源码)
  2. HandlerThread 类的学习(转载)
  3. 超强 css 实现 table 隔行 ,隔列 换色
  4. 《0 bug ---- C/C++商用工程之道》目录
  5. 浅析Java内存模型--ClassLoader
  6. Apache Sentry 初识
  7. java 一千万数字排序_java 输入任意几个数字,怎样将他们从大到小排序?
  8. 组件化开发思想||全局组件注册语法||组件注册注意事项
  9. SpringMVC如何获取请求带来的各种信息 ||如果我们的请求参数是一个POJO(自定义参数类型), SpringMVC会自动的为这个POJO进行赋值
  10. 块级元素 Vs 内联元素