oracle pl / sql ошибка компиляции процедуры - PullRequest
0 голосов
/ 11 октября 2019

У меня есть 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;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...