2017-05-08 2 views
-1

ほぼ1000レコード(P_SHIPMENT_GID)のストアドプロシージャを実行したいと思います。カーソルを使用する/使用しない各行のストアドプロシージャを呼び出す

DECLARE 
    P_SHIPMENT_GID VARCHAR2(200); 
    BEGIN 
    P_SHIPMENT_GID := NULL; 
    ULE_PKG_UNPLANNED_ICT_CALC.UNPLANNED_ICT_CALC(
    P_SHIPMENT_GID => P_SHIPMENT_GID 
    ); 
    END; 

カーソルを使用する場合と使用しない場合はどうすれば実現できますか?

答えて

0

それはあなたが何をしたいのかクリアしているすべての(どこから1000件のレコードがある?)が、ここでは「パターン」私はあなたが使用することができますかなり確信しているではありません。

BEGIN 
    FOR i IN (SELECT table_name, status FROM user_tables) LOOP 
     dbms_output.put_line('name : ' || i.table_name || 
          ' status : ' || i.status); 
    END LOOP; 
END; 

これは、ループを作成し、 暗黙的カーソルにあり、返された行/列を読み取り可能な方法で使用することができます。

+0

こんにちは、お返事ありがとうございます。 1000レコードが出荷と呼ばれるテーブルに存在する –

+0

実際にはNULLの代わりに私のコードで(1246876)のような1つの貨物の値を渡すことができ、私の手続きを実行することができます、私の手続きはその1つの出荷のためのすべての計算を行いますが、私は自分の手続きを1回だけ実行したいと思います。その場合、1000回の出荷値をすべて取る必要があります。その場合、1回の出荷ID 1000回を渡す必要はありません –

+0

呼び出されたプロシージャを変更できますか?荷物の「リスト」を渡す場合は、構造体の型を 'VARCHAR2'ではなく構造体に変更するか、varchar内の何らかの種類のコンマ区切りリストですべての出荷値を渡す必要があります。 – Dessma

0

このanonymousブロックをあなたの要求に合わせて書くことができます。プロシージャ/ pkgに渡したい値を格納している場所からはわかりませんが、SHIPMENT_GIDの値が格納されています。

BEGIN 
    FOR rec IN (    --Assuming your shipmentid are stored in a table 
       SELECT SHIPMENT_GID 
       FROM Your_TABLE) 
    LOOP 
     ULE_PKG_UNPLANNED_ICT_CALC.UNPLANNED_ICT_CALC (
     P_SHIPMENT_GID => rec.SHIPMENT_GID); 
    END LOOP; 
END; 
関連する問題