У меня есть 4 таблицы (account, account1, trnsaction и trnsaction1). Я хочу обновить таблицу account / account1 и одновременно вставить данные новой транзакции в таблицу транзакций. Я создал процедуру для этого.
Обновление в порядке для таблицы account / account1. Но когда я изменил процедуру вставки данных в таблицу trnsaction, она показывает
процедуру, созданную с ошибками компиляции.
Может кто-нибудь помочь найти подходящее решение.
Это мои таблицы:
CREATE TABLE ACCOUNT (
Accno int,
Cid int,
Balance int,
Acctype varchar2(20),
Accbranch varchar2(20),
PRIMARY KEY(Accno),
FOREIGN KEY(Cid) REFERENCES CUSTOMER(Cid));
CREATE TABLE ACCOUNT1(
Accno int,
Cid int,
Balance int,
Acctype varchar2(20),
Accbranch varchar2(20),
PRIMARY KEY(Accno),
FOREIGN KEY(Cid) REFERENCES CUSTOMER1(Cid));
CREATE TABLE TRNSACTION(
Tid int,
Accno int,
Cid int,
Ttype varchar2(20),
Tamount int,
Tbranch varchar2(15),
Tdate date,
PRIMARY KEY(Tid),
FOREIGN KEY(Accno) REFERENCES ACCOUNT(Accno),
FOREIGN KEY(Cid) REFERENCES CUSTOMER(Cid));
CREATE TABLE TRNSACTION1(
Tid int,
Accno int,
Cid int,
Ttype varchar2(20),
Tamount int,
Tbranch varchar2(15),
Tdate date,
PRIMARY KEY(Tid),
FOREIGN KEY(Accno) REFERENCES ACCOUNT(Accno),
FOREIGN KEY(Cid) REFERENCES CUSTOMER(Cid));
И вот процедура:
CREATE OR REPLACE PROCEDURE deposit(x IN number, y IN number)
AS
cur_balance number;
new_balance number;
ac_branch varchar2(20);
id number;
cl_id number;
typ varchar2:='deposit';
trns_branch varchar2:='mirpur';
BEGIN
begin
select Balance,Cid
into cur_balance,cl_id
from Account
where Accno = x;
select max(tid) into id from trnsaction;
id:=id+1;
ac_branch := 'mirpur';
exception
when no_data_found then
select Balance,Cid
into cur_balance,cl_id
from account1
where accno = x;
select max(tid) into id from trnsaction;
id:=id+1;
ac_branch := 'gulshan';
end;
new_balance := cur_balance + y;
if ac_branch = 'mirpur' then
update Account
set Balance = new_balance
where Accno = x;
insert into trnsaction (Tid,Accno,Cid,Ttype,Tamount,Tbranch,Tdate)
values(id,x,cl_id,typ,y,trns_branch,sysdate);
else
update account1
set balance = new_balance
where accno = x;
insert into trnsaction1 (Tid,Accno,Cid,Ttype,Tamount,Tbranch,Tdate)
values(id,x,cl_id,typ,y,trns_branch,sysdate);
end if;
dbms_output.put_line('Money has been withdrawn successfully');
dbms_output.put_line('Current account Balance:' || new_balance);
dbms_output.put_line('transaction completed successfully');
commit;
END;
/
И вот как я это называю:
set serveroutput on;
DECLARE
x number;
y number;
begin
x:=&Account_Number;
y:=&Amount;
deposit(x,y);
end;
/