'참고'라는 말이 맞겠지만 적당한 분류가 없어서...
위에 재익님이 말씀하신 것이 질문에는 맞겠지만 가만 생각해 보면
월이 지나는 것을 알아내는 부분이 있어야 합니다.
(설마, 따로 있는것은 아니겠지?)
어차피 달이 바뀌고 나서 추가된 항목이 있는지 없는지 알아내는
루틴이 필요하더군요.
해서...
저는 이렇게 해결했습니다.
트리거를 이용한 거죠.
밑의 함수는 insert가 발생할 때 작동하는 함수입니다.
21글자의 code에 첫글자는 '7'그리고 그 다음 8글자가 날자 마지막
5글자가 월계(?) 부분입니다.
이런식으로 만드니까 sequence는 필요 없더군요.
create function atom_7_insert() RETURNS OPAQUE as '
declare
dateLT date;
strLTdate text;
strLTlastCode text;
countLT int;
begin
dateLT := date(''now''::abstime);
strLTdate := date_part(''year'', dateLT) ||
lpad(date_part(''month'', dateLT), 2, ''0'') ||
lpad(date_part(''day'', dateLT), 2, ''0'');
select max(code)
into strLTlastCode
from atom_7
where code like ''7'' || substr(strLTdate,1,6) || ''%'';
if strLTlastCode ISNULL then
countLT := 1;
else
countLT := substr(strLTlastCode, 17, 5)::int + 1;
end if;
NEW.code := ''7'' || strLTdate ||
''00'' || lpad(NEW.Company, 5, ''0'') ||
lpad(countLT, 5, ''0'');
NEW.c_member := getpgusername();
return NEW;
end;
' Language 'plpgsql';
요즘 끄적이고 있는 것에 있는것을 통째로 옮겨 온거라 좀 산만합니다만...(완성한 것도 아니고...)
혹시라도 참고가 되셨기를...
인천의 나사 풀린 산호...
|