sql >> Databáze >  >> RDS >> Oracle

Create table with select union nemá žádná omezení

Pomocí select ... as ... pro vytvoření tabulky nikdy kopíruje omezení. Pokud chcete, aby nová tabulka zdědila omezení z původních tabulek, musíte nová omezení vytvořit ručně.

Jak zdůrazňuje @Davek, not null omezení se zkopírují z jedné tabulky select ... as ... . Domnívám se, že je to proto, že jsou to atributy sloupců i omezení. Jakmile však sloupec obsahuje více než jeden zdroj, je rozumné, aby se Oracle nepokoušel použít toto omezení.

V odpovědi na doplňující otázku „by bylo možné dát tableC stejná omezení buď z tableA nebo tableB , po CTA?":

Samozřejmě je to možné, ale neexistuje jediný příkaz, jak to udělat. Můžete napsat proceduru, která používá dynamické SQL ke kopírování omezení. Pokud však nechcete toto chování automatizovat, bude obecně jednodušší extrahovat DDL pomocí IDE a změnit název tabulky.




  1. Dotaz MySQL pro výběr dat, kde pole má hodnotu NULL nebo hodnota data pole není větší než jiné datum

  2. Jak zřetězit více řádků?

  3. Naučte se používat příkaz CASE v SQL

  4. Jak přepnout databáze v psql?