sql >> Database teknologi >  >> RDS >> Oracle

Indsættelse af flere rækker med sekvens i Oracle

Begrænsningerne for multitable-indsatser omfatter:

  • Du kan ikke angive en sekvens i nogen del af en multitable insert-sætning. En multitable-indsættelse betragtes som en enkelt SQL-sætning. Derfor genererer den første reference til NEXTVAL det næste tal, og alle efterfølgende referencer i sætningen returnerer det samme tal.

Det er ikke helt rigtigt - du kan bruge en sekvens, den får bare altid den samme værdi, så det kan være nyttigt at oprette overordnede og underordnede poster på én gang ved at henvise til den samme sekvens.

Hvis du vil fortsætte med at bruge insert all du kunne omgå det ved at bruge en ikke-deterministisk funktion, der får sekvensværdien:

CREATE FUNCTION get_seq RETURN NUMBER IS
BEGIN
  RETURN postal_code_seq.nextval;
END;
/

INSERT ALL
  INTO POSTAL_CODE( postal_code,description)
    VALUES(get_seq,'Coimbatore')
  INTO POSTAL_CODE (postal_code,description)
    VALUES(get_seq,'Mumbai') SELECT * FROM DUAL;

2 rows inserted.

SELECT * FROM postal_code;

                            POSTAL_CODE DESCRIPTION        
--------------------------------------- --------------------
                                      1 Coimbatore          
                                      2 Mumbai              

Men det er lidt akavet. Du er sandsynligvis bedre stillet ved at bruge individuelle insert-udsagn - at bruge en multitable-indsættelse i en enkelt tabel giver dig ikke meget alligevel - eller en trigger til at indstille den unikke kolonne fra sekvensen, eller en CTE/inline-visning til at generere værdierne at indsætte.



  1. 2 måder at returnere den julianske dag i SQLite

  2. Hvordan Asind() virker i PostgreSQL

  3. Installation af MySQL Python på Mac OS X

  4. COS() eksempler i SQL Server