2012-07-26 9 views
7

私はliquibaseを使用してスキーマを管理しています。私にはたくさんの挿入文があります。プライマリID番号をハードコードしました。すべての挿入が完了したら、シーケンス値をテーブルのプライマリキーの最大値よりも1だけ大きくする必要があります。このために、私は以下のようにPL/SQLを書いた。私はそれはまだ0Oracle:シーケンスを特定の値に設定する

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

をインクリメントselect ArtifactTypes_id_seq.nextval from dual;を実行したときただし、DBMS_OUTPUTは、次のような出力を提供します - 私は行方不明です
Executed "ALTER SEQUENCE saas.ArtifactTypes_id_seq INCREMENT BY 71"

何か?私は間違ったやり方をしていますか? 日本語:SQLDeveloperからこれらのSQLを実行しようとしました。あなたが例えば、初期値を代入する句で始まるを使用し、それを順序を削除してから再作成する必要があり

答えて

8

私はこの問題を発見しました。次の文

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である必要があり、次の
EXECUTE IMMEDIATE 'SELECT ArtifactTypes_id_seq.nextval FROM dual';

SELECT ArtifactTypes_id_seq.nextval into temp_seq FROM dual;

に変更し、それが働きました!

5

CREATE SEQUENCE saas.ArtifactTypes_id_seq 
    START WITH 72; 

はまた、シーケンスからNEXTVALを選択すると、自動的に1で、それをインクリメント

関連する問題