본문 바로가기
  • AI (Artificial Intelligence)
Skills/Database

[Mysql] Function 권한 설정

by 로샤스 2015. 10. 13.

Oracle로 넘어간 후 Oracle DB와 많이 비슷해졌다 했는데..

여전히 Oracle은 못따라 가는 듯 하다.


Sequence를 만들기위해 여러 방법을 알아보다 Funtion을 통해서 만드는 법을 생각하였다.

대충 요런 느낌.. ㅋㅋ



내 글씨는 여기서 처음 공개해서.. 조금 미안하다 ㅋㅋ

메모라 막써서 오타도 있고 수정도 하고

결론적으로 아래와 같은 함수를 만들었다.


DROP FUNCTION IF EXISTS `test`.`get_seq`;

CREATE FUNCTION `test`.`get_seq`(tmp_seq_name VARCHAR(10)) RETURNS int(4)

    READS SQL DATA

BEGIN

DECLARE result_no int default 0;


SET result_no = (SELECT seq_no from test_master_seq where seq_name = tmp_seq_name);

if(result_no > 9998) then

UPDATE test_master_seq SET seq_no = 1 WHERE seq_name = tmp_seq_name;

set result_no = 1;


else

UPDATE test_master_seq SET seq_no = result_no+1 WHERE seq_name = tmp_seq_name;

set result_no = result_no+1;


end if;

 RETURN result_no;

END


테이블은 아래와 같고..


CREATE TABLE `nfv_master_seq` (

  `seq_name` varchar(10) COLLATE utf8_bin NOT NULL,

  `seq_no` int(4) NOT NULL,

  PRIMARY KEY (`seq_name`)

);


대충 9999가 넘으면 1로 초기화 하는 그런 시퀀스이다.

장점은.. 흠.. 파라메터 값에 따른 Sequence를 생성할 수 있어서 하나로 통합관리가 가능하다.

좋은 Sequence인줄은 모르겠다. 성능테스트 이런건 안했고 원하는 포멧에 맞게 가공하기 위해 만든것이기에..



일단.. 초기값 설정 : INSERT INTO master_seq VALUES ('tab01',1)

값을 불러올땐.. 요렇게.. : SELECT get_seq('tab01')



완성이 되었다. 근데.. 권한 문제 오류가 났다..

Reference : https://stackoverflow.com/questions/6434573/mysql-execute-command-denied-to-user-localhost-for-routine-error


암튼 권한 설정을 아래와 같이 해주면 끄읏!!

GRANT EXECUTE ON PROCEDURE TestMediaControl.monthavrage TO 'jeinqa'@'%';

프로시저 말고 Function이면.. 

>>> GRANT EXECUTE ON PROCEDURE `db_name`.`procedure_name` TO 'user_id'@'host' ;

or

>>> GRANT EXECUTE ON PROCEDURE `db_name`.`function_name` TO 'user_id'@'host' ;


>>> flush privileges;



이상!!







댓글