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;
  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/alsf/p/6993626.html
Copyright © 2011-2022 走看看