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;
이상!!
'Skills > Database' 카테고리의 다른 글
mac을 위핸 sql tool (0) | 2015.10.26 |
---|---|
mysql 무료 툴 간단 벤치마킹 (0) | 2015.10.26 |
MySQL 설치와 초기 설정 (1) | 2015.09.23 |
[MySQL] CentOS | MySQL 설치하고 root 사용자 비밀번호 생성하기 (0) | 2014.12.04 |
[MySQL] root 사용자 비밀번호 생성하기 on CentOS (0) | 2014.11.28 |
댓글