oracle游标、临时表使用练习

1.创建一张会话级的临时表:


<span style="font-size:14px;">create global temporary table pact_test
(
   pact_id varchar2(100),
   pact_code varchar2(100),
   pact_name varchar2(800)
) on commit preserve rows;</span>


2.创建一张主表,并插入数据:

<span style="font-size:14px;">create table PACT_BASEINFO
(
  pact_id           VARCHAR2(30) not null,
  pact_code         VARCHAR2(150) not null,
  pact_name         VARCHAR2(1000) not null 
)</span>


插入数据:

<span style="font-size:14px;">prompt Importing table pact_test...
set feedback off
set define off
insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'ZD0ZB', '天翼电信');

insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'HISGS', '海南电信');

insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'JSSGS', '江苏电信');

insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'CU12-', '中国联通甘肃业务');

insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'YNSGS', '中国电信云南公司');

prompt Done.</span>



3.写一个游标查询并插入

<span style="font-size:14px;">declare
  v_cnt number :=5;
  cursor c_pact is select pact_id,pact_code,pact_name  from (select rownum rn,pact_id,pact_code,pact_name from pact_baseinfo) a where a.rn <v_cnt ;
  v_pact_id pact_baseinfo.pact_id%type;
  v_pact_code pact_baseinfo.pact_code%type;
  v_pact_name pact_baseinfo.pact_name%type;
begin
  open c_pact;
  loop
    fetch c_pact into v_pact_id,v_pact_code,v_pact_name;
    exit when c_pact%notfound;
    insert into  pact_test(pact_id,pact_code,pact_name)
    values(v_pact_id,v_pact_code,v_pact_name);
    commit;
  end loop;
  close c_pact;
end;</span>

4.验证临时表中是否被插入数据:

<span style="font-size:14px;">select * from pact_test</span>

5.总结:

1)临时表分为两种:

        会话级别的临时表:这个临时表中的数据和你的当前会话有关系,当你当前SESSION 不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION 的时候,临时表中的数据就全部没有了

       事务级别的临时表:当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出SESSION 的时候,事务级的临时表也会被自动截断)

     这次实验用的是会话级别的临时表,下面记录下事务级别的临时表怎么建立:

   

<span style="font-size:14px;">create global temporary table pact_test
(
   pact_id varchar2(100),
   pact_code varchar2(100),
   pact_name varchar2(800)
) on commit delete rows;</span>

2)游标的使用:

(1)Oracle中的游标分为显式游标和隐式游标:
显式游标:用cursor...is 命令定义的游标,它可以对select语句返回的多条记录进行处理。
隐式游标:在执行insert、delete、update和返回单条记录的查询select into语句时由pl/sql自动定义,隐式游标也叫sql游标。


2Oracle显式游标分为普通游标、参数游标、游标变量。
其中普通游标和参数游标也被称为静态游标,游标变量被称为动态游标。


一般所说的游标是指显式游标,因为隐式并不能被操作者控制,只能获取他的属性,本篇先讲述最常用的显式游标,隐式游标在最后简述。


3显式游标的一般使用步骤
定义游标:cursor cursor_name is select_sql; (注意,游标的定义只能用使关键字IS,它与AS不通用)
打开游标:open cursor_name;
提取数据:
语法1 fetch cursor_name into variable1[,variable2,...];
其中,fetch into 每次只能提取一行数据,批量数据需使用循环;variable指定接收游标数据的变量,select_sql的字段有几个,就有几个variable。
语法2 fetch cursor_name bulk collect into collect1,collect2,...[limit rows];
其中,collect指定接收游标结果的集合变量,这种语法9i后支持,比较耗内存。


显示游标(游标的四个属性):
%isopen:检测游标是否已经打开,已经打开则返回true。
%found:检测游标结果集是否存在数据,存在返回true。如果打开游标后没有使用fetch推进,则返回null.
%notfound:检测游标结果集是否不存在数据,不存在返回true。
%rowcount:返回到当前行为止已提取的实际行数。

关闭游标:close cursor_name;

http://blog.csdn.net/yuzongtao






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
游标Cursor)是一种数据库对象,可以用于对查询结果集进行遍历和操作。使用游标可以在程序中逐行处理查询结果,这在需要逐行处理大量数据时非常有用。 在 Oracle 中,游标可以通过以下步骤定义和使用: 1. 定义游标 定义游标需要使用 `DECLARE CURSOR` 语句,语法如下: ``` DECLARE cursor_name [IN | OUT | IN OUT] return_datatype; BEGIN ... END; ``` 其中,`cursor_name` 是游标的名称,`return_datatype` 是游标返回的结果集类型。 2. 打开游标 使用 `OPEN` 语句打开游标,语法如下: ``` OPEN cursor_name; ``` 3. 获取游标数据 使用 `FETCH` 语句获取游标中的数据,语法如下: ``` FETCH cursor_name INTO variable_name1 [, variable_name2 ...]; ``` 其中,`variable_name1`、`variable_name2` 等是变量名,用于存储游标中的数据。 4. 关闭游标 使用 `CLOSE` 语句关闭游标,语法如下: ``` CLOSE cursor_name; ``` 下面是一个示例,演示如何定义、打开、获取和关闭游标: ``` DECLARE CURSOR c_emp IS SELECT employee_id, first_name, last_name FROM employees; v_emp_id NUMBER; v_emp_first_name VARCHAR2(50); v_emp_last_name VARCHAR2(50); BEGIN OPEN c_emp; LOOP FETCH c_emp INTO v_emp_id, v_emp_first_name, v_emp_last_name; EXIT WHEN c_emp%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_emp_id || ' ' || v_emp_first_name || ' ' || v_emp_last_name); END LOOP; CLOSE c_emp; END; ``` 该示例定义了一个名为 `c_emp` 的游标,返回的结果集包含 `employee_id`、`first_name` 和 `last_name` 字段。然后打开游标、获取游标数据并输出,最后关闭游标

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值