상세 컨텐츠

본문 제목

[전문가를 위한 스프링5] 6장 MYSQL FUNCTION 생성 에러

용어 공부

by dajingjing 2023. 10. 5. 23:21

본문

6.15 SqlFunction 으로 저장 함수 호출하기.

 

6.15장은 mysql 로 function을 생성하고, 해당 function을 사용하여 select 하는 내용이다.

이 내용을 그대로 따라했는데,, mysql에서 function이 생성되지 않는 에러가 발생했다.

 

↓ 전문가를 위한 스프링5 책에 있는 function 생성 함수

DELIMITER //
CREATE FUNCTION getFirstNameById(in_id INT)
   RETURNS VARCHAR(60)
   BEGIN
      RETURN (SELECT first_name FROM singer WHERE id = in_id);
   END //
DELIMITER ;

 

문제는.. 어떤 에러인지는 안나오고 "Name : Updated Rows, Value : -1" 로 결과가 나온다.

인터넷을 찾아보고 정말 여러가지로 시도를 해봤다ㅠ(한 2시간은 삽질한듯..)

 

여러가지 시도했던 내용과 마지막에 해결방법을 적어봤다.

 

1. log_bin_trust_function_creators 값을 0에서 1로 변경. (OFF -> ON)

show global variables like 'log_bin_trust_function_creators';

위와 같이 조회했을때 0값(OFF값)으로 되어있어서

SET GLOBAL log_bin_trust_function_creators = 1;

위 명령어로 1값(ON)값으로 변경 후 다시 실행

--> 결과는 실패.

 

2. USER를 모든 권한을 가진 root 유저로 변경하여 시도

--> 결과는 실패.

 

3. DROP FUNCTION IF EXISTS getFirstNameById // 추가

--> 실패

 

4. BEGIN 전 줄에 READS SQL DATA 추가

--> 실패

 

5. 기타 등등 stackoverflow에 나와있는 모든 내용 동원해서 다 추가해봄

--> 실패

 

뭔가 버전이 달라서 명령어가 바꼈나? 의심되기 시작함.

SELECT version()

버전을 확인해보니 8.1.0 이다.

 

6. MySQL 8.0 Reference Manual 에 있는 CREATE FUNCTION 명령어로 시도

--> 성공!!!!

https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html

위 사이트에서 아래 내용 보고 했더니 된다ㅠ_ㅠ

위 내용 보고 아래 세줄만 실행했더니 바로 된다! ㅠ_ㅠ

CREATE FUNCTION getFirstNameById(in_id INT)

RETURNS VARCHAR(60) DETERMINISTIC

RETURN (SELECT first_name FROM singer WHERE id = in_id LIMIT 1);

6.15장에 있는 내용을 인텔리제이에서 실행해도 이제 에러없이 실행된다!

 

 

※교훈 : 다른사람들이 설명해 놓은 글보다 원래의 메뉴얼을 먼저 찾아서 하자..

관련글 더보기