2012-07-26 23 views
7

Şemayı yönetmek için likidibis kullanıyorum. Bir sürü ekleme ifadem var. Birincil kimlik numaralarını kodladım. Tüm eklerim tamamlandıktan sonra, sıra değerini tablodaki birincil anahtarın maksimum değerinden 1 daha fazla değiştirmek istiyorum. Bunun için aşağıda verilen bir PL/SQL yazdım. Dışarı eksik
Executed "ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY 71"Oracle: Diziyi belirli bir değere ayarlama

şey - Ancak, ne zaman select ArtifactTypes_id_seq.nextval from dual; hala DBMS_OUTPUT çıkışı takip verir 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; 
/

artırır yürütmek? Yanlış yolu mu yapıyorum? Not: Bu SQL'leri SQLDeveloper'dan çalıştırmayı denedim.

cevap

8

Bu yüzden sorunu buldum. Şu beyan

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; 
/

- - PL/SQL olmalıdır takiben
EXECUTE IMMEDIATE 'SELECT ArtifactTypes_id_seq.nextval FROM dual';
değiştirildi
SELECT ArtifactTypes_id_seq.nextval into temp_seq FROM dual;

için ve işe yaradı !!

5

Eğer, örneğin başlangıç ​​değeri atamak için madde ile başlar kullanımı, yeniden oluşturun daha sonra sekans bırakın ve gereken: Ayrıca

CREATE SEQUENCE saas.ArtifactTypes_id_seq 
    START WITH 72; 

, bir sekanstan NEXTVAL seçilmesi otomatik olarak 1 ile bunu artırır

İlgili konular