精华内容
下载资源
问答
  • 动态游标

    2010-03-10 11:52:00
    oracle动态游标1,带参数的游标 与存储过程和函数相似,可以将参数传递给游标并在查询中使用。这对于处理在某种条件下打开游标的情况非常有用。它的语法如下: CURSOR cursor_name[(parameter[,parameter],...)] IS ...

    oracle动态游标

    1,带参数的游标  
       
        与存储过程和函数相似,可以将参数传递给游标并在查询中使用。这对于处理在某种条件下打开游标的情况非常有用。它的语法如下:  
       
      CURSOR   cursor_name[(parameter[,parameter],...)]   IS   select_statement;    
       
        定义参数的语法如下:  
       
      Parameter_name   [IN]   data_type[{:=|DEFAULT}   value]    
       
        与存储过程不同的是,游标只能接受传递的值,而不能返回值。参数只定义数据类型,没有大小。    
       
        另外可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值。游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠。  
       
        在打开游标时给参数赋值,语法如下:  
       
      OPEN   cursor_name[value[,value]....];    
       
        参数值可以是文字或变量。  
       
        例:  
       
      DECALRE  
       
      CURSOR   c_dept   IS   SELECT   *   FROM   dept   ORDER   BY   deptno;  
      CURSOR   c_emp   (p_dept   VARACHAR2)   IS  
      SELECT   ename,salary  
      FROM   emp  
      WHERE   deptno=p_dept  
      ORDER   BY   ename  
      r_dept   DEPT%ROWTYPE;  
      v_ename   EMP.ENAME%TYPE;  
      v_salary   EMP.SALARY%TYPE;  
      v_tot_salary   EMP.SALARY%TYPE;  
       
      BEGIN  
       
      OPEN   c_dept;  
      LOOP  
      FETCH   c_dept   INTO   r_dept;  
      EXIT   WHEN   c_dept%NOTFOUND;  
      DBMS_OUTPUT.PUT_LINE('Department:'||   r_dept.deptno||'-'||r_dept.dname);  
      v_tot_salary:=0;  
      OPEN   c_emp(r_dept.deptno);  
      LOOP  
      FETCH   c_emp   INTO   v_ename,v_salary;  
      EXIT   WHEN   c_emp%NOTFOUND;  
      DBMS_OUTPUT.PUT_LINE('Name:'||   v_ename||'   salary:'||v_salary);  
      v_tot_salary:=v_tot_salary+v_salary;  
      END   LOOP;  
      CLOSE   c_emp;  
      DBMS_OUTPUT.PUT_LINE('Toltal   Salary   for   dept:'||   v_tot_salary);  
      END   LOOP;  
      CLOSE   c_dept;  
      END;    
    2. 字符串变量

    动态游标就是动态定义游标。  
      declare  
      type   t_sor   is   ref   cursor;  
      v_sor   t_sor;     --必需的,通过对象变量实现.  
      ...  
      begin    
      ..  
      end;  
      /

     

    给一个完整的例子:  
      create   or   replace   procedure   SP_CLEAR(V_TABLE   IN   STRING)   IS  
       
          TYPE   cur_type   IS   REF   CURSOR;  
          c_tab   cur_type;  
          v_str   STRING(2000);  
          v_tab   t_clear.wlbmc%TYPE;  
          v_sql   STRING(3000);  
       
       
      begin  
          --Get   table   from   v_table  
          --Reorder   these   tables  
          v_str:=upper(v_table);  
          v_str:=REPLACE(v_str,',',''',''');  
          v_str:=''''||v_str||'''';  
          v_sql:='SELECT   WLBMC   FROM   T_CLEAR   WHERE   TRIM(WLBMC)   IN   ('||v_str||')   ORDER   BY   BZ   DESC';  
          OPEN   c_tab   FOR   v_sql;  
          LOOP  
              FETCH   c_tab   INTO   v_tab;  
              EXIT   WHEN   c_tab%NOTFOUND;  
              v_sql:='delete   from   '||v_tab||'';  
              EXECUTE   IMMEDIATE   v_sql;      
          END   LOOP;        
          COMMIT;      
          --deal   with   exception    
          EXCEPTION    
              WHEN   OTHERS   THEN  
                    ROLLBACK;  
                    RAISE;  
      end   SP_CLEAR;  
      /   
     

    3.字符串变量例子2

    给你一个完整的例子:  
      DECLARE  
            TYPE   EmpCurTyp   IS   REF   CURSOR;  
            emp_cv       EmpCurTyp;  
            emp_rec     emp%ROWTYPE;  
            sql_stmt   VARCHAR2(200);  
            my_job       VARCHAR2(15)   :=   'CLERK';  
      BEGIN  
            sql_stmt   :=   'SELECT   *   FROM   emp   WHERE   job   =   :j';  
            OPEN   emp_cv   FOR   sql_stmt   USING   my_job;  
            LOOP  
                  FETCH   emp_cv   INTO   emp_rec;  
                  EXIT   WHEN   emp_cv%NOTFOUND;  
                  --   process   record  
            END   LOOP;  
            CLOSE   emp_cv;  
      END;   

     

     

    带输入参数的动态游标的实例

     

     

    from: http://war-martin.javaeye.com/blog/319608 

    展开全文
  • 1、简单的来说:强类型的动态游标是指带有return返回语句的,而弱类型的动态游标是指不带return语句的(也即,弱类型的动态游标可以与任何查询语句匹配,但是强类型的动态游标只能与特定的查询语句匹配。) 2、个人...
    1、简单的来说:强类型的动态游标是指带有return返回语句的,而弱类型的动态游标是指不带return语句的(也即,弱类型的动态游标可以与任何查询语句匹配,但是强类型的动态游标只能与特定的查询语句匹配。)
    
    2、个人理解:强类型的有点像java中使用了泛型一样对其进行了限制,而弱类型的就像object类型。
    3、弱类型的动态游标使用示例:
    --根据用户的不同输入来打印(custom、salerecord)信息
    declare
    type ruoleixing is ref cursor;              --定义一个动态游标类型(弱)
    ruoref ruoleixing; --申明游标

    e_custom custom%rowtype;
    --声明变量接收查询出来的结果
    e_salerecordsalerecord%rowtype;

    receiver varchar2(1) :=upper(substr('&input',1,1));--定义变量接收用户的输入(其中的&input主要就要个&,input是随便取就行)

    (其中的upper,substr分别表示将接收到的用户输入转换为大写和截取用户输入的第一个字母,注:在接收用户输入的时候如果是字符串信息得用单引号括起来即:'&input'否则会报错!)

    begin

    --判断用户的输入并进行相应的输出
    if (receiver = 'C') then

    open ruoref for --打开游标
    select * from custom;
    loop --循环提取游标中的数据
    fetch ruoref into e_custom;
    exit when ruoref%notfound;
    dbms_output.put_line(e_custom.name || ''|| e_custom.levels); --注:别混了oracle中字符串的拼接是使用 concat 或 ||;e_custom.name || ' '||e_custom.levels中的name、levels均是custom表中的字段名
    end loop;
    elsif (receiver = 'S') then

    open ruoref for
    select * from salerecord;

    loop
    fetch ruoref intoe_salerecord;

    exit when ruoref%notfound;

    dbms_output.put_line(e_salerecord.totalmoney);--e_salerecord.money中的totalmoney是salerecord表中的一个字段名
    end loop;

    else
    dbms_output.put_line('请输入C或S!');
    return; --return表示退出此次操作

    end if;
    close ruoref; --注意要及时的关闭游标

    end;

    展开全文
  • mysql动态游标示例,通过准备语句、视图和静态游标实现,大家参考使用吧
  • 文章目录游标静态游标和动态游标静态游标demo动态游标demo总结 游标 简述:存储过程代码中从表中检索出结果集进行操作交互。 静态游标和动态游标 静态游标:程序执行的时候不需要再去解析sql语言,对于sql语句的解析...

    游标

    简述:存储过程代码中从表中检索出结果集进行操作交互。

    静态游标和动态游标

    静态游标:程序执行的时候不需要再去解析sql语言,对于sql语句的解析在编译的时候就可以完成
    动态游标:含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成
    测试表的BONUS1数据:
    在这里插入图片描述

    静态游标demo

    静态游标:查询BONUS1表中的所有数据
    这里可以看到sql写在定义游标的时候,编译时完成查询。

    create or replace procedure curor is
    cursor v_check_names is select ENAME from BONUS1;
    v_ENAME BONUS1.ENAME%type;
    begin
        open v_check_names;
        loop
          fetch v_check_names into v_ENAME;
          exit when v_check_names%notfound;
          dbms_output.put_line(v_ENAME);
                
        end loop;
              
        close v_check_names;
    end curor;
    
    

    执行结果:
    在这里插入图片描述

    动态游标demo

    动态游标:查询BONUS1表3行数据
    这里可以看到动态游标会构造sql,带有参数。sql准备好以后再执行。

    create or replace procedure curor is
    type cur_get_index is ref cursor; --声明一个动态游标类型
    v_cur_get_index cur_get_index;  --声明一个动态游标变量
    
    v_count number:=3;
    v_ENAME varchar2(60);
    v_JOB varchar2(60);
    v_SAL varchar2(60);
    v_COMM varchar2(60);
    v_sql varchar2(60);
    
    begin
          v_sql := 'select * from BONUS1 where rownum <= '||v_count;
          dbms_output.put_line('ENAME----JOB----SAL----COMM');
          open v_cur_get_index for v_sql;    -- 打开游标,并且SQL执行结果存放到游标
          LOOP
              fetch v_cur_get_index into v_ENAME,v_JOB,v_SAL,v_COMM;
              exit when v_cur_get_index%notfound;  -- 退出循环
                        
              dbms_output.put_line(v_ENAME||'----'||v_JOB||'----'||v_SAL||'----'||v_COMM);
    
          END LOOP; -- 游标结束
    end curor;
    

    执行结果:
    在这里插入图片描述

    总结

    静态游标:在定义的时候指明sql语句,编译时候执行。效率高。
    动态游标:可以带有参数,编写sql处理各种复杂的业务场景。更灵活。

    推荐博文:存储过程静态游标、隐式游标、显式游标、动态游标、游标遍历

    展开全文
  • 今天写了个动态游标 使用传入参数关于游标分类以及用法:http://hi.baidu.com/edeed/blog/item/725749540ee73651574e006a.html思路就是先拼好SQL 然后开动态游标ORALCE10G也支持正则表达式 呵呵 刚刚好可以实现动态...

    今天写了个动态游标 使用传入参数

    关于游标分类以及用法:http://hi.baidu.com/edeed/blog/item/725749540ee73651574e006a.html

    思路就是先拼好SQL 然后开动态游标

    ORALCE10G也支持正则表达式 呵呵 刚刚好可以实现动态传入参数

    procedure TJ_PDA_TESTDATA(v_indicator in varchar) is

    type rc is ref cursor;

    l_cursor     rc;

    l_sqlstr     varchar(2000);

    l_sqlstr_new varchar(2000);

    l_raw_use    raw_pda_testdata_tj%rowtype;

    l_date       varchar(20);

    begin

    select to_char(sysdate, 'YYYY-MM-DD') into l_date FROM DUAL;

    l_sqlstr := 'select a.region_id,

    sum(count) totle,

    ''$v_date'' creatdate,

    ''$v_indicator'' indicator,

    sum(case lev  when 1 then count else 0 end) lev1,

    sum(case lev  when 2 then count else 0 end) lev2,

    sum(case lev  when 3 then count else 0 end) lev3,

    sum(case lev  when 4 then count else 0 end) lev4,

    sum(case lev  when 5 then count else 0 end) lev5,

    sum(case lev  when 6 then count else 0 end) lev6

    from (select zhiju_id region_id, $v_indicator lev, count(1) count

    from raw_pda_testdata_use t

    where creatdate like ''$v_date%''

    and zhiju_id != ''-1''

    group by zhiju_id, $v_indicator) a

    group by region_id';

    SELECT REGEXP_REPLACE(l_sqlstr, '\$v_date', l_date) into l_sqlstr FROM dual;

    SELECT REGEXP_REPLACE(l_sqlstr, '\$v_indicator', v_indicator) into l_sqlstr_new  FROM dual;

    open l_cursor for l_sqlstr;

    loop

    fetch l_cursor

    into l_raw_use;

    exit when l_cursor%notfound;

    begin

    insert into raw_pda_testdata_tj

    values

    (l_raw_use.region_id,

    l_raw_use.creatdate,

    l_raw_use.indicator,

    l_raw_use.totle,

    l_raw_use.lev1,

    l_raw_use.lev2,

    l_raw_use.lev3,

    l_raw_use.lev4,

    l_raw_use.lev5,

    l_raw_use.lev6);

    commit;

    EXCEPTION

    WHEN others THEN

    rollback;

    end;

    end loop;

    close l_cursor;

    EXCEPTION

    WHEN others THEN

    null;

    END; -- Procedure

    展开全文
  • 文章目录游标静态游标和动态游标静态游标demo动态游标demo总结游标简述:存储过程代码中从表中检索出结果集进行操作交互。静态游标和动态游标静态游标:程序执行的时候不需要再去解析sql语言,对于sql语句的解析在...
  • 前言我们在写Oracle的存储过程里面,经常会用到游标,Oracle里面的游标分为静态游标和动态游标。今天我们在说一下分别有什么不同。静态游标和动态游标的概念静态游标显式游标和隐式游标称...
  • ORACLE 动态游标的使用

    2020-06-23 15:15:25
    动态游标可以遍历动态的表, 格式: TYPE 游标类型 IS REF CURSOR; --定义一个动态游标 游标名 游标类型; 如果查询的表的数据不同的,动态变化的,这时候可以用动态游标。 需要注意的是,动态游标的定义, ...
  • 动态游标:游标在声明时没有设定,在打开时可以对其进行修改。分为强类型游标和弱类型游标。 ----------强类型动态游标:在声明变量时使用return关键字定义游标的返回类型 ----------弱类型动态游标:在声明变量时...
  • Oracle-cursor动态游标

    2018-12-09 15:44:53
    动态游标 语法 type 动态游标类型名 is ref cursor; ---- 声明一个动态游标类型,紫色填写一样内容 游标名 动态游标类型; ---- 声明一个动态游标类型的变量,这个变量就是动态游标类型的,也就是动态游标 open ...
  • oracle动态游标简介

    2018-12-19 14:31:57
    动态游标:游标在声明时没有设定,在打开时可以对其进行修改。分为强类型游标和弱类型游标。 强类型动态游标:在声明变量时使用return关键字定义游标的返回类型 。弱类型动态游标:在声明变量时不使用return关键字...
  • Oracle动态游标

    2018-04-28 14:28:00
    (一)强类型动态游标1 定义强类型动态游标是指,在游标使用之前,虽未指定游标的查询定义,但是游标的类型已经确定。2 语法type 游标类型 is ref cursor return 记录类型3 应用场景、用户想在表dept中查看Beijing这...
  • Oracle动态游标实现动态SQL循环遍历

    万次阅读 2018-08-09 17:02:07
    动态游标可以遍历动态的表, 格式: TYPE 游标类型 IS REF CURSOR; --定义一个动态游标 游标名 游标类型; 如果查询的表的数据不同的,动态变化的,这时候可以用动态游标。 需要注意的是,动态游标的定义, 在...
  • --动态sql和动态游标 declare cnt number; begin execute immediate--动态sql和动态游标declarecnt number;beginexecute immediate'select count(*) from emp'into cnt;dbms_output.put_line(cnt);end;--创建存储...
  • Oracle REF动态游标

    2017-05-17 16:46:06
    REF动态游标被用于处理多行的查询结果集 在同一个PLSQL块当中,REF动态游标不同于特定的查询绑定 打开游标时才绑定,所以通常用于查询语句需要运行时动态确定的情况 使用动态游标的步骤: 先定义一...
  • -- 建立测试表和数据create table webuser (username varchar(10));insert into webuser values ('a1'),('a2'),('a3'),('b1'),('b2'),('b3');commit;-- 建立存储过程drop procedure if exists dynamic_cursor;...
  • mysql动态游标学习代码如下:-- 建立测试表和数据createtablewebuser(usernamevarchar(10));insertintowebuservalues('a1'),('a2'),('a3'),('b1'),('b2'),('b3');commit;-- 建立存储过程dropprocedureifexistsdynamic...
  • oracle动态游标

    2014-12-25 17:24:46
    oracle动态游标  无论显式还是隐式游标,获取记录集的查询定义在游标使用前必须确定。定义在整个生命周期内不可以修改,被叫作静态游标。 动态游标是指,在游标声明时,不指定其查询定义,而是在游标打开时...
  • 1、什么是静态游标与动态游标  静态游标是以游标打开时刻的当时状态显示结果集的游标。静态游标在游标打开时不反映对基础数据进行的更新、删除或插入。有时称它们为快照游标。动态游标是可以在游标打开时反映对...
  • 以上第二个游标属于模拟动态, 第二种方式: MySQL本身是不支持动态游标的,但可以通过(准备语句+视图+静态游标)的方法来近似实现。 参考: 说明: 游标循环 查询和更新是很慢的一件事情 第一层层循环200 第二层...
  • Oracle动态游标的使用----定义TYPE cursor_type IS REF CURSOR;c1 cursor_type;----使用--打开动态游标,再往下就都一样了OPEN c1 FOR sql2;LOOPFETCH c1INTO r_c1;EXIT WHEN c1%NOTFOUND;END LOOP;实例1、SQL...
  • Oracle使用REF 动态游标

    2016-11-10 17:29:50
    打开REF动态游标OPEN <游标名> FOR <查询语句>2:REF动态游标的分类 主要分为两类,强类型和弱类型的,强类型的为带有RETURN语句的REF动态游标,弱类型为不带有RETURN语句的REF动态游标,弱类型的动态游标可以与任何...
  • 动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成。从这个角度来说,静态游标的效率也比动态游标更高一些。 静态游标又分为显式游标和隐式游标:简单来说静态游标,在程序执行的时候,就已经...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,829
精华内容 731
关键字:

动态游标