정말 기본적인 PL 함수 작성법에 도움이 될만한 예제입니다.
그냥 PL 강좌를 하나 하는게 어떨까요. :/)
> 말그대로 참고 밖에는 안되는 겁니다만...
> 회사에서 시간을 쪼개어 끄적여 본 겁니다.
> (7.0 베타 지우고 6.5.3으로 다시 설치하다...
> 아, 울고 싶다.)
>
> create table Atom (
> Alias text,
> Full_Name text not null,
> Note text,
> DWG_Name text,
> Material text
> );
>
> create table Atom_0 (
> Code char(21) unique,
> Erase bool default 'f'
> ) INHERITS(Atom);
>
> create function tg_atom_0_bi() returns opaque as '
> declare
> intLT int;
> begin
> SELECT SUBSTR(MAX(code),18,4) INTO intLT FROM atom_0
> WHERE code LIKE SUBSTR(NEW.code,1,17) || ''%'';
>
> if intLT ISNULL then
> intLT := 0;
> end if;
> NEW.code := substr(NEW.code,1,17) || lpad(intLT::int + 1, 4, ''0
> '');
>
> insert into atom_man_0 (code) values (NEW.code);
> return NEW;
> end;
> ' Language 'plpgsql';
>
> create trigger tg_atom_0_bi before insert on atom_0
> for each row execute procedure tg_atom_0_bi();
>
> 21자리 코드중에 전반부 18자리가 동일하다면
> 나머지 4자리를 카운트 되도록 하는 함수이며
> insert 가 발생하기 전에 작동하는 트리거입니다.
> 시퀸스를 사용할 수가 없기 때문에 만들어진 거죠.
> 함수 중간에 다른 테이블의 데이터를 추가하는
> 부분이 나오는데 이것은 단순이 이런 방법도 있다
> 는 정도록 생각하십시오.
>
> pl의 깊은 곳까지 들어갔다고는 할 수는 없지만
> 간단하게 사용할만한 것들이 모여있는 함수입니다.
>
> 인천의 나사 풀린 산호...
|