2012-06-20 11 views
5

में ट्रिगर और अनुक्रम के साथ ऑटोइनक्रिकमेंट फ़ील्ड बनाएं, मैं ट्रिगर और अनुक्रम का उपयोग करके एक ऑटोइनक्रिकमेंट फ़ील्ड (जैसे सीरियल) बनाने की कोशिश कर रहा हूं। मुझे पता है कि केवल एक दृश्य या क्षेत्र पर धारावाहिक प्रकार का उपयोग कर सकते हैं, लेकिन मैं इस दोनों तरीकों (ट्रिगर और secuences) का उपयोग करपोस्टग्रेर्स

CREATE SEQUENCE AlimentosSequencia; 

CREATE OR REPLACE FUNCTION AlimentoFuncion() 
    RETURNS "trigger" AS 
$BODY$ 
    BEGIN 
     New.id:=nextval('AlimentosSequencia'); 
     Return NEW; 
    END; 
$BODY$ 

LANGUAGE 'plpgsql' VOLATILE; 

CREATE TRIGGER AlimentosTrigger 
    BEFORE INSERT 
    ON alimento 
    FOR EACH ROW 
    EXECUTE PROCEDURE AlimentoFuncion(); 

मैं इस संयोजन की कोशिश लेकिन dosen't काम करता है हल करना चाहिए, टेबल भोजन दो क्षेत्रों है केवल, पूर्णांक आईडी (ट्रिगर और अनुक्रम के साथ autoincrement) और वर्कर नाम।

कोई सुझाव?

धन्यवाद

+5

बस "यह काम नहीं करता" के कुछ और स्पष्टीकरण दें। –

+2

आप सरल सीरियल प्रकार का उपयोग क्यों नहीं करना चाहते हैं? –

+3

आप अन्य उद्देश्यों के लिए 'धारावाहिक' कॉलम के संबद्ध अनुक्रम पर केवल 'अगलीवाल() 'को कॉल कर सकते हैं। एक ट्रिगर के साथ चीजों को जटिल करने की कोई ज़रूरत नहीं है। इसके अलावा, त्रुटि संदेश के बिना, आपका प्रश्न सिर्फ शोर है। कृपया इसे क्रियान्वित करें। –

उत्तर

6

दूसरों उपयोगकर्ताओं आपको बता चुका हूँ के रूप में, आप एक ट्रिगर का उपयोग करने की जरूरत नहीं है। आप इस तरह की मेज घोषणा कर सकते हैं:

CREATE SEQUENCE AlimentosSequencia; 

CREATE TABLE alimento (
    id integer NOT NULL DEFAULT nextval('AlimentosSequencia') PRIMARY KEY 
,name VARCHAR(255)); 

और जब आप एक नया रिकार्ड सम्मिलित करें:

INSERT INTO alimento (name) VALUES ('lemon'); 

एक और संभावना serial type रूप आईडी क्षेत्र घोषित किया जाता है, कि यह अनुक्रम स्वचालित रूप से बन जाएगा।

अद्यतन: ठीक है, यह एक अभ्यास है। तब मुझे समझ में नहीं आता कि समस्या क्या है? मैंने इस कोड का परीक्षण किया है:

CREATE SEQUENCE AlimentosSequencia; 

CREATE TABLE alimento (
    id integer NOT NULL PRIMARY KEY 
,name VARCHAR(255)); 

CREATE OR REPLACE FUNCTION AlimentoFuncion() 
RETURNS "trigger" AS 
$BODY$ 
BEGIN 
    New.id:=nextval('AlimentosSequencia'); 
    Return NEW; 
END; 
$BODY$ 
LANGUAGE 'plpgsql' VOLATILE; 

CREATE TRIGGER AlimentosTrigger 
BEFORE INSERT 
ON alimento 
FOR EACH ROW 
EXECUTE PROCEDURE AlimentoFuncion(); 

INSERT INTO alimento (name) VALUES ('lemon'); 

और यह बिना किसी समस्या के काम करता है।

+0

ग्रेट !!! धन्यवाद!! – jgiunta

+0

समस्या तब थी जब मैंने डी फ़ील्ड घोषित किया ... :(!!!! लेकिन आपके उत्तर को पढ़ना मुझे समस्या का पता लगाना। धन्यवाद – jgiunta

संबंधित मुद्दे