帆软报表调用oracle包

帆软报表调用包,返回的数组需要放到动态游标

1. 首先定义两个类型对象

CREATE OR REPLACE TYPE t_shipment_print as object(shipment_id    NUMBER,);

CREATE OR REPLACE TYPE t_shipment_prints IS TABLE OF t_shipment_print

2. 定义包

CREATE OR REPLACE PACKAGE fly_print_pkg IS
  TYPE g_result IS REF CURSOR;
  PROCEDURE get_shipment(x_result           OUT g_result,
                         cumtomer_po_number IN VARCHAR2);

END fly_print_pkg;

定义包体

 

CREATE OR REPLACE PACKAGE BODY fly_print_pkg IS
  PROCEDURE get_shipment(x_result           OUT g_result,
                         po_number IN VARCHAR2) IS
    l_seq NUMBER;
    v_shipments_table t_shipment_prints := t_shipment_prints();
    v_shipments       t_shipment_print := t_shipment_print(null);
    ---解料数据
    CURSOR cur_shipment_tbl(po_number_temp VARCHAR2) IS
      SELECT
             MIN(ooos.shipment_id) AS shipment_id
        FROM shipments ooos;
  
  BEGIN
    IF po_number is null THEN
      RETURN;
    END IF;
    l_seq := 1;
    --检查变量
    FOR c IN cur_shipment_tbl(po_number) LOOP
      FOR cur_shipment IN (SELECT ooos.shipment_id
                             FROM shipments ooos
                            WHERE ooos.shipment_id = c.shipment_id) loop
        v_shipments_table.extend;
        v_shipments_table(l_seq) := v_shipments;
        l_seq := l_seq + 1;
        v_shipments.shipment_id := cur_shipment.shipment_id;
      END LOOP;
    END LOOP;
     dbms_output.put_line(v_shipments.shipment_id);
    ---返回游标值
    OPEN x_result FOR
      SELECT * FROM table(v_shipments_table);
  END get_shipment;
END fly_print_pkg;

posted @ 2019-07-10 20:47  爱上胡萝卜的猴子  阅读(553)  评论(0编辑  收藏  举报