2015-06-04 2 views
0

Я создал хранимую процедуру - она ​​создана успешно на сервере, но когда я ее выполняю, я получаю сообщение Procedure Completed, но оно не возвращает никакого вывода.Сохраненная процедура создана, но не возвращает результат

Процедура ниже

CREATE OR REPLACE PROCEDURE DFADMIN.USP_GETPICKLIST_DF 
(
P_ORD_TYPE IN varchar2, 
P_PICKLIST_OUT OUT SYS_REFCURSOR, 
P_PICKLIST_ORD OUT SYS_REFCURSOR 
) 
AS 
v_TotalOpenOrder integer; 
v_AstockQty integer; 
v_BstockQty integer; 
v_loopCounter integer; 
v_Astock integer; 
v_Bstock integer; 
v_TotalBStockQty integer; 

BEGIN 
    SELECT COUNT(DISTINCT ORD_NBR) INTO v_TotalOpenOrder FROM DFADMIN.DF_ORDERS WHERE ORD_STATUS='OPEN' AND ORD_TYPE='DF'; 
begin 
     if v_TotalOpenOrder>0 then 
      v_BstockQty:=round(((v_TotalOpenOrder*60)/100),0); 
      v_AstockQty:=v_TotalOpenOrder-v_BstockQty; 
      select count(1) into v_Astock from DFADMIN.Ro_HIST where Process='ASTOCK' AND ORDER_TYPE='DF'; 
      select count(1) into v_Bstock from DFADMIN.Ro_HIST where Process='BSTOCK' AND ORDER_TYPE='DF'; 

      if (v_Bstock < v_BstockQty) then 
       open P_PICKLIST_OUT for 
        select T.QTY,T.PUTAWAY_BIN BIN,T.BOXID BOX_ID ,T.PICKQTY PICK_QTY from 
        (
         Select sum(I.QTY) QTY, I.PUTAWAY_BIN,I.BOXID,'1' as PickQty 
         from (select * from DFADMIN.Ro_HIST where ORDER_TYPE='DF' and QTY<=v_Bstock order by created_date asc) I 
         Where BOXID in (select K.BOXID from DFADMIN.RO_HIST K) 
         and I.PROCESS='BSTOCK' and I.PUTAWAY_BIN is not null and QTY<=v_Bstock 
         group by I.PUTAWAY_BIN,I.BOXID,I.QTY, I.PROCESS,'1' 
        union 
         Select sum(I.QTY) QTY, I.PUTAWAY_BIN,I.BOXID,'1' as PICKQTY 
         from (select * from DFADMIN.Ro_HIST where ORDER_TYPE='DF' order by CREATED_DATE asc) I 
         Where BOXID in (select K.BOXID from DFADMIN.RO_HIST K) 
         and I.PROCESS='ASTOCK' and I.PUTAWAY_BIN is not null and QTY<=(v_TotalOpenOrder-v_Bstock) --and case when v_Bstock>0 then rownum<=(v_TotalOpenOrder-v_Bstock) else rownum>0 end 
         group by I.PUTAWAY_BIN,I.BOXID,I.QTY, I.PROCESS,'1' 
        ) t order by T.QTY asc; 
        open P_PICKLIST_ORD for 
        select distinct ORD_NBR,'' QTY,'' BIN,'' BOX_ID ,'' PICK_QTY from DFADMIN.DF_ORDERS where ORD_STATUS='OPEN' AND ORD_TYPE='DF' ; 
        ELSE 
        begin 
           open P_PICKLIST_OUT for 
        select T.QTY,T.PUTAWAY_BIN BIN,T.BOXID BOX_ID ,T.PICKQTY PICK_QTY from 
        (
         Select sum(I.QTY) QTY, I.PUTAWAY_BIN,I.BOXID,'1' as PickQty 
         from (select * from DFADMIN.Ro_HIST where ORDER_TYPE='DF' AND QTY<=v_Bstock order by created_date asc) I 
         Where BOXID in (select K.BOXID from DFADMIN.RO_HIST K) 
         and I.PROCESS='BSTOCK' and I.PUTAWAY_BIN is not null and QTY<=v_BstockQty 
         group by I.PUTAWAY_BIN,I.BOXID,I.QTY, I.PROCESS,'1' 
        union 
         Select sum(I.QTY) QTY, I.PUTAWAY_BIN,I.BOXID,'1' as PICKQTY 
         from (select * from DFADMIN.Ro_HIST WHERE ORDER_TYPE='DF' order by CREATED_DATE asc) I 
         Where BOXID in (select K.BOXID from DFADMIN.RO_HIST K) 
         and I.PROCESS='ASTOCK' and I.PUTAWAY_BIN is not null and QTY<=(v_TotalOpenOrder-v_BstockQty) --and case when v_Bstock>0 then rownum<=(v_TotalOpenOrder-v_Bstock) else rownum>0 end 
         group by I.PUTAWAY_BIN,I.BOXID,I.QTY, I.PROCESS,'1' 
        ) t order by T.QTY asc; 
        open P_PICKLIST_ORD for 
        select distinct ORD_NBR,'' QTY,'' BIN,'' BOX_ID ,'' PICK_QTY from DFADMIN.DF_ORDERS where ORD_STATUS='OPEN' AND ORD_TYPE='DF'; 
        end ; 

      end if; 

     end if; 

    end; 

END USP_GETPICKLIST_DF; 

В этой процедуре есть один входной параметр и 2 выходной параметр.

+0

Как вы его выполняете? Что вы передаете для двух параметров OUT, и как вы пытаетесь отображать/использовать результаты? –

ответ

0

В вашей процедуре нет dbms_output или чего-нибудь подобного, что приведет к выходу/отображению любых данных.

Существует два выходных параметра типа sys_refcursor, поэтому я полагаю, что вы считаете своим желаемым выходным содержимым этих параметров после выполнения процедуры. После вызова процедуры вы можете получить эти курсоры в переменные, а затем, например, отображать данные, подобные этому.

declare 
vpicklist_out sys_refcursor; 
vpicklist_ord sys_refcursor; 
myRecord mytable%ROWTYPE; 
begin 
USP_GETPICKLIST_DF('somestring', vpicklist_out ,vpicklist_ord); 
LOOP 
     FETCH vpicklist_out INTO myRecord1; 
     EXIT WHEN vpicklist_out%NOTFOUND; 
     dbms_output.put_line(to_char(myRecord1.col1)); 
    END LOOP; 
end; 

Обратите внимание, что я не знаю точную структуру ваших данных, поэтому MyRecord в моем примере объявлен как ROWTYPE некоторой таблицы под названием туЬаОй.

Смежные вопросы