存储过程使用动态游标一例

数据表结构如下;

SQL> desc record;
Name        Type         Nullable Default Comments
----------- ------------ -------- ------- --------
RECORD_GUID VARCHAR2(50) Y                        
DNIS        VARCHAR2(15) Y                        
ANI         VARCHAR2(15) Y                        
STARTTIME   DATE         Y                        
ENDTIME     DATE         Y                        
STAFFID     VARCHAR2(10) Y                        
AGENTID     VARCHAR2(10) Y                        
EXTENSION   VARCHAR2(20) Y

尝试显示指定电话和某年月份的电话记录,采用存储过程实现

create or replace procedure proc_getrecord(i_dnis in varchar2,
                                           i_time in varchar2)
/*
功能:查找某月电话记录
参数说明:i_dnis为主叫号码,i_time为某年月份(例如201401)
编写日期:2014.06.26
*/
as
sqlstr varchar2(5000);
begin
  declare
    type rc is ref cursor;
    c_rc rc;
    r_record record%rowtype;
  begin
   sqlstr:=‘select * from king.record where dnis =:1’||
           ‘ and replace(substr(starttime, 1, 7), ‘‘-‘‘, ‘‘‘‘)=:2‘;
   open c_rc for sqlstr using i_dnis,i_time;
   fetch c_rc into r_record;
   while c_rc%found loop
       dbms_output.put_line(
       ‘开始时间:‘||r_record.starttime||‘  ‘||
       ‘结束时间:‘||r_record.endtime||‘  ‘||
       ‘主叫号码:‘||r_record.dnis||‘  ‘||
       ‘被叫号码:‘||r_record.ani);
    fetch c_rc into r_record;
    end loop;
    close c_rc;
  end;
end;

存储过程使用动态游标一例

时间: 2024-10-11 11:11:11

存储过程使用动态游标一例的相关文章

『ORACLE』 PLSQL动态游标的使用(11g)

#静态游标指的是程序执行的时候不需要再去解析sql语言,对于sql语句的解析在编译的时候就可以完成的. 动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成. 从这个角度来说,静态游标的效率也比动态游标更高一些. #游标的相关概念: 定义: 游标它是一个服务器端的存储区,这个区域提供给用户使用,在这个区域里 存储的是用户通过一个查询语句得到的结果集,用户通过控制这个游标区域当中 的指针 来提取游标中的数据,然后来进行操作. 实质: 是用户在远程客户端上对服务器内存区域的操作

Oracle动态游标实现动态SQL循环遍历,和静态游标的比较。

动态游标可以遍历动态的表, 格式: TYPE 游标类型 IS REF CURSOR; --定义一个动态游标游标名 游标类型; 如果查询的表的数据不同的,动态变化的,这时候可以用动态游标. 需要注意的是,动态游标的定义, 在普通存储过程中:需要放在 is 后面的第一行. 动态游标通过:open 游标 for 字符串,形式使用,遍历. create or replace procedure P_TEST_SQL is TYPE ref_cursor_type IS REF CURSOR; --定义一

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理和自定义异常

游标的概念:    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁 盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率.游标有两种类型:显式游标和隐式游标.在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种 形式的查询和DML操作,系统都会使用一个隐式游标.但是如果要

关于mysql存储过程创建动态表名及参数处理

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近游戏开始第二次内测,开始处理操作日志,最开始把日志放到同一个表里面,发现一天时间,平均100玩家在线,操作记录就超过13万条,决定拆表,按照日期来保存日志,每天的日志存到一个表里面,然后定期把老的数据导出来备份后删掉. 具体思路是写日志的时候,根据当前的时间决定插入到当天的表里面,如表不存在则创建一个新的表,表名里面带上当天的日期.这就涉及到需要在存储过程里面动态创建一个跟日期相关的表.mysql不

Oracle异常处理,动态游标

小例子,方便以后查阅. 包头需要声明:   type C_CURSOR is ref cursor; procedure visitcount(in_date number, out_code out number, out_desc out varchar2 ) is t_date number(8); t_datepre number(8); t_sql varchar2(2000); t_tempcount number(8); c_data C_CURSOR; v_cityname va

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

Android漫游记(4)---.so文件动态调试一例

Android平台的动态调试一直以来是个困扰我等Coder的头疼问题,特别是对于本地的动态调试支持,可以说是"弱智"级别的,不知道Google的新版NDK和新出的Android Studio对这块支持如何,让我们拭目以待. 言归正传,我这里采用的是cygwin+ndk-gdb的调试模式,灵感来自于XDA的一篇博文(点击打开链接),平台和原文作者不同: 1.Win7 64 2.NDK r9d x86_64 3.Android 4.2.2 4.cygwin 64 5.IDA pro 6.1

MySQL在存储过程中使用游标

#在存储过程中使用游标 DROP TABLE IF EXISTS tbl; CREATE TABLE tbl( id INT NOT NULL AUTO_INCREMENT, title VARCHAR(50) NOT NULL, author VARCHAR(50) NOT NULL, PRIMARY KEY(id) ); DROP PROCEDURE IF EXISTS sp7; CREATE PROCEDURE sp7(INOUT rst VARCHAR(100), OUT rst_cod

存储过程里使用游标

游标中用到的函数,就是前一篇文章中创建的那个函数. 另外,为了方便使用,把游标放在存储过程中,这样就可以方便地直接使用存储过程来执行游标了 create procedure UpdateHKUNo    --存储过程里面放置游标asbegin declare UpdateHKUNoCursor cursor    --声明一个游标,查询满足条件的数据        for select psn_code from person where type='E' and hku_no is null