Új hozzászólás Aktív témák

  • nyunyu
    félisten

    CTAS az emlékeim szerint szabványos szintaxis, mennie kéne nem Oracle DBken is.

    Ha a SELECT után nem * áll, akkor csak a hivatkozott oszlopok fognak bekerülni az új táblába az eredeti adattípussal.
    * esetén minden oszlop másolódik.

    Viszont arra figyelni kell, hogy a másolat táblán csak a mezők típusai fognak másolódni.
    Constraintek (primary key, foreign key..), indexek NEM, azokat neked kell kézzel létrehozni, figyelve arra, hogy ezek nevei nem egyezhetnek az eredeti táblán használt constraintek, indexek neveivel!

    CTAS végére írt WHERE mögé írt feltétellel tudod megadni, hogy melyik sorokat másolja át az eredeti táblából.
    Ha nincs WHERE, akkor mindent másol, de ha pl. WHERE 1=2;-t írsz, akkor csak a táblaszerkezet fog létrejönni, adatok nélkül.

    Ja, CTAS nem csak tábla másolásra jó.

    Pl. van egy giga lekérdezésed, ami sok táblából lapátol össze adatot, akkor a konkrét végeredményt is el tudod úgy menteni, hogy a SELECT elé írod, hogy CREATE TABLE <táblanév> AS

    Itt persze figyelni kell arra, hogy az eredeti lekérdezésben minden mezőnév egyedi legyen.
    Meg arra is figyelni kell, hogy az eredményhalmazban szereplő leghosszabb string alapján határozza meg a számított VARCHAR() mezők hosszát, így ha a létrehozott táblába akarsz később insertálni, akkor nem biztos, hogy bele fog férni ugyanannak a lekérdezésnek az eredménye, ha mondjuk egy oszlopba két stringet fűzöl össze, aztán később hosszabb stringek lesznek a forrás táblákban...

Új hozzászólás Aktív témák