sql >> Databasteknik >  >> RDS >> Oracle

Hur man infogar flera rader i samma tabell-Oracle 10g

En INSERT VALUES uttalande infogar alltid exakt 1 rad. Om du vill infoga flera rader med hårdkodade värden är den vanligaste metoden helt enkelt att köra två separata INSERT uttalanden.

insert into t1 values(131309,'HP','20-FEB-04',2000000,1235);
insert into t1 values(131310,'HT','20-APR-14',120020,1234);

Om du verkligen ville kan du välja dina hårdkodade värden från dual och gör sedan en INSERT SELECT

insert into t1
  select 131309, 'HP', '20-FEB-04',2000000,1235 from dual
  union all
  select 131310,'HT','20-APR-14',120020,1234 from dual

Eller så kan du göra en INSERT ALL

insert all 
  into t1 values(131309,'HP','20-FEB-04',2000000,1235)
  into t1 values(131310,'HT','20-APR-14',120020,1234)
  select * from dual

Personligen skulle jag bara använda två påståenden.

Även om detta inte är relaterat till din fråga, ett par kommentarer

  • Alltid, alltid lista ut kolumnerna i din insert påstående. Du kommer att göra din SQL mycket mer robust så att om du lägger till nya kolumner i framtiden som tillåter NULL värden dina uttalanden kommer fortfarande att fungera. Och du slipper många buggar när kolumnlistan finns där istället för att hoppas att någon kommer ihåg ordningen på kolumner i tabellen.
  • Om du infogar ett värde i ett date kolumn, använd ett datum, inte en bokstavlig sträng som representerar ett datum. Att förlita sig på implicit datatypkonvertering är en källa till många buggar. Använd en explicit to_date eller använd bokstavliga ANSI-datum. Och använd 4-siffriga årtal.



  1. SQL Infoga rad och kopiera infogat Auto-Inkrement-ID till en annan kolumn

  2. Varför är låsning på bordsnivå bättre än låsning på radnivå för stora bord?

  3. Vad är SQL Server-ekvivalenten för ELT() i MySQL?

  4. Varför skulle denna MySQL-fråga som använder rand() inte ge några resultat ungefär en tredjedel av gångerna?