변수와 매개변수 (Variables and Parameters)
프로그램을 정의할 때 매개변수(Parameter)를 사용하여 입력값을 처리하고, 그 결과를 변수(Variable)에 저장할 수 있습니다. MySQL의 저장 프로시저에서 IN, OUT 또는 IN-OUT 매개변수를 사용할 수 있으며, 이러한 매개변수를 통해 값을 입력하고 결과를 반환할 수 있습니다.
# 변수v_avg_salary 설정
set @v_avg_salary = 0;
# 프로시저 호출(11300) 및 변수(@v_avg_salary)에 저장
call employees.emp_avg_salary_out(11300, @v_avg_salary);
# 변수 값 출력
select @v_avg_salary;
위의 방법을 사용하여 변수를 만들고 해당 프로시저의 연산 수행 후 out 변수에 값 저장하여 출력하는 방법을 확인 하실 수 있습니다.
MySQL에서의 사용자 정의 함수 (User-Defined Functions in MySQL)
MySQL에서 사용자 정의 함수는 데이터베이스 내에서 특정 연산을 수행하고 값을 반환하는 기능을 갖습니다. 사용자는 함수 이름과 매개변수를 정의하고 함수가 반환할 데이터 유형을 지정할 수 있습니다. 함수는 DELIMITER $$를 사용하여 구분되며 CREATE FUNCTION 구문으로 생성됩니다.
DELIMITER $$
create function f_emp_avg_salary (p_emp_no INTEGER) returns decimal(10,2) # return 타입을 써줘야 합니다.
deterministic no sql reads sql data
begin
declare v_avg_salary decimal(10,2); # 변수 생성 및 해당 변수의 타입은 위에서의 타입과 동일해야 합니다.
select
avg(s.salary)
into v_avg_salary from
employees e
join
salaries s on e.emp_no = s.emp_no
where
e.emp_no = p_emp_no;
return v_avg_salary; # 변수에 저장하여 return
end$$
DELIMITER ;
select f_emp_avg_salary(11300);
해당 코드는 프로시저 만드는 구문과 유사하나 몇몇 다른 부분이 있으며 다른 부분은 제가 주석으로 설명을 써 놓았습니다.
이렇게 이런 유형으로 작성하면 함수가 만들어지게 됩니다.
실행 방법은 프로시저는 call을 사용하였으나, 함수 호출은 select를 사용하시면 됩니다. 또는 왼쪽의 스키마 탭에서의 function을 들어가서 run을 누르시면 됩니다.
저장 루틴의 결론 (Stored Routines - Conclusion)
저장 프로시저와 사용자 정의 함수의 차이를 구분하는 것은 중요합니다.
프로시저는 여러 값을 OUT 매개변수로 반환할 수 있지만, 함수는 단 하나의 값을 반환합니다. 또한, 함수는 SELECT 문에 포함될 수 있지만, 프로시저는 불가능합니다.
주요 차이점:
- 프로시저는 값을 반환하지 않고 데이터베이스 작업을 수행합니다 (INSERT, UPDATE, DELETE).
- 함수는 값을 반환하며, 주로 계산된 값을 얻기 위해 사용됩니다.
결론:
- 프로시저는 여러 값을 반환할 때 유용하며, 데이터베이스 조작 작업에 적합합니다.
- 함수는 단일 값을 반환하는 계산에 유용합니다.
느낀점 : 확실히 강의를 들으면서 무작정 쳐볼 때는 이게 뭐지 하였으나, 블로그 작성을 통해 이론적으로 한 번더 복습을 해보니 확실히 뭐가 왜 이렇게 쓰이는지에 대해 제대로 짚고 갈 수 있어서 블로그 작성은 꼭 해야할 거 같습니다.
이상입니다.
'Data Analyst > SQL' 카테고리의 다른 글
SQL - Trigger (0) | 2024.09.16 |
---|---|
SQL - Local, Session, Global Variables (0) | 2024.09.16 |
SQL - Routine, Stored Procedure (0) | 2024.09.12 |
SQL - SELF JOIN, VIEW (0) | 2024.09.10 |
SQL - SubQuery (1) | 2024.09.09 |