2013-05-06 2 views
-1

"req"라는 열이있는 "xxx"테이블이 있습니다. 이 열에 "req"나는 항상 다음과 같은 방식으로 자동으로 생성 된 값을 취하고 싶습니다. 열 "req"값 Ref_0001, 다른 삽입 후 Ref_0002, Ref_0003 ... ... 시도해 봅니다.PostgreSQL의 트리거가 기본값을 허용하지 않습니다

CREATE SEQUENCE seq_ref; 

CREATE TABLE dossier 
     (
     ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || LPAD(NEXTVAL('seq_ref')::TEXT, 10, '0'), 
     value TEXT 
     ); 

삽입 새로운 라인에 내 응용 프로그램과 그렇지 않은 잘 작동이 솔루션 .. : 당신이 제로 패딩 번호를 원하는 경우 @Craig 벨소리에 대한 첫 번째 솔루션 들으

CREATE SEQUENCE seq_ref; 

CREATE TABLE dossier 
     (
     ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || NEXTVAL('seq_ref'), 
     value TEXT 
     ); 

, 이것을 사용 하지만 pgAdmin을 삽입하려고하면 테이블을 새로 고칠 때까지는 열이 비어 있습니다. 그래서 함께 작업하려고합니다. 방아쇠.

필자는 내 문제를 해결하기 위해 마침내 PostgreSQL에서 트리거를 생성합니다. 열 req에 대한 값 생성이 양식 Ref00001, Ref0002 ...하지만 변경되지 않습니다. 작동하지 않습니다; 여전히 빈 열 :

CREATE table test(
id serial primary key, 
non varchar(12), 
req varchar(12) 
); 

CREATE OR REPLACE FUNCTION Start_generate() RETURNS trigger AS $emp_stamp$ 
    BEGIN 

     NEW.req := ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text)); 

     return null; 
    END; 
$emp_stamp$ LANGUAGE plpgsql; 

CREATE TRIGGER Generate_ref AFTER INSERT ON test 
    FOR EACH ROW EXECUTE PROCEDURE Start_generate(); 

내가

NEW.req := DEFAULT ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text)); 

에 기본을 추가 ... 작동하지 않는 이유를 알 수없는 에러가 기본에있다!

원하는 효과를 얻으려면 어떻게해야합니까? 절차에서`NEW`를 반환으로 시도 :

+2

절대 추측을 'null'보다는 오히려. –

+1

어떻게해야합니까? –

+0

나는 내 질문을 이해하지 못해서 이해한다. – FERESSS

답변

1

당신은 트리거 전에를 사용해야하고, 행 반환 : (나는 모든 질문을 이해하지 않았기 때문에)

CREATE OR REPLACE FUNCTION Start_generate() RETURNS trigger AS $emp_stamp$ 
    BEGIN 

     NEW.req := ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text)); 

     return NEW; 
    END; 
$emp_stamp$ LANGUAGE plpgsql; 

CREATE TRIGGER Generate_ref BEFORE INSERT ON test 
    FOR EACH ROW 
WHEN (NEW.req IS NULL) 
EXECUTE PROCEDURE Start_generate(); 
+0

:)))))))))))))))))))))) 당신이 가장 좋다 (y) @Denis thx for 너의 협조가 잘 됐어. – FERESSS

관련 문제