PL / SQL:子程序或游标'P_STATUS_UPDATE'在程序包规范中声明,并且必须在程序包主体中定义

问题描述 投票:0回答:1

这是我的包装规格

create package fs_atm_trans_pkg
is
procedure p_status_update;

function f_get_status(i_customer_id number, i_pin_num number, i_account_balance number, v_customer_id number, v_pin_num number, v_account_balance number) 
return varchar;

end fs_atm_trans_pkg;

并且包装规格成功创建。

这是我的包裹身。

create package body fs_atm_trans_pkg is

procedure p_status_update(v_result_cust varchar2, v_balance_nr number,i_trans_id number) is 
   cursor cur_tran is --select all data from transactions along with stored customer data, LEFT JOIN
    select * from bank_trans t left join bank_customer c
        on t.cust_id = c.customer_id left join bank_acct a on c.customer_pk=a.customer_fk
        for update of status;
        v_result_cust varchar2(50);
begin 
  for each_tra in cur_tran loop
  v_result_cust:= f_get_status(each_tra.CUST_ID,
                                        each_tra.PIN_NUMBER,
                                        each_tra.ACCT_BALANCE,
                                        each_tra.customer_id,
                                        each_tra.pin_num,
                                        each_tra.account_balance);

  if v_result_cust='Successful' then
        update bank_trans set bank_trans.acct_balance = v_balance_nr - bank_trans.acct_balance 
        where i_trans_id = bank_trans.transaction_id;
        update bank_trans set status = v_result_cust
        where i_trans_id = bank_trans.transaction_id;
        else 
        update bank_trans set status = v_result_cust
        where i_trans_id = bank_trans.transaction_id;
        end if;
  end loop;
end;

FUNCTION f_get_status(i_customer_id number, 
                                        i_pin_num number, 
                                        i_account_balance number,
                                        v_customer_id number, 
                                        v_pin_num number, 
                                        v_account_balance number) 
    RETURN VARCHAR2 IS
    r_trans_status varchar2(100); 

    BEGIN
        IF i_customer_id = v_customer_id then
                if i_pin_num = v_pin_num then
                    if i_account_balance < v_account_balance
                    then r_trans_status := 'Successful';
                    else r_trans_status := 'Insufficient Fund';
                    end if;
                else r_trans_status := 'Invalid Pin';
                end if;
        else r_trans_status := 'Invalid ID';
        END IF;
    RETURN r_trans_status; 
    end;


end fs_atm_trans_pkg;

当我运行程序包主体时,它发出了如下错误:

RECORD,TABLE或参数列表中的重复字段是不允许的子程序或游标“ P_STATUS_UPDATE”在程序包规范中声明,并且必须在程序包主体中定义子程序或游标'F_GET_STATUS'在程序包规范中声明,并且必须在程序包主体中定义]

我该如何解决这三个错误?如果每个人都能麻将,我将不胜感激。

这是我的软件包说明,创建软件包fs_atm_trans_pkg是过程p_status_update;函数f_get_status(i_customer_id号,i_pin_num号,i_account_balance号,v_customer_id ...

plsql package specifications
1个回答
0
投票

包装规格有:

© www.soinside.com 2019 - 2024. All rights reserved.