我想调用一个程序,其中我已将数字集合作为i / p参数

时间:2014-06-04 06:16:06

标签: oracle stored-procedures plsql plsqldeveloper

CREATE OR REPLACE PROCEDURE modify_stck_fa_pallet_test (
   p_TAG_ID       IN     NUMBER,
   p_PLACE_ID     IN     VARCHAR2,
   p_INPUT        IN     integer_array,
   p_status          OUT VARCHAR2,
   p_status_dtl      OUT VARCHAR2)
IS
   l_PLACE_ID   id_place_id := id_place_id ();

   v_STR        VARCHAR2 (3000);

   v_rec_cnt    NUMBER;
BEGIN
   v_STR :=
      'SELECT pm(w.place_id) 

            FROM pod_place_warehouse_mapping_tb W

            where ( w.place_id  IN  (' || p_PLACE_ID || '))';

   EXECUTE IMMEDIATE v_STR BULK COLLECT INTO l_PLACE_ID;

   FOR i IN l_PLACE_ID.FIRST .. l_PLACE_ID.LAST
   LOOP
      DBMS_OUTPUT.put_line (l_PLACE_ID (i).place_id);


      FOR j IN 1 .. p_INPUT.COUNT
      LOOP
         IF p_INPUT (j) = 1
         THEN
            UPDATE pod_branch_sheet_upload_tb
               SET is_active = 0
             WHERE place_id = l_PLACE_ID (i).place_id AND tag_id = p_TAG_ID;

            COMMIT;
            p_status := 'SUCCESS';
            p_status_dtl := v_rec_cnt || ' Record Updated Successfully';
         ELSIF p_INPUT (j) = 2
         THEN
            UPDATE pod_stock_image_upload_tb
               SET is_active = 0
             WHERE place_id = l_PLACE_ID (i).place_id AND tag_id = p_TAG_ID;

            COMMIT;
            p_status := 'SUCCESS';
            p_status_dtl := v_rec_cnt || ' Record Updated Successfully';
         ELSIF p_INPUT (j) = 3
         THEN
            UPDATE pod_fa_sheet_upload_tb
               SET is_active = 0
             WHERE place_id = l_PLACE_ID (i).place_id AND tag_id = p_TAG_ID;

            COMMIT;
            p_status := 'SUCCESS';
            p_status_dtl := v_rec_cnt || ' Record Updated Successfully';
         ELSIF p_INPUT (j) = 4
         THEN
            UPDATE pod_fa_image_upload_tb
               SET is_active = 0
             WHERE place_id = l_PLACE_ID (i).place_id AND tag_id = p_TAG_ID;

            COMMIT;

            p_status := 'SUCCESS';

            p_status_dtl := v_rec_cnt || ' Record Updated Successfully';
         ELSIF p_INPUT (j) = 5
         THEN
            UPDATE pod_pallet_sheet_upload_tb
               SET is_active = 0
             WHERE place_id = l_PLACE_ID (i).place_id AND tag_id = p_TAG_ID;

            COMMIT;

            p_status := 'SUCCESS';

            p_status_dtl := v_rec_cnt || ' Record Updated Successfully';
         END IF;
      END LOOP;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      ROLLBACK;

      p_status_dtl := SQLCODE || ' - ' || SUBSTR (SQLERRM, 1, 100);

      p_status := 'ERROR';
END;

我需要调用此过程提供p_INPUT为(1,2),以便前两种情况如果

构造已完成但我怎么能在匿名块中调用它。

1 个答案:

答案 0 :(得分:1)

我不确切知道你的integer_array是如何定义的,但是应该是这样的:

declare
 a_TAG_ID     NUMBER := 1;
 a_PLACE_ID   VARCHAR2 := 'TEST';
 a_INPUT      integer_array := integer_array(1, 2);
 a_status     VARCHAR2;
 a_status_dtl VARCHAR2;
begin
  modify_stck_fa_pallet_test(a_TAG_ID,
                             a_PLACE_ID,
                             a_INPUT,
                             a_status,
                             a_status_dtl);
end;
/