zoukankan      html  css  js  c++  java
  • Oracle 存储过程调用返回游标的另一个存储过程。

    一个扩展存储过程调用另一个存储过程,示例:

    被调用存储过程:最后会返回一个游标,游标返回一个值。调用这个存储过程的存储过程同样需要获取它。

     procedure SearchBill       --根据到货单号查询所有行号
      (
         P_code   VARCHAR,
         P_UserCode varchar ,
         P_org      varchar,
         P_warehouse  varchar,
         p_movetype   varchar,
         p_billtype   varchar,
         p_note     varchar,
         p_isred    varchar2,
         p_exmovetype     varchar2,
         p_ReCursor0 out T_CURSOR
      )
      IS
      v_count    int;
    begin
    
        -------------------------------代码--------------------------
    
        open p_ReCursor0 for  SELECT v_count num FROM dual;
    
    end SearchBill   ;    

    在这个处理中,返回的结果是一个数字的游标。只有一行数据。

    因此我接收的时候,用一个int变量接收他。

    同时调用存储过程时候,需要定义一个游标变量用来传进去,返回的结果通过这个游标取的。

    CREATE OR REPLACE PACKAGE BODY ERP_IMIM_Grreqbill IS 
    
      procedure SearchBillEx 
      (
         P_code   VARCHAR,
         P_UserCode varchar ,
         P_org      varchar,
         P_warehouse  varchar,
         p_movetype   varchar,
         p_billtype   varchar,
         p_note     varchar,
         p_isred    varchar2,
         p_exmovetype     varchar2,
         p_ReCursor0 out T_CURSOR
      )
    
      IS  
         p_ReCursor1 T_Cursor;
         num int;
         
      begin
    
        SearchBill(P_code,P_UserCode,P_org,P_warehouse,p_movetype,p_billtype,p_note,p_isred,p_exmovetype,p_ReCursor1);
         
        FETCH p_ReCursor1 INTO num; //把游标获取的数据赋值给int类型变量。注意,对于有多行数据返回的游标,需要循环遍历游标,不能这样。
         
        open p_ReCursor0 for select num num from dual;//把这个结果同样返回出去。
    
      end SearchBillEx;

    另外对于接收的结果含有多行数据,各个字段不知道类型,但是有一个对应的表查询的SQL的游标,行的字段对应类型可以统一用一个变量定义。

    先设置一个字段相对应的游标,然后通过%rowtype设置类型。

    例子:

    -- 包头定义返回游标类型
    TYPE T_Cursor IS REF CURSOR;
    -- 包体存储过程里声明
    Declare
    p_ReCursor1 T_Cursor;

    --通过这种方式可以设置游标返回结果集各个字段的变量,类型。下面的p_ReRow1就可以直接通过p_ReRow1.字段名方式获取返回游标对应值。
    cursor Temp_Cursor1 is SELECT BatchID,BatchCode,DisabledDate,CAST(0 AS DECIMAL(20,8)) as Quantity FROM Batches WHERE 1=2;

    p_ReRow1 Temp_Cursor1
    %rowtype; -- 存储过内部调用其他存储过程并获取返回结果 ERP_IMBillInterFace.BatchHelpIss(p_CompanyID,p_OrgID,p_WarehouseID,row_cursor2.ChaintBatch,'','','','',p_MaterialID,'','','01','Z','', p_BatchNumCode,'','','','','',p_CurDate,'','1','0','1',p_IsLMGR,'10',p_MoveTypeID,(Case p_IsRed When '0' Then '2' Else '1' End), row_cursor2.BCF1,row_cursor2.BCF2,row_cursor2.BCF3,row_cursor2.BCF4,row_cursor2.BCF5,row_cursor2.BCF6,row_cursor2.BCF7,row_cursor2.BCF8, row_cursor2.BCF9,row_cursor2.BCF11,row_cursor2.BCF12,row_cursor2.BCF13,row_cursor2.BCF14,row_cursor2.BCF16,row_cursor2.BCF20, p_ReCursor1); Loop fetch p_ReCursor1 into p_ReRow1; exit when p_ReCursor1%notfound; insert into Temp_SaveData_TB(BatchID,BatchCode,DisabledDate,Quantity) values (p_ReRow1.BatchID,p_ReRow1.BatchCode,p_ReRow1.DisabledDate,p_ReRow1.Quantity); End Loop;
  • 相关阅读:
    用Python写一个简单的包
    一个可以查询汽车销量、阅读产业报告和资讯的网站
    Java报错原因汇总
    jvisualvm远程监控Tomcat
    Tomcat内存优化
    每天一个linux命令(41):ps命令
    linux grep命令
    show processlist结果筛选(转)
    微服务、SOA 和 API对比与分析
    Java远程通讯技术及原理分析
  • 原文地址:https://www.cnblogs.com/alsf/p/6993626.html
Copyright © 2011-2022 走看看