Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wstawianie wielu wierszy z sekwencją w Oracle

Ograniczenia dotyczące wstawek wielostolikowych obejmują:

  • Nie można określić sekwencji w żadnej części wielotabelowej instrukcji INSERT. Wstawianie wielu tabel jest traktowane jako pojedyncza instrukcja SQL. Dlatego pierwsze odwołanie do NEXTVAL generuje następną liczbę, a wszystkie kolejne odwołania w instrukcji zwracają tę samą liczbę.

To nie do końca prawda — możesz użyć sekwencji, po prostu zawsze otrzymuje tę samą wartość, więc przydatne może być tworzenie rekordów nadrzędnych i podrzędnych za jednym razem, odwołując się do tej samej sekwencji.

Jeśli chcesz nadal używać insert all mogłeś obejdź to, używając niedeterministycznej funkcji, która pobiera wartość sekwencji:

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              

Ale to trochę niezręczne. Prawdopodobnie lepiej będzie, jeśli użyjesz indywidualnych instrukcji wstawiania — użycie wielotabelowego wstawiania do pojedynczej tabeli i tak nie daje wiele korzyści — lub wyzwalacza do ustawiania unikalnej kolumny z sekwencji lub widoku CTE/wbudowanego do generowania wartości do wstawienia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wybrać z listy wartości w Oracle?

  2. Zablokuj bazę danych Oracle przed uruchomieniem skryptów usuwania/ładowania danych

  3. ORA-01653:nie można rozszerzyć stołu w przestrzeni tabel ORA-06512

  4. Czy Oracle zezwala na opcję niezatwierdzonego odczytu?

  5. Ustawianie limitu czasu sieci dla połączenia JDBC