> 안녕하새요.
> (한동안 조용하다가 질문을 들고 돌아왔습니다.)
>
> 거두절미...(설명을 잘 못하는 고로...)
> 밑의 코드에서 어떤 문제가 있는 건가요?
>
> create function atom_6_insert() returns opaque as '
> declare
> seq_number int8;
> new text;
> begin
> select nextval(''atom_6_count'') into seq_number;
> new1 := substring(NEW.code from 1 for 16) || lpad(seq_number, 5,
> ''0'');
> insert into atom_6 ( code, company_name, business_number,
> president, addres, zip_code)
> values ( new1, NEW.company_name, NEW.business_number,
> NEW.president, NEW.addres, NEW.zip_code);
> return NEW;
> end;
> ' Language 'plpgsql';
>
> create trigger atom_6_insert
> before insert
> on atom_6
> for each row
> execute procedure atom_6_insert();
> );
>
> 좀 길다 싶어서 줄여도 보기에 흉하게 변하는군요.(끙)
> ODBC로 입력하건 아니면 psql에서 입력하건간에 시간이 지연된 후에
> 에러를 내고는 빠져 나가버립니다.(연결이 끊어짐)
>
> 에러의 내용은
> pqReadData() // backend closed the channel unexpectedly.
> This probably means the backend terminated abnormally
> before or while processing the request.
> We have lost the connection to the backend, so further processing is i
> mpossible. Terminating.
> 입니다.
>
> 이건 왜그런 건가요? (아... 힘들다...)
>
> 인천의 나사 풀린 산호...
정말 오랜만이네요. :/)
그런데 그동안 많은 발전을 느끼게 만듭니다. 벌써 PL/pgSQL 을 공부하시다니...
저부분은 t1 자체에 대한 trigger 에서 t1 에 write 를 하기 때문에 생성되는 에러라고 생각됩니다.
다음에 저가 써 놓은 함수를 참조하시기 바랍니다.
(저는 table 구조를 잘 모르기 때문에 나름대로 테이블을 만들었습니다.
만든 테이블은 다음과 같습니다.
create table t1 (code text, f1 text, f2 int);
create sequence tseq;
)
create function pl () returns opaque as '
declare
snum int8;
new1 text;
begin
select nextval( ''tseq'') into snum;
new1 := substring(NEW.code from 1 for 16) || lpad(snum, 5, ''0'');
NEW.code = new1;
return NEW;
end;
' Language 'plpgsql';
create trigger tt1
before insert
on t1
for each row
execute procedure pl ();
이것으로서 원하는 결과를 얻으실수 있습니다.
(무엇이 잘못되었는지는 결과를 보시면 알겠지요. :/))
이제 실력이 예전에 처음 질문하실때와는 비교도 안될 정도로 올라왔네요.
이제 여기 게시판에 답변좀 올리세요.
저 혼자 미치겠심다.
|