SQL
VIEW - inline view, stored view응용(대출 이자 납부액 구하기)
에어팟맥스
2022. 7. 5. 17:35
[목표]
-------------------------------------------------------------------------------------------------------------------------
통장번호 대출금 이자율 저번달이자지급일자 이번달이자지급일자 대출일수 이자금액
------------------------------------------------------------------------------------------------------------------------
테이블 생성, 값 생성
create table tbl_loan
(gejanum varchar2(10) -- 통장번호
,loanmoney number -- 대출금
,interestrate number(2,2) -- 이자율 number(2,2) ==> -0.99 ~ 0.99
,paymentdate varchar2(2) -- 이자를 내는 날짜 '01' , '10' , '20', '25', 매월말일은 '00'
);
insert into tbl_loan(gejanum, loanmoney, interestrate, paymentdate)
values('10-1234-01', 5000, 0.03, '01');
insert into tbl_loan(gejanum, loanmoney, interestrate, paymentdate)
values('10-1234-02', 5000, 0.03, '10');
insert into tbl_loan(gejanum, loanmoney, interestrate, paymentdate)
values('10-1234-03', 5000, 0.03, '20');
insert into tbl_loan(gejanum, loanmoney, interestrate, paymentdate)
values('10-1234-04', 5000, 0.03, '25');
insert into tbl_loan(gejanum, loanmoney, interestrate, paymentdate)
values('10-1234-05', 5000, 0.03, '00'); -- 00 말일
commit;
[풀이 1]
select T.account, t.loanmoney, t.interestrate, t.PRE_PAIDDAY, t.REAL_THIS_PAYDAY
, REAL_THIS_PAYDAY - PRE_PAIDDAY 대출일수
, (REAL_THIS_PAYDAY - PRE_PAIDDAY)*( t.loanmoney * t.interestrate ) 이자금액
from
(
select account
, loanmoney
, interestrate
, decode( to_char( pre_payday, 'd' ), '1', pre_payday + 1
, '7', pre_payday + 2
, pre_payday ) AS PRE_PAIDDAY
, decode( to_char( this_payday, 'd' ), '1', this_payday + 1
, '7', this_payday + 2
, this_payday ) AS REAL_THIS_PAYDAY
from
(
select account
, loanmoney
, interestrate
, to_date( to_char( add_months(sysdate,-1), 'yyyy-mm-' ) ||
decode( paymentdate, '00', to_char( last_day( add_months(sysdate,-1) ), 'dd') , paymentdate )
, 'yyyy-mm-dd') AS pre_payday
, to_date( to_char( sysdate, 'yyyy-mm-' ) ||
decode( paymentdate, '00', to_char( last_day( sysdate ), 'dd') , paymentdate )
, 'yyyy-mm-dd') AS this_payday
from tbl_loan
) V
) T;
[풀이 2] - Stored View (저장된 뷰)로 만들기
create or replace view view_loan
as
select T.account, t.loanmoney, t.interestrate, t.PRE_PAIDDAY, t.REAL_THIS_PAYDAY
, REAL_THIS_PAYDAY - PRE_PAIDDAY 대출일수
, (REAL_THIS_PAYDAY - PRE_PAIDDAY)*( t.loanmoney * t.interestrate ) 이자금액
from
(
select account
, loanmoney
, interestrate
, decode( to_char( pre_payday, 'd' ), '1', pre_payday + 1
, '7', pre_payday + 2
, pre_payday ) AS PRE_PAIDDAY
, decode( to_char( this_payday, 'd' ), '1', this_payday + 1
, '7', this_payday + 2
, this_payday ) AS REAL_THIS_PAYDAY
from
(
select account
, loanmoney
, interestrate
, to_date( to_char( add_months(sysdate,-1), 'yyyy-mm-' ) ||
decode( paymentdate, '00', to_char( last_day( add_months(sysdate,-1) ), 'dd') , paymentdate )
, 'yyyy-mm-dd') AS pre_payday
, to_date( to_char( sysdate, 'yyyy-mm-' ) ||
decode( paymentdate, '00', to_char( last_day( sysdate ), 'dd') , paymentdate )
, 'yyyy-mm-dd') AS this_payday
from tbl_loan
) V
) T;
--- *** 생성된 stored view(저장된 뷰) 조회하기 *** ---
select *
from user_views;
--- *** 생성된 stored view(저장된 뷰) 중 뷰 이름이 VIEW_LOAN 인 뷰소스 조회하기 *** ---
select text
from user_views
where view_name = 'VIEW_LOAN'; -- 디폴트 = 대문자, 데이터명은 대소문자 구분함
/*
"select T.gejanum, t.loanmoney, t.interestrate, t.PRE_PAIDDAY, t.REAL_THIS_PAYDAY
, REAL_THIS_PAYDAY - PRE_PAIDDAY 대출일수
, (REAL_THIS_PAYDAY - PRE_PAIDDAY)*( t.loanmoney * t.interestrate ) 이자금액
from
(
select gejanum
, loanmoney
, interestrate
, decode( to_char( pre_payday, 'd' ), '1', pre_payday + 1
, '7', pre_payday + 2
, pre_payday ) AS PRE_PAIDDAY
, decode( to_char( this_payday, 'd' ), '1', this_payday + 1
, '7', this_payday + 2
, this_payday ) AS REAL_THIS_PAYDAY
from
(
select gejanum
, loanmoney
, interestrate
, to_date( to_char( add_months(sysdate,-1), 'yyyy-mm-' ) ||
decode( paymentdate, '00', to_char( last_day( add_months(sysdate,-1) ), 'dd') , paymentdate )
, 'yyyy-mm-dd') AS pre_payday
, to_date( to_char( sysdate, 'yyyy-mm-' ) ||
decode( paymentdate, '00', to_char( last_day( sysdate ), 'dd') , paymentdate )
, 'yyyy-mm-dd') AS this_payday
from tbl_loan
) V
) T"
*/
--- *** 생성된 stored view(저장된 뷰) 삭제하기 *** ---
drop view view_loan;
-- View VIEW_LOAN이(가) 삭제되었습니다.