精华内容
下载资源
问答
  • oracle存储过程cursor

    2016-06-13 13:53:20
    oracle存储过程cursor
    /*遍历gws_payment_notice表,根据Wfr_No查询gws_write_off_record
    
    根据gws_write_off_record的source_id查询gws_payment_notice_detail,
    如果不存在,则对gws_payment_notice_detail作添加操作,对gws_payment_notice作更新操作*/
    create or replace procedure proc_init_paymentNotice as


      CURSOR c_paymentNotice is
        select * from gws_payment_notice t_pn where t_pn.is_deleted = 'n';
      /*付款通知单记录变量*/
      r_paymentNotice gws_payment_notice%rowtype;
      /*核销记录变量*/
      c_wfr gws_write_off_record%rowtype;


      /*根据sourceid查询gws_payment_notice_detail记录数*/
      i_num number(10) := 0;


    begin


      OPEN c_paymentNotice;


      LOOP
        fetch c_paymentNotice
          into r_paymentNotice;
      
        exit when c_paymentNotice%notfound;
      
        begin
          select *
            into c_wfr
            from gws_write_off_record t_wfr
           where t_wfr.wfr_no = r_paymentNotice.Wfr_No;
        
          /*查询是否已存在gws_payment_notice_detail*/
          select count(1)
            into i_num
            from gws_payment_notice_detail t
           where t.source_id = c_wfr.source_id;
        
          /*不存在gws_payment_notice_detail,才作添加,更新操作*/
          if i_num = 0 then
            /*添加gws_payment_notice_detail表*/
            insert into gws_payment_notice_detail
              (ID,
               GMT_CREATE,
               GMT_MODIFIED,
               PAYMENT_NOTICE_ID,
               SOURCE_ID,
               AMOUNT,
               UN_EXCHANGE_AMOUNT,
               CREATOR,
               MODIFIER,
               IS_DELETED)
            values
              (seq_gws_payment_notice_detail.nextval,
               sysdate,
               sysdate,
               r_paymentNotice.ID,
               c_wfr.source_id,
               r_paymentNotice.Amount,
               r_paymentNotice.Un_Exchange_Gain_Loss,
               'wb_cj189958',
               'wb_cj189958',
               'n');
          
            /*更新paymentNotice表*/
            update gws_payment_notice
               set exchange_date = c_wfr.exchange_date,
                   exchange_type = c_wfr.exchange_type,
                   exchange_rate = c_wfr.exchange_rate,
                   source_type   = c_wfr.source_type,
                   gmt_modified  = sysdate,
                   modifier      = 'wb_cj189958'
             where ID = r_paymentNotice.ID;
          end if;
        exception
          when no_data_found then
            dbms_output.put_line('未查到核销记录,wfr_no='||r_paymentNotice.Wfr_No);
          
          when too_many_rows then
            dbms_output.put_line('查到多条核销记录,wfr_no='||r_paymentNotice.Wfr_No);
          
          when others then
            dbms_output.put_line('系统异常');
          
        end;
      END LOOP;
      close c_paymentNotice;


      begin
        commit; /*提交*/
        dbms_output.put_line('存储过程执行成功');
      exception
        when others then
          rollback; /*回滚*/
          dbms_output.put_line('存储过程执行失败');
      end;


    end proc_init_paymentNotice;
    展开全文
  • Oracle存储过程、游标、函数的详解
  • oracle存储过程 cursor使用

    千次阅读 2013-03-14 09:50:38
    范例: create or replace procedure test is v_count number(4);... cursor v_c is select * from "t2VoucherHandNo"; begin select count(*) into v_count from "t2VoucherHandNo"; if

    范例:

    create or replace procedure test is 
        v_count number(4); 
       
       cursor v_c is 
       select * from "t2VoucherHandNo"; 
       begin 
      
      select count(*) into v_count from "t2VoucherHandNo"; 
       if v_count>1 then 
      raise too_many_rows; 
      else 
      for my_v in v_c 
      loop 
      dbms_output.put_line(my_v.FNO); 
      end loop; 
      end if; 
    end; 

    oracle 存储过程的基本语法 

    1.基本结构 
    CREATE OR REPLACE PROCEDURE 存储过程名字 

        参数1 IN NUMBER, 
        参数2 IN NUMBER 
    ) IS 
    变量1 INTEGER :=0; 
    变量2 DATE; 
    BEGIN 

    END 存储过程名字 


    2.SELECT INTO STATEMENT 
      将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条 
      记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) 
      例子: 
      BEGIN 
      SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; 
      EXCEPTION 
      WHEN NO_DATA_FOUND THEN 
          xxxx; 
      END; 
      ... 

    3.IF 判断 
      IF V_TEST=1 THEN 
        BEGIN 
           do something 
        END; 
      END IF; 

    4.while 循环 
      WHILE V_TEST=1 LOOP 
      BEGIN 
    XXXX 
      END; 
      END LOOP; 

    5.变量赋值 
      V_TEST := 123; 

    6.用for in 使用cursor 
      ... 
      IS 
      CURSOR cur IS SELECT * FROM xxx; 
      BEGIN 
    FOR cur_result in cur LOOP 
      BEGIN 
       V_SUM :=cur_result.列名1+cur_result.列名2 
      END; 
    END LOOP; 
      END; 

    7.带参数的cursor 
      CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID; 
      OPEN C_USER(变量值); 
      LOOP 
    FETCH C_USER INTO V_NAME; 
    EXIT FETCH C_USER%NOTFOUND; 
        do something 
      END LOOP; 
      CLOSE C_USER; 

    8.用pl/sql developer debug 
      连接数据库后建立一个Test WINDOW 
      在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试 






    展开全文
  • cursor 与refcursor及sys_refcursor的区别 (转载) 2015年11月27日 15:16:19 cherish1forever 阅读数:2143 引用 一、显式cursor  显式是相对与隐式cursor而言的,就是有一个明确的声明的cursor。显式游标的...

     

    cursor 与refcursor及sys_refcursor的区别 (转载)

    2015年11月27日 15:16:19 cherish1forever 阅读数:2143

    引用

    一、显式cursor 

    显式是相对与隐式cursor而言的,就是有一个明确的声明的cursor。显式游标的声明类似如下(详细的语法参加plsql ref doc ): 

    cursor cursor_name (parameter list) is select ... 

    游标从declare、open、fetch、close是一个完整的生命旅程。当然了一个这样的游标是可以被多次open进行使用的,显式cursor是静态cursor,她的作用域是全局的,但也必须明白,静态cursor也只有pl/sql代码才可以使用她。下面看一个简单的静态显式cursor的示例: 

    declare 
              cursor get_gsmno_cur (p_nettype in varchar2) is 
                 select gsmno 
                    from gsm_resource 
                    where nettype=p_nettype and status='0'; 
               v_gsmno gsm_resource.gsmno%type; 
            begin 
               open get_gsmno_cur('139'); 
               loop 
                    fetch get_gsmno_cur into v_gsmno; 
                    exit when get_gsmno_cur%notfound;        
                    dbms_output.put_line(v_gsmno); 
               end loop; 
               close emp_cur; 
               
               open get_gsmno_cur('138'); 
               loop 
                    fetch get_gsmno_cur into v_gsmno; 
                    exit when get_gsmno_cur%notfound;        
                    dbms_output.put_line(v_gsmno); 
               end loop; 
               close get_gsmno_cur; 
            end; 
            / 

    上面这段匿名块用来实现选号的功能,我们显式的定义了一个get_gsmno_cur,然后根据不同的号段输出当前系统中该号短对应的可用手机号码。当然了,实际应用中没人这么用的,我只是用来说应一个显式cursor的用法。

     

    引用

    二、隐式cursor 

    隐式cursor当然是相对于显式而言的,就是没有明确的cursor的declare。在Oracle的PL/SQL中,所有的DML操作都被Oracle内部解析为一个cursor名为SQL的隐式游标,只是对我们透明罢了。 

    另外,我们前面提到的一些循环操作中的指针for 循环,都是隐式cursor。  

    隐式cursor示例一: 

    CREATE TABLE zrp (str VARCHAR2(10)); 
            insert into zrp values ('ABCDEFG'); 
            insert into zrp values ('ABCXEFG'); 
            insert into zrp values ('ABCYEFG'); 
            insert into zrp values ('ABCDEFG'); 
            insert into zrp values ('ABCZEFG'); 
            COMMIT; 
            
            SQL> begin 
              2    update zrp SET str = 'updateD' where str like '%D%'; 
              3    ifSQL%ROWCOUNT= 0 then 
              4      insert into zrp values ('1111111'); 
              5    end if; 
              6 end; 
              7 / 
            
            PL/SQL procedure successfully completed 
            
            SQL> select * from zrp; 
            
            STR 
            ---------- 
            updateD 
            ABCXEFG 
            ABCYEFG 
            updateD 
            ABCZEFG 
            
            SQL> 
            SQL> begin 
              2    update zrp SET str = 'updateD' where str like '%S%'; 
              3    ifSQL%ROWCOUNT= 0 THEN 
              4      insert into zrp values ('0000000'); 
              5    end if; 
              6 end; 
              7 / 
            
            PL/SQL procedure successfully completed 
            
            SQL> select * from zrp; 
            
            STR 
            ---------- 
            updateD 
            ABCXEFG 
            ABCYEFG 
            updateD 
            ABCZEFG 
            0000000 
           6 rows selected 
            
            SQL> 

    隐式cursor示例二: 

    begin 
              for rec in (select gsmno,status from gsm_resource) loop 
                  dbms_output.put_line(rec.gsmno||'--'||rec.status); 
              end loop; 
            end; 
            /

     

    引用

    三、REFcursor 

    Ref cursor属于动态cursor(直到运行时才知道这条查询)。 

    从技术上讲,在最基本的层次静态cursor和ref cursor是相同的。一个典型的PL/SQL光标按定义是静态的。Ref光标正好相反,可以动态地打开,或者利用一组SQL静态语句来打开,选择哪种方法由逻辑确定(一个IF/THEN/ELSE代码块将打开一个或其它的查询)。例如,下面的代码块显示一个典型的静态SQL光标,光标C。此外,还显示了如何通过使用动态SQL或静态SQL来用ref光标(在本例中为L_CURSOR)来打开一个查询: 

    Declare 
          type rc is ref cursor; 
          cursor c is select * from dual; 
          
          l_cursor rc; 
        begin 
          if (to_char(sysdate,'dd') = 30) then 
              -- ref cursor with dynamic sql 
              open l_cursor for 'select * from emp'; 
          elsif (to_char(sysdate,'dd') = 29) then 
              -- ref cursor with static sql 
              open l_cursor for select * from dept; 
          else 
               -- with ref cursor with static sql 
               open l_cursor for select * from dual; 
          end if; 
          -- the "normal" static cursor 
          open c; 
        end; 
        / 

    在这段代码块中,可以看到了最显而易见的区别:无论运行多少次该代码块,光标C总是select * from dual。相反,ref光标可以是任何结果集,因为"select * from emp"字符串可以用实际上包含任何查询的变量来代替。 

    在上面的代码中,声明了一个弱类型的REF cursor,下面再看一个强类型(受限)的REF cursor,这种类型的REF cursor在实际的应用系统中用的也是比较多的。 

    create table gsm_resource 
        ( 
          gsmno varchar2(11), 
          status varchar2(1), 
          price number(8,2), 
          store_id varchar2(32) 
        ); 
        insert into gsm_resource values('13905310001','0',200.00,'SD.JN.01'); 
        insert into gsm_resource values('13905312002','0',800.00,'SD.JN.02'); 
        insert into gsm_resource values('13905315005','1',500.00,'SD.JN.01'); 
        insert into gsm_resource values('13905316006','0',900.00,'SD.JN.03'); 
        commit; 
        
        SQL> declare 
          2     type gsm_rec is record( 
          3          gsmno varchar2(11), 
          4          status varchar2(1), 
          5          price number(8,2)); 
          6 
          7     type app_ref_cur_type is ref cursor return gsm_rec; 
          8     my_cur app_ref_cur_type; 
          9     my_rec gsm_rec; 
         10 
         11 begin 
         12     open my_cur for select gsmno,status,price 
         13          from gsm_resource 
         14          where store_id='SD.JN.01'; 
         15     fetch my_cur into my_rec; 
         16     while my_cur%found loop 
         17           dbms_output.put_line(my_rec.gsmno||'#'||my_rec.status||'#'||my_rec.price); 
         18           fetch my_cur into my_rec; 
         19     end loop; 
         20     close my_cur; 
         21 end; 
         22 / 
        
        13905310001#0#200 
        13905315005#1#500 
        
        PL/SQL procedure successfully completed 
        
        SQL> 

    普通cursor与REF cursor还有一些大家应该都熟悉的区别,我再浪费点唾沫。 

    1)PL/SQL静态光标不能返回到客户端,只有PL/SQL才能利用它。ref光标能够被返回到客户端,这就是从Oracle的存储过程返回结果集的方式。 

    2)PL/SQL静态光标可以是全局的,而ref光标则不是。 也就是说,不能在包说明或包体中的过程或函数之外定义ref光标。 只能在定义ref光标的过程中处理它,或返回到客户端应用程序。 

    3)ref光标可以从子例程传递到子例程,而光标则不能。 为了共享静态光标,必须在包说明或包体中把它定义为全局光标。 因为使用全局变量通常不是一种很好的编码习惯,因此可以用ref光标来共享PL/SQL中的光标,无需混合使用全局变量。 

    最后,使用静态光标--通过静态SQL(但不用ref光标)--比使用ref光标效率高,而ref光标的使用仅限于以下几种情况: 

    把结果集返回给客户端; 
    在多个子例程之间共享光标(实际上与上面提到的一点非常类似); 
    没有其他有效的方法来达到你的目标时,则使用ref光标,正如必须用动态SQL时那样; 

    简言之,首先考虑使用静态SQL,只有绝对必须使用ref光标时才使用ref光标,也有人建议尽量使用隐式游标,避免编写附加的游标控制代码(声明,打开,获取,关闭),也不需要声明变量来保存从游标中获取的数据。这个就因人因具体的case大家去酌定吧。 

    四、游标属性 

    %FOUND: bool - TRUE if >1 row returned 
    %NOTFOUND:bool - TRUE if 0 rows returned 
    %ISOPEN: bool - TRUE if cursor still open 
    %ROWCOUNT:int - number of rows affected by last SQL statement 

    注:NO_DATA_FOUND和%NOTFOUND的用法是有区别的,小结如下: 
    1)SELECT . . . INTO 语句触发 NO_DATA_FOUND; 
    2)当一个显式光标的 where 子句未找到时触发 %NOTFOUND; 
    3)当UPDATE或DELETE 语句的where 子句未找到时触发 SQL%NOTFOUND; 
    4)在光标的提取(Fetch)循环中要用 %NOTFOUND 或%FOUND 来确定循环的退出条件,不要用NO_DATA_FOUND

     

    引用

    五、sys_refcursor 

    sys_refcursor是oracle9i以后系统定义的一个refcursor,主要用在过程中返回结果集。 



    例: 

    SQL> conn scott/tiger@vongates 
    connected. 
    SQL> create or replace procedure getEmpByDept(in_deptNo in emp.deptno%type, 
    2 out_curEmp out SYS_REFCURSOR) as 

    4 begin 
    5 open out_curEmp for 
    6 SELECT * FROM emp WHERE deptno = in_deptNo ; 
    7 EXCEPTION 
    8 WHEN OTHERS THEN 
    9 RAISE_APPLICATION_ERROR(-20101, 
    10 'Error in getEmpByDept' || SQLCODE ); 
    12 end getEmpByDept; 
    13 / 

    已建立程序. 

    SQL> var rset refcursor; 
    SQL> exec getEmpByDept(10,:rset); 

    PL/SQL 程序順利完成. 

    SQL> print rset;

    原文链接:点击打开链接

    https://blog.csdn.net/cherish1forever/article/details/50070557

     

     

    展开全文
  • oracle存储过程----游标(cursor)的学习

    万次阅读 多人点赞 2018-08-13 15:43:10
    oracle存储过程—-存储过程游标(cursor)、遍历的使用方法   今天又学了一个新的概念Cursor ,即游标。   接上一篇,oracle存储过程—-存储过程执行简单的增删改查sql ,上一篇中,写到存储过程的查询sql ,...

    oracle存储过程—-游标(cursor)的学习

      今天又学了一个新的概念Cursor ,即游标。
      接上一篇,oracle存储过程—-存储过程执行简单的增删改查sql ,上一篇中,写到存储过程的查询sql ,当时在写到查询的时候,忽然不知道怎么对查询结果是多条的数据,如何操作遍历呢。

    游标(Cursor)的定义与作用

      游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
      不过我是新手,我理解的是,游标就像我们查询数据返回的集合类型,比如List ,我就把它当做一个引用类型,它指向了内存区域中的数据结果集

    游标(Cursor)的应用场景

      就以我现在理解的来说,游标既然像查询结果集list ,那使用cursor 的情况,肯定会有下边这两种情况,才可能使用到cursor

    1. 需要依据查询到的结果集,作为条件,进行下一步的查询。
    2. 需要在结果集某个位置上,满足某种条件时,对数据进行不同的修改。
    游标(Cursor)的使用考虑

      上边的两种情况,都会涉及到遍历数据(存储过程 里如何遍历数据,下一篇再写),所以游标的使用也需要注意:

    • 比如,你的查询结果集很大,首先占了很多的内存,其次,遍历这么庞大的结果集,效率也肯定高不了。
    • 另外,如果还有其他方式解决问题的话,那就不要选择使用游标(网上搜来的),我没测试过效率,但是游标在使用中,的确有,定义游标、打开游标、关闭游标,这些操作,这样也肯定快不了多少。
    游标(Cursor)的类别

      游标有两种,显示游标隐式游标

    隐式游标
      上一篇中用到的SELECT…INTO…查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。
    DML操作和单行SELECT语句会使用隐式游标,它们是:

    • 插入操作:INSERT。
    • 更新操作:UPDATE。
    • 删除操作:DELETE。
    • 单行查询操作:SELECT … INTO …。

      (2018-08-19补充)当然,隐式游标还有一种写法,如下,并没有定义游标:

    create or replace procedure test_cryptic_procedure
    as
    begin
    for cryptic_rec in (
      select * from ly_ds
    )
    loop
    dbms_output.put_line('名称:'||cryptic_rec.ly_mc||' 年龄:'||cryptic_rec.ly_nl);
    end loop;
    end;
    

      如下方式执行:

    set serveroutput on;
    begin
     test_cryptic_procedure;
    end;

      将会看到如下的结果:

    匿名块已完成
    名称:eee 年龄:23
    名称:王五 年龄:22
    名称:赵六六 年龄:29
    名称:李四 年龄:20
    

      提示一下:因为隐式游标默认打开游标,但是如果调用%ISOPEN 却返回false 。这个注意一下,如果还没懂%ISOPEN 啥意思,那暂且不要管这个提示了。

    显式游标
      显示游标还分为静态游标动态游标 。显示游标的写法会在存储过程中定义Cursor ,并且一般都有固定的四个步骤:声明游标打开游标提取数据关闭游标 。显式游标打开后,必须显式地关闭。游标一旦关闭,游标占用的资源就被释放,游标变成无效,必须重新打开才能使用。
      隐式游标其实默认已经打开游标,并在执行完成后关闭游标释放资源。
     &ems;如果你想详细了解一下游标的概念 ,我是参考了下边这两篇文章:

    游标(Cursor)的例子

      下边是我学习后写的第一个游标的例子。不像上边那个隐式游标的例子连游标都没有定义,下边这个是定义了游标,但是没有去打开,for 循环会默认打开游标的。

    create or replace procedure test_select3_procedure
    (sex  varchar)
    AS
    --游标的定义
    Cursor test_cursor is
    select id,ly_mc,LY_NB,ly_nl from ly_ds where LY_NB=sex;
    cur test_cursor%rowtype;  --游标的类型,我理解类似于list的泛型
    BEGIN
    for cur in test_cursor loop
    exit when test_cursor%notfound;
    dbms_output.put_line('数据是:'||cur.id||'_'||cur.ly_mc||'_'||cur.LY_NB||'_'||cur.ly_nl);
    end loop;
    END;

      上边,首先看Cursor test_cursor is 这一行,它的意思是定义一个游标,test_cursor 为你要定义的名字,而is 后边是一个sql,也就是说当前这个sql的查询结果,赋值给游标test_cursor
      然后,往下,接着cur test_cursor%rowtype ,这个是定义了一个类型,而这个类型,即是游标test_cursor 的返回结果类型,类型的名字为cur 。有点类似于java语言List 集合中的一个泛型
      另外,关于for 是一个循环的写法,for cur in test_cursor ,即,从游标test_cursor 中取出一个结果cur
      还有,注意,loopend loop 这是一个循环的开始标志和结束标志,但它俩兄弟是一个很执着的循环,如果没有定义退出条件,永远不会退出的,所以在上边的循环里边,有了退出条件exit when test_cursor%notfound; ,即当游标test_cursor 中没有数据了,就退出循环。
      当然loop 循环的退出,发生下边的情况,才能退出:

    1. 有exit,并满足条件后退出。
    2. loop中抛出了异常。
    3. 存在goto 标识。

      最后,可能大家注意到,上边并没有显示游标中一定有的四个步骤,
    声明游标打开游标提取数据关闭游标 ,那是因为for 循环这样的遍历会自动给我们打开游标,并在结束后关闭游标,下边会学习其他的遍历方法,但是都没有for 这样智能,所以觉得for 循环游标,是个很好的选择。

      执行上边的存储过程:
    set serveroutput on;
    execute test_select3_procedure('女');

      会得到如下的遍历结果,正是我根据条件查询到的结果集。

    PROCEDURE TEST_SELECT3_PROCEDURE 已编译
    匿名块已完成
    数据是:2_王五_女_22
    数据是:3_赵六六_女_29
    数据是:4_李四_女_20

      下一篇oracle存储过程—-遍历游标的方法(for、fetch、while)

    展开全文
  • 参考资料:这里写链接内容一 概念游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。... 二 类型Cursor类型包含三种: 隐式Cursor,显式Cursor和Ref Cu
  • Oracle存储过程、游标、循环

    千次阅读 2019-03-01 17:19:43
    创建存储过程,如果存在就进行替换:create or replace procedure CRM_Sort_LgcAsset is 定义变量:supassortmentstr1 VARCHAR(1000); 定义游标:CURSOR RS IS select id,supassortmentid,supassortmentstr from ...
  • 第一种情况是返回的游标是某个具体的表或视图的数据,如: SQL-Code: 代码如下: CREATE OR REPLACE PROCEDURE P_TESTA ( PRESULT OUT SYS_REFCURSOR ) AS BEGIN OPEN PRESULT FOR SELECT * FROM USERS; END P_TESTA;...
  • package com.lance.util; import java.sql.*; ...import oracle.jdbc.OracleTypes; public class QueryProc { public void callOracleStoredProcCURSORParameter() throws SQLException { Connect
  • 存储过程创建数据表:创建时注意必须添加authid current_user,如果创建的表已存在,存储过程继续执行,但如不不加此关键语句,存储过程将出现异常,这个语句相当于赋权限。例1创建语句如下: 代码如下:create or ...
  • 本文实例讲述了Oracle存储过程游标用法。分享给大家供大家参考,具体如下: 使用游标的5个步骤 1、声明一些变量用于保存select语句返回的指 2、声明游标,并指定select 语句 3、打开游标 4、从游标中获取记录 5、...
  • 不多说了,本文通过两种方法介绍asp.net中调用oracle存储过程的方法,具体内容请看下面代码。 调用oracle存储过程方法一: ORACLE代码 CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR
  • Oracle存储过程cursor + with用法

    千次阅读 2019-09-18 10:01:47
    CREATE or replace PROCEDURE XXXXX ( C1 OUT SYS_REFCURSOR) AS BEGIN open C1 FOR WITH PRJ_REL AS( select 。。。 ), dpt_info as ( select 。。。 ) SELECT 。。。 END; ...
  • procedure PRO_PG_RUN(new_time in VARCHAR2) --测试设备运行存储过程 as monitoring_time DATE; noExistent1 VARCHAR2(4); ---------游标模块 --重载设备 CURSOR CUR_OVERLOADING_DEVICE(monitoring_time DATE) IS ...
  • ORACLE存储过程

    万次阅读 多人点赞 2018-11-02 18:14:48
    oracle存储过程 目录 一.什么是存储过程 二.为什么要写存储过程 三.存储过程基础 1.存储过程结构 2.存储过程语法 3.pl/sql处理存储过程 四.存储过程进阶 1.BUIK COLLECT 2.FORALL 3.pl/sql调试存储过程 ...
  • Oracle存储过程游标for循环怎么写

    千次阅读 2018-05-18 10:34:00
    首先编写存储过程的整体结构,如下: create or replace procedure test_proc is v_date date; --变量定义 begin select sysdate into v_date from dual; end test_proc; 定义游标: create ...
  • java程序连接oracle数据库 连接 在我的服务器上有一个oracle实例是在运行的。 在plsql里可以查看到这个实例有个表叫fenye: 首先下载ojdbc.jar ,提取码:iehb 随便建立一个java项目: 添加JUnit4,把ojdbc包...
  • --oracle 存储过程返回数据集/游标简单实例(通过输出观察游标值)--1.创建测试库表creat table cs_dd(ddbz varchar2(32);zt varchar2(32));--2.往测试库表插入测试数据:insert into cs_dd(ddbz,zt) values ('a','1...
  • spring mybatis 调用oracle存储过程

    热门讨论 2012-09-13 17:07:49
    在已有的spring+mybatis 基本操作oracle数据库的基础上,增加了3个调用存储过程的例子:无返回值、返回结果集、返回多个结果,希望对大家能有所帮助
  • 摘要:主要记录了oracle的stored procedure相关知识、从定义到使用。从最简单的例子入手、逐渐深入。同时后面结合了ref cursor的使用。...用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行
  • create or replace procedure BUILDEMPLID(emp_cursor out sys_refcursor) is n_emplid number; n_emplid1 number; n_len number; r_cursor sys_refcursor; begin --UPDATE THE LAST ASSIGNMENT+1 IN TH...
  • java调用Oracle存储过程返回Cursor

    千次阅读 2017-09-14 10:14:14
    1.创建包 create or replace package pack1 is type test_cursor is ref cursor;...2.创建存储过程 create or replace procedure pro1(test_uNo in number,test_res out pack1.test_cursor) is begin open test
  • 有俩种方法: 一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为 in out 或out (1)声明个人系统游标.(推荐) 代码如下: create or replace p_temp_procedure ( cur_arg out sys_refcursor;...
  • Oracle存储过程及调用

    2020-12-16 01:18:05
    Oracle存储过程语法 Oracle的存储过程语法如下: create procedure 存储过程名称(随便取) is 在这里可以定义常量、变量、游标、复杂数据类型这里可以定义变量、常量 begin 执行部分 end; (2)带参数的存储...
  • 1.在存储过程中 定义游标;  以“cur_yjdl ”为例 create or replace procedure fnStat1399(p_params varchar2,  p_cursor1401 out sys_refcursor,  p_partId Integer ) is  NYDMJ varchar2(100);  JSYDMJ ...
  • Oracle存储过程

    2019-08-18 22:48:07
    存储过程: create or replace procedure ws_test ( strs in varchar2 ) as str varchar2 ( 20 ) ; cursor ybs is SELECT REGEXP_SUBSTR ( strs , '[^,]+' , 1 , rownum ) a from dual ...
  • Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,442
精华内容 13,776
关键字:

oracle存储过程cursor