使用/不使用游标为每个行调用存储过程

时间:2017-05-08 19:18:50

标签: sql plsql

我希望一次性运行一个存储过程近千条记录(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;

如何使用或不使用游标来实现此目的?

2 个答案:

答案 0 :(得分: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;

这会在隐式游标上创建一个循环,并允许您以可读的方式使用返回的行/列。

答案 1 :(得分: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;