본문 바로가기
끄적/DB

[Oracle] SQL로 간단한 Function 만들기

by 밀키스 2021. 9. 9.

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;
  1. CREATE OR REPLACE FUNCTION
    • Table을 생성하는 과정과 같다. 그저 function이란 말만 붙은 것.
    • 여기서 OR REPLACE 라는 문구가 눈에 띄는데, 해당 문법은 기존에 존재하는 같은 이름의 Function이 있다면, 덮어 씌워버린다는 뜻이다(지워버리고 작성한 쿼리로 새로 만든다는 거).
    • test_department_name이라는 이름의 함수를 만들며, 해당 함수의 매개변수human_id 이고, Datatype은 number이다.
  2. RETURN IS
    • Return은 해당 함수의 결과 값의 Datatype을 정의해준다.
    • IS 는 내가 Return도 하고, 쿼리문 내에서도 사용할 변수의 이름과 Datatype을 정의한다.
  3. BEGIN END
    1. 으으으음... BEGIN과 END 사이에 이제 해당 함수에 대한 내용을 적는 것.
    2. JAVA로 비유하자면 중괄호 사이?? 정도 되겠다.
    3. 솔직히 좀 더 공부해서 정확한 논리로 설명 가능함이 중요한것 같다...
  4. 그외 쿼리들과 INTO
    1. INTO의 경우는 SQL의 Fuction뿐만 아니라 다른 쿼리문에서도 사용 가능하다.
      • INTO는 기존에 있는 Table에서 특정 칼럼, 혹은 모든 칼럼을 복사해서 집어 넣을 수도 있고,
      • 위의 Function에서와 같이 해당 Select문의 결과 값을 Function의 변수에 집어 넣어줄 수도 있다.
    2. manager_id가 여러개 나올 수 있으니 max 표현식을 통해 하나만 출력토록 만들었다.

 

 


 

 

결과

 

  • 결론만 놓고보면 그냥 내가 employees Table에서 manager_id만으로 해당 사람의 직장 이름을 갖고 오는 함수
  • 뭐 굳이 저렇게 만들 필요가 있을까???.... 싶을 수 있지만 예시인데다... 실제로 이런 Function 덕에 쿼리가 덜 복잡했다... 내가 실력이 모자라서.....

 

좀 더 공부하자 아직 SQL은 많이 부족한것 같다....

반응형

댓글