2011-12-03 3 views
8

Bir INSERT TÜM INTO kullanarak 40 satır eklemek çalışıyorum ve vekil anahtarın nasıl ekleneceğinden emin değilim. İşte VALUES INTO sonra benzersiz kısıtlama ihlali olsun başka eklerseniz ben şimdiHepsini aç Hepsini kapa Bu Sayfada Belirtiler Anlık Anahtar için INTO INTO ve Sequence.nextval

BEGIN 
    INSERT ALL 

    INTO question(question_id) 
    VALUES (question_seq.nextval) 
END 

yanı da bu.

BEGIN 
    INSERT ALL 

    INTO question(question_id) 
    VALUES (question_seq.nextval) 

    INTO question(question_id) 
    VALUES (question_seq.nextval) 
END 
Ben benzersiz kısıtlama ihlali önlemek, böylece ben dizilerdir VALUES INTO her biri için nextval değerini güncellemek nasıl

? Nextvale'in kendini otomatik olarak güncelleyeceğini varsaydım.

GÜNCELLEME:

ilk ben ve bir değer döndüren bir işlev oluşturdu ben bu işlevi seslendi: Bu ben ile geldi çözüm bu işlemek için en iyi yoldur ama burada eğer bilmiyorum Bu ben ile geldi çözüm bu işlemek için en iyi yoldur ama burada eğer DEĞERLER maddesinin kimliği alanında

create or replace 
FUNCTION GET_QUESTION_ID RETURN NUMBER AS 
num NUMBER; 
BEGIN 
    SELECT UHCL_QUESTIONS_SEQ.nextval 
    INTO num 
    FROM dual; 
    return num; 
END GET_QUESTION_ID; 

INSERT ALL 
INTO question(question_id) 
VALUES (GET_QUESTION_ID()) 
INTO question(question_id) 
VALUES (GET_QUESTION_ID()) 
+1

"Tümünü ekle" seçeneğinizle bir '' '' '' fıkralarına ihtiyacınız var mı? Tüm ekle için değil – Raihan

+0

@Raihan. – Robert

+0

@Raihan Bu konuda üzgünüm ... haklısın, sadece seçimi seçmedim, ama bir tane var. – Robert

cevap

0

Ben DEĞERLER maddesinin kimliği alanında bu işlevi denilen ve bir değer döndürür eklemek istediğiniz diğer sütunlar. Muhtemelen başka bir UNION ALL sorgusu oluşturmanız ve LEVEL veya ROWNUM ile birleştirmeniz gerekir.

ilk düşüncem böyle bir şey yapmak için oldu:

insert into question(question_id) 
select question_seq.nextval value from dual 
union all 
select question_seq.nextval from dual; 

Ama nedeniyle restrictions on sequence values için, ORA-02287: sequence number not allowed here üretir. Bu arada


, kendi INSERT ALL eserler bir alt sorgu olmadan emin misin? Bir alt sorgu olmalı ima hatayı ORA-00928: missing SELECT keyword ve 11.2 manual gelen şemasını getir: enter image description here

0

bilmiyorum:

ilk ben bir işlevi yarattı

insert into question(question_id) 
select question_seq.nextval from 
(
    select level from dual connect by level <= 40 
); 

o vardır, özellikle de çok uygun bir biçim olmasa da: Böyle bir şey kullanabilirsiniz

create or replace 
FUNCTION GET_QUESTION_ID RETURN NUMBER AS 
num NUMBER; 
BEGIN 
    SELECT UHCL_QUESTIONS_SEQ.nextval 
    INTO num 
    FROM dual; 
    return num; 
END GET_QUESTION_ID; 

INSERT ALL 
INTO question(question_id) 
VALUES (GET_QUESTION_ID()) 
INTO question(question_id) 
VALUES (GET_QUESTION_ID()) 
1

bir SQL Server arka plandan olmak, her zaman temelde KİMLİĞİNİ taklit tablo içinde bir tetik oluşturduk işlevsellik. Tetikleyici açıldıktan sonra SK, otomatik olarak dizilimden aynı şekilde oluşturulur ve bunun için endişelenmenize gerek yoktur.