Plsql pl/sql更新过程不';不能通过参数工作
以下是程序:Plsql pl/sql更新过程不';不能通过参数工作,plsql,Plsql,以下是程序: 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 CHEC
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,
...
我试图调试传递给参数的值。。。
问题是什么?它不起作用,因为您使用相同的参数名称(实际金额、ID检查信息)。
为了避免混淆,您应该使用某种约定来命名过程参数,我使用
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;
它不起作用,因为您使用相同的参数名称(实际金额、ID检查信息)。
为了避免混淆,您应该使用某种约定来命名过程参数,我使用
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;