2017-07-18 5 views
1

Ich möchte mehr als eine Zeile in Oracle einfügen. Aber es verwirrt mich: ich nichtWie fügt man in Oracle mehrere Zeilen mit Sequenz ein?

select seq_table1.nextval into table1 form dual 

weil das das tabelle1 ein neuer zu sein braucht verwenden kann. Ich muss einige Zeilen in die exisate-Tabelle1 einfügen.

Und ich kann auch nicht

insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE) 
      (select seq_paper.nextval,'Multi 8000',1 from dual 
union all select seq_paper.nextval,'Multi 8001',1 from dual) 

verwenden, weil Orakel mir das sagen:

Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in the 
following constructs: 
■ A SELECT statement that is combined with another SELECT statement with the 
UNION, INTERSECT, or MINUS set operator ; 
...and other constructs 
+0

vielen Dank, werde ich zu eidt lernen, es mit Abschlag –

Antwort

2

Sie können die select so umformulieren, dass die nextval ist nicht in einer union.

Das Ergebnis wäre so etwas wie:

insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE) 
    select seq_paper.nextval, NULL, a, b from 
     (select 'Multi 8000' a, 1 b from dual 
     union all 
     select seq_paper.nextval,'Multi 8001',1 from dual) 
1

benutzen, wenn NEXTVAL und erstellen Daten in Sub-Abfrage:

SQL> CREATE TABLE pager (PAG_ID NUMBER,PAG_PARENT VARCHAR2(10), PAG_ACTIVE NUMBER); 
Table created 

SQL> CREATE SEQUENCE seq_paper START WITH 1 INCREMENT BY 1 MINVALUE 1 NOMAXVALUE; 
Sequence created 

SQL> 

SQL> INSERT INTO pager 
    2  (pag_id, 
    3  pag_parent, 
    4  pag_active) 
    5  SELECT seq_paper.nextval, 
    6    pag_parent, 
    7    pag_active 
    8  FROM (SELECT 'Multi 8000' pag_parent, 
    9      1 pag_active 
10    FROM dual 
11    UNION ALL 
12    SELECT 'Multi 8001', 
13      1 
14    FROM dual); 
2 rows inserted 

SQL> 
Verwandte Themen