1

手順は次のとおりです。

create or replace procedure CHECK_INFO_ACTUAL_AMOUNT_UPD(
ACTUAL_AMOUNT IN CHECK_INFO.ACTUAL_AMOUNT%TYPE,
CHECK_INFO_ID IN CHECK_INFO.ID_CHECK_INFO%TYPE,
TOTAL_ADJUSTMENT IN CHECK_INFO.TOTAL_ADJUSTMENT_ACCRUEMENT%TYPE
) 
is
begin
  UPDATE CHECK_INFO C SET C.ACTUAL_AMOUNT = ACTUAL_AMOUNT,
  C.IS_ACCUMULATION_COMPLITED = 5,
  C.TOTAL_ADJUSTMENT_ACCRUEMENT = TOTAL_ADJUSTMENT 
  WHERE C.ID_CHECK_INFO = CHECK_INFO_ID;
  COMMIT;
    EXCEPTION
    WHEN OTHERS
    THEN
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      ROLLBACK;
end CHECK_INFO_ACTUAL_AMOUNT_UPD;

問題は、パラメーターを渡して行うとプロシージャが ACTUAL_AMOUNT フィールドを更新しないことですが、次のようなプロシージャ内で値を割り当てると更新されます

...
UPDATE CHECK_INFO C SET C.ACTUAL_AMOUNT = 111,
...

パラメータに渡された値をデバッグしようとしました...何が問題ですか???

4

1 に答える 1

1

同じパラメーター名 (ACTUAL_AMOUNT、ID_CHECK_INFO) を使用しているため、機能しません。
混乱を避けるために、プロシージャー・パラメーターの命名にはある種の規則を使用する必要があります。これp_を最初に使用します。

これを試して:

create or replace procedure CHECK_INFO_ACTUAL_AMOUNT_UPD(
P_ACTUAL_AMOUNT IN CHECK_INFO.ACTUAL_AMOUNT%TYPE,
P_CHECK_INFO_ID IN CHECK_INFO.ID_CHECK_INFO%TYPE,
P_TOTAL_ADJUSTMENT IN CHECK_INFO.TOTAL_ADJUSTMENT_ACCRUEMENT%TYPE
) 
is
begin
  UPDATE CHECK_INFO C SET C.ACTUAL_AMOUNT = P_ACTUAL_AMOUNT,
  C.IS_ACCUMULATION_COMPLITED = 5,
  C.TOTAL_ADJUSTMENT_ACCRUEMENT = P_TOTAL_ADJUSTMENT 
  WHERE C.ID_CHECK_INFO = P_CHECK_INFO_ID;
  COMMIT;
    EXCEPTION
    WHEN OTHERS
    THEN
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      ROLLBACK;
end CHECK_INFO_ACTUAL_AMOUNT_UPD;
于 2012-09-20T05:16:06.900 に答える