Как запустить эту хранимую процедуру - PullRequest
0 голосов
/ 21 июля 2011

Я должен проверить эту процедуру

я даю следующие значения в качестве параметров

34220, 2815,'7/20/2011', 32760, 100, 'PMNT_CHECK', 1, null, "", false, null, null

DECLARE
  P_APP_ID NUMBER;
  P_USER_ID NUMBER;
  P_DATE DATE;
  P_INV_IDS WB_PROD.WB_PCK_TYPES.T_IDS;
  P_AMNTS WB_PROD.WB_PCK_TYPES.T_NUMBERS;
  P_PMNT_METHOD VARCHAR2(15);
  P_BANK_AC_FROM NUMBER;
  P_CHECK_NUMBERS WB_PROD.WB_PCK_TYPES.T_NUMBERS;
  P_MEMO VARCHAR2(1000);
  P_PAY_MULTIPLE NUMBER;
  P_CRD_IDS WB_PROD.WB_PCK_TYPES.T_IDS;
  P_CRD_AMOUNTS WB_PROD.WB_PCK_TYPES.T_PRICES;
  O_PY_ID NUMBER;
BEGIN
  P_APP_ID := 34220;
  P_USER_ID := 2815;
  P_DATE := '7/20/2011';
  -- Modify the code to initialize the variable
  P_INV_IDS := 32760;
  -- Modify the code to initialize the variable
  P_AMNTS := 100;
  P_PMNT_METHOD := 'PMNT_CHECK';
  P_BANK_AC_FROM := 1;
  -- Modify the code to initialize the variable
 --P_CHECK_NUMBERS := NULL;
  P_MEMO := '';
  P_PAY_MULTIPLE := false;
  -- Modify the code to initialize the variable
  -- P_CRD_IDS := NULL;
  -- Modify the code to initialize the variable
  -- P_CRD_AMOUNTS := NULL;

  WB_PCK_BILL_PAYMENTS.PAY_BILLS(
    P_APP_ID => P_APP_ID,
    P_USER_ID => P_USER_ID,
    P_DATE => P_DATE,
    P_INV_IDS => P_INV_IDS,
    P_AMNTS => P_AMNTS,
    P_PMNT_METHOD => P_PMNT_METHOD,
    P_BANK_AC_FROM => P_BANK_AC_FROM,
    P_CHECK_NUMBERS => P_CHECK_NUMBERS,
    P_MEMO => P_MEMO,
    P_PAY_MULTIPLE => P_PAY_MULTIPLE,
    P_CRD_IDS => P_CRD_IDS,
    P_CRD_AMOUNTS => P_CRD_AMOUNTS,
    O_PY_ID => O_PY_ID
  );
  DBMS_OUTPUT.PUT_LINE('O_PY_ID = ' || O_PY_ID);
END;

Я получаю ошибку в этой строке

 P_INV_IDS := 32760;

я проверил тип

P_INV_IDS WB_PROD.WB_PCK_TYPES.T_IDS;

, который находится в операторе Declare, который выглядит так:

type t_ids is table of t_id
   index by binary_integer;

Я не понимаю, как задать параметр для этого типа.Пожалуйста, дайте мне знать, как задать этот параметр.

Спасибо

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

P_INV_IDS - ассоциативный массив в соответствии с вашим объявлением типа.

вы не можете назначить этот путь

P_INV_IDS := 32760;

вам нужно указать индекс в P_INV_IDS, которому вы присваиваете значение

что-то вроде

P_INV_IDS(0) := 32760;
P_INV_IDS(1) := 32761;

http://www.java2s.com/Tutorial/Oracle/0520__Collections/AssignvaluetoPLSQLtable.htm

2 голосов
/ 21 июля 2011

Как определяется ТИП t_id?Это будет диктовать, как вы инициализируете этот массив.Если бы это было число, то вы захотите инициализировать свое значение следующим образом:

P_INV_IDS(1) := 32760;

Если, однако, t_id определен как, скажем, RECORD:

TYPE t_id IS RECORD (
  ID INTEGER;
  DESCRIPTION VARCHAR2(32);
);

Тогда выможет потребоваться инициализация таким образом:

P_INV_IDS(1).id := 32760;
P_INV_IDS(1).description := 'Description for 32760';
...