2012-07-26 16 views
7

पर सेट करना मैं अपनी स्कीमा को प्रबंधित करने के लिए तरल पदार्थ का उपयोग कर रहा हूं। मेरे पास सम्मिलित बयान का एक गुच्छा है। मैंने प्राथमिक-आईडी संख्याओं को कड़ी मेहनत की है। मेरे सभी आवेषण किए जाने के बाद, मैं अनुक्रम मान को तालिका में प्राथमिक-कुंजी के अधिकतम मूल्य से 1 और में बदलना चाहता हूं। इसके लिए मैंने नीचे दिया गया पीएल/एसक्यूएल लिखा है। हालांकि, जब मैं select ArtifactTypes_id_seq.nextval from dual; निष्पादित यह अभी भी वृद्धि कर देता है 0.ओरेकल: अनुक्रम को एक विशिष्ट मान

SET SERVEROUTPUT ON SIZE 1000000 
DECLARE 
    sequence_id NUMBER; 
BEGIN 

    SELECT NVL(MAX(idArtifactType), 0) + 1 INTO sequence_id FROM ArtifactTypes; 
    EXECUTE IMMEDIATE 'ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY ' || sequence_id; 
    EXECUTE IMMEDIATE 'SELECT ArtifactTypes_id_seq.nextval FROM dual'; 
    EXECUTE IMMEDIATE 'ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY 1'; 
    DBMS_OUTPUT.put_line('Executed "ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY ' || sequence_id || '"'); 
END; 
/

DBMS_OUTPUT उत्पादन निम्नलिखित देता है -
Executed "ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY 71"

कुछ भी है कि मैं बाहर याद आ रही है? क्या मैं गलत तरीके से कर रहा हूँ? NOte: मैंने SQLDeveloper से इन SQLs को निष्पादित करने का प्रयास किया।

उत्तर

8

तो मुझे यह समस्या मिली। बाद PL/SQL होना चाहिए -

SET SERVEROUTPUT ON SIZE 1000000 
DECLARE 
    sequence_id NUMBER; 
    temp_seq NUMBER; 
BEGIN 
    SELECT NVL(MAX(idArtifactType), 0) + 1 INTO sequence_id FROM ArtifactTypes; 
    EXECUTE IMMEDIATE 'ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY ' || sequence_id; 
    SELECT ArtifactTypes_id_seq.nextval into temp_seq FROM dual; 
    EXECUTE IMMEDIATE 'ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY 1'; 
    DBMS_OUTPUT.put_line('Executed "ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY ' || sequence_id || '"'); 
END; 
/

बयान के बाद -
SELECT ArtifactTypes_id_seq.nextval into temp_seq FROM dual;

करने के लिए
EXECUTE IMMEDIATE 'SELECT ArtifactTypes_id_seq.nextval FROM dual';
बदल गया था और यह काम किया !!

5

आप इसे फिर से बनाने, खंड साथ शुरू होता है का उपयोग प्रारंभिक मान देना, जैसे अनुक्रम ड्रॉप और फिर की जरूरत है:

CREATE SEQUENCE saas.ArtifactTypes_id_seq 
    START WITH 72; 

इसके अलावा, एक दृश्य से NEXTVAL का चयन स्वचालित रूप से 1 से यह वृद्धि कर देता है

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