การสร้าง sequence ใน MySQL

June 15th, 2011

บางครั้งทำงานใน MySQL แต่ติดการใช้ Sequence แบบใน Oracle ซะแล้ว ก็เลยหาวิธีใช้ ปรากฏว่าพริกแพลงได้ตามนี้ครับ

1. สร้าง Table สำหรับใช้เป็นที่เก็บ sequence

1
2
3
4
5
CREATE TABLE `agt_sequence` (
`seq_name`  varchar(64) PRIMARY KEY ,
`seq_val`  bigint(20) UNSIGNED NOT NULL ,
PRIMARY KEY (`seq_name`)
)

2. ผมจะสร้าง Function เพื่อจัดการกับ Table sequence เพื่อให้สะดวกต่อการนำมาใช้งาน

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE FUNCTION `agt_nextval`(`v_seq_name` varchar(64),`v_char_length` bigint)
 RETURNS varchar(64) CHARSET utf8
    MODIFIES SQL DATA
    SQL SECURITY INVOKER
BEGIN
	DECLARE tp_seq_name VARCHAR(64);
	DECLARE tp_seq_val BIGINT(20);
 
	SELECT seq_name,
		seq_val + 1 AS seq_val
	INTO tp_seq_name,
		tp_seq_val
	FROM agt_sequence
	WHERE seq_name = v_seq_name
	LIMIT 1
	FOR UPDATE;
 
	UPDATE agt_sequence
	SET seq_val = tp_seq_val
	WHERE seq_name = v_seq_name;
 
	RETURN LPAD(tp_seq_val,v_char_length,0);
END;
1
2
3
คำอธิบาย
v_seq_name = ค่าที่อยู่ใน table sequence เพื่อใช้ในการเป็นเงื่อนไขในการดึงค่าของ sequence ขึ้นมา
v_char_length = ค่าจำนวนตัวอักษรที่จะให้ return เช่น v_char_length = 3 ค่าที่จะ return จะเป็นได้ 001, 002, ... , 999

สามารถเอาไปเทสได้ ดังนี้

1
SELECT agt_nextval( 'a',4 )

ผลลัพธ์

1
2
|agt_nextval('a',4)|
|0028|

เป็นไงครับพอมองออกหรือปล่าว ยังไงลองเอาไปประยุกต์ใช่กันดูนะครับ เพราะแต่ละคน การเอาไปใช้ การเขียนขึ้นมา จะไม่เหมือนกัน

Spring AOP tutorial

March 31st, 2011

Spring AOP tutorial

Spring AOP tutorial – Part 1 | Aspect Oriented Programming Tutorial Part -1

Spring AOP tutorial – Part 2 | Aspect Oriented Programming Tutorial – Part 2

STS, Spring Insight and Grails

March 31st, 2011