기록
day 0625 본문
오라클리 제공하는 함수들이 많이 있다
sum, max, min, count, ..
이러한 함수들은 모두 select절에 사용할 수 있다
이것들처럼 사용자가 select절에 ~
** 사용자 정의 함수(function) 만드는 방법
create or replace function 함수이름 (매개변수명 자료형) return 자료형 -- 반환하는 자료형
is
변수선언
begin
함수가 해야 할 문장
return 값;
end;
연습) 판매금액을 매개변수로 전달받아 이익금을 반환하는 함수를 만들어 봅시다
판매금액이 30000원 이상이면 10% 그렇지 않으면 5%가 이익금이다
-- 이익금 계산하는 function
create or replace function margin(saleprice number) return number
is
result number; // local variable
begin
if saleprice >= 30000 then
result = saleprice * 0.1;
else
result = saleprice * 0.05;
end if;
return result;
end;
/
-- 각 주문에 대한 주문번호, 판매금액, 이익금 출력하기
select orderid, saleprice, margin(saleprice) from orders;
-- 21번 이후 주문을 오늘 날짜로 바꾼다
update orders set orderdate = sysdate where orderid >= 21;
-- 오늘 날짜에 판매된 주문에 대한 주문번호, 도서번호, 도서명, 고객명, 이익금 출력
select orderid, bookid, bookname, name, margin(saleprice)
from book b, customer c, orders o
where b.bookid = o.bookid and c.custid = o.custid where orders and
orderdate = sysdate;
select orderid, b.bookid, bookname, name, margin(saleprice)
from customer c, orders o, book b
where c.custid = o.custid and
b.bookid = o.bookid and
to_char(sysdate, 'yyyy/mm/dd') = to_char(orderdate, 'yyyy/mm/dd');
연습) 고객번호를 매개변수로 전달받아 그 고객의 총 주문액을 계산하여 주문총액이 20000원 이상이면 "우수"
그렇지 않으면 "보통"을 반환하는 grade 함수를 만들고 호출하기
create or replace function grade(myCustid number) return varchar2
is
result varchar2(30)
total number;
begin
select sum(saleprice) into total from orders where custid = myCustid;
if total >= 20000 then
result := "우수";
else
result := "보통";
end if;
return result;
end;
/
ed ff
column grade format a15;
@@ff
- 고객 이름과 등급 출력하기
select name, grade(custid) grade from customer;
연습) 고객의 주소를 매개변수로 전달받아 국내에 거주하면 '국내거주' 그렇지 않으면
'국외거주'를 반환하는 함수를 만들고 호출 해 보기
create or replace function demestic(myAddr varchar2)
return varchar2
is
result varchar2(30);
begin
if myAddr like '%대한민국%' then
result := '국내거주';
else
result := '국외거주';
end if;
return result;
end;
/
ed ff
column demestic format a15;
@@ff
select name, demestic(address) demestic from customer;
select name, demestic(address) demestic, grade(custid) grade from customer;
화면정의서, sql 명세서, 클래스 명세서 --> 6/25 5교시
프로젝트 프로파일러
-- 프로젝트 수행 시 팀원들간 약속 정하기
클래스 이름 어떤식인지
멤버변수명, 메소드이름, 들여쓰기, 중괄호 위치, 글자크기 등
사소한 약속까지 정하기
이에 산출물 작업이 완료된 팀은 역할분담, 작업일정표에 대한 회의 진행
프로그램 구현 및 테스트 --> 6/26 - 7/2
발표 --> 7/2
- 팀별 프로젝트 작업을 진행합니다
- 각 화면별 sql 명세서를 정의하지 않은 팀은 구체화 한 후에 진행합니다
'📖' 카테고리의 다른 글
day 0624 (1) | 2024.06.24 |
---|---|
day 0619 (0) | 2024.06.19 |
day 0618 데이터베이스(4) (0) | 2024.06.18 |
day 0617 데이터베이스(3) (0) | 2024.06.17 |
day 0614 데이터베이스 모델링(2) (0) | 2024.06.14 |