SQL을 이용하여 기본적인 Function을 만드는 법이다.
우선 기본적으로 사용하는 법은 아래와 같다.
@ Function 만들기
create or replace function test_department_name(human_id in number)
return varchar2
is
test_name varchar2(30);
begin
select max(department_name)
into test_name
from departments
where manager_id = (select max(manager_id) from employees
where manager_id = human_id);
return test_name;
end;
- CREATE OR REPLACE FUNCTION
- Table을 생성하는 과정과 같다. 그저 function이란 말만 붙은 것.
- 여기서 OR REPLACE 라는 문구가 눈에 띄는데, 해당 문법은 기존에 존재하는 같은 이름의 Function이 있다면, 덮어 씌워버린다는 뜻이다(지워버리고 작성한 쿼리로 새로 만든다는 거).
- test_department_name이라는 이름의 함수를 만들며, 해당 함수의 매개변수는 human_id 이고, Datatype은 number이다.
- RETURN 과 IS
- Return은 해당 함수의 결과 값의 Datatype을 정의해준다.
- IS 는 내가 Return도 하고, 쿼리문 내에서도 사용할 변수의 이름과 Datatype을 정의한다.
- BEGIN 과 END
- 으으으음... BEGIN과 END 사이에 이제 해당 함수에 대한 내용을 적는 것.
- JAVA로 비유하자면 중괄호 사이?? 정도 되겠다.
- 솔직히 좀 더 공부해서 정확한 논리로 설명 가능함이 중요한것 같다...
- 그외 쿼리들과 INTO
- INTO의 경우는 SQL의 Fuction뿐만 아니라 다른 쿼리문에서도 사용 가능하다.
- INTO는 기존에 있는 Table에서 특정 칼럼, 혹은 모든 칼럼을 복사해서 집어 넣을 수도 있고,
- 위의 Function에서와 같이 해당 Select문의 결과 값을 Function의 변수에 집어 넣어줄 수도 있다.
- manager_id가 여러개 나올 수 있으니 max 표현식을 통해 하나만 출력토록 만들었다.
- INTO의 경우는 SQL의 Fuction뿐만 아니라 다른 쿼리문에서도 사용 가능하다.
결과
- 결론만 놓고보면 그냥 내가 employees Table에서 manager_id만으로 해당 사람의 직장 이름을 갖고 오는 함수
- 뭐 굳이 저렇게 만들 필요가 있을까???.... 싶을 수 있지만 예시인데다... 실제로 이런 Function 덕에 쿼리가 덜 복잡했다...
내가 실력이 모자라서.....
좀 더 공부하자 아직 SQL은 많이 부족한것 같다....
반응형
'끄적 > DB' 카테고리의 다른 글
[오라클] 데드락 확인 및 kill하기 (0) | 2022.05.20 |
---|---|
[DBeaver] 오라클11g 디비버에 연결하기 (0) | 2022.02.08 |
[Oracle] OVER() 와 PARTITION BY 사용하기 (0) | 2021.10.30 |
[Oracle] No Data Found 이슈 해결하기 (0) | 2021.09.24 |
[Oracle] Oracle 11.g 시작하기(hr 계정 해금) / Group By (0) | 2021.09.07 |
댓글