학교 데이터베이스 과제로 은행 시스템을 구현해보는 것을 하고 있습니다.
입금을 할 때, 해당 계좌 마지막 거래에서 (거래 번호는 시퀀스로 생성했고, 시간적인 순서와 일치한다고 가정) 잔액을 가져온 후
입금 금액과 마지막 거래 잔액을 더하여, 잔액을 계산하는 프로시저를 작성했습니다.
create or replace
PROCEDURE DEPOSIT(
accnum in number, //계좌번호
money in number, //입금액
br in number, //거래 지점
memo in varchar2 //메모
)
IS
maxid number;
acc number;
BEGIN //해당 계좌에서 마지막 거래 번호를 가져옴
SELECT max(ID) into maxid
FROM BANK_ACCOUNT
WHERE ACCOUNT_NUMBER = accnum
GROUP BY ACCOUNT_NUMBER;
SELECT ACCUMULATE into acc //마지막 거래 번호에 저장된 잔액을 가져옴
FROM BANK_ACCOUNT
WHERE ID = maxid AND ACCOUNT_NUMBER = accnum;
EXCEPTION
WHEN NO_DATA_FOUND THEN //위에서 발견된 데이터가 없으면
INSERT INTO BANK_ACCOUNT //은행 거래 테이블에 잔액과 입금액에 입금액으로 저장
(
ACCOUNT_NUMBER,
MONEY,
BRANCH_ID,
ACCOUNT_TYPE,
BALANCE,
NOTE
)
VALUES(
accnum,
money,
br,
0,
money,
memo
);
COMMIT;
WHEN OTHERS THEN
INSERT INTO BANK_ACCOUNT
(
ACCOUNT_NUMBER,
MONEY,
BRANCH_ID,
ACCOUNT_TYPE,
BALANCE,
NOTE
)
VALUES(
accnum,
money,
br,
0,
acc + money, //마지막 거래 잔액과 입금액을 더하여 잔액에 저장
memo
);
COMMIT;
END;
PHP서버와 연동해서 오라클에 접근하고 있습니다.
SQL Developer 프로그램이나 SQL PLUS로 쓰거나 서버를 이용해서 호출을 해봤는데
세 가지 방법 모두 될 때도 있고, 안될 때도 있네요.
뭐가 문제인지 도저히 모르겠습니다.