2. rész, alapvető különbségek
Tegyük fel, hogy az első részt elolvastuk, és megnéztük a tutorialt, felfedeztük a webes adminisztációt. Biztos találkoztunk néhány furcsasággal.
1. Új adatbázis
MS SQL-ben azt szoktuk meg, hogy ha egy új alkalmazást fejlesztünk, vagy ki akarunk próbálni valamit, akkor erre létrehozunk egy új adatbázist. Management studio-ban a Databases-en jobbklikk, és pillanatok alatt készen van. Itt, oracle-ben kicsit mást jelent az, hogy "új adatbázis", más a fogalom. A webes adminisztrációval tudunk ilyet csinálni, de totál mást jelent. Azt jelenti hogy egy új adatbázis instance-t hozunk létre. Egy új service-ünk is lesz, ami éppúgy sok100 mega memóriát megzabál. Nem ezt szeretnénk.
Ami nekünk kell, az egy új Schema. Ez az első fogalom, amit MSSQL ismeretekkel a legnehezebb megszokni. Úgy működik az egész, hogy egy új USER-t kell létrehoznunk, ami azzal egyenértékű, hogy új SHEMA-t hozunk létre. Tehát egy Schema egy User-hez tartozik. Még egyszer, példával. Ha van egy raktár programunk, meg egy webshop-unk, akkor MSSQL-ben létrehozunk egy WMS adatbázist, meg egy EShop adatbázist. És ehhez adogatunk hozzá SQL usereket, adunk nekik jogosultságot, vagy domain usereket használunk, és nekik adunk jogokat. Na, itt, oracle-ben ez nem így van, felejtsük is el ilyen SQL-es emlékeinket kicsit. Itt létrehozunk egy WMS usert, schema-t, és egy EShop usert, schema-t. Ha fejlesztői szemmel nézzük, akkor semmi extra nincsen benne, ha majd az SQL developert használjuk, nagyjából hasonlóan kezeljük mind a kettőt. Kapcsolódunk a szerverhez egy connection-el (aminek a usere pl WMS), és akkor lényegében csak azokat a táblákat/eljárásokat stb. fogjuk látni, amelyek abban a sémában vannak. Pontosabban más séma objektumait is láthatjuk, ha van hozzá jogunk, pl ha SYS userrel csattanunk neki a servernek, mindent látunk! Ez a dolog tehát ne nagyon zavarjon össze minket, nem kell túlspirázni, ez így van és kész. Azt, hogy ennek a hátterében mi van, egyelőre nem kell tudnunk, kezdetnek elég ha megszokjuk.
2. Típusok (Int, Bit, Binary, VarChar)
Int:
Ha MSSQL-ben egy táblát létrehoztunk, akkor az esetek nagy többségében az első mező amit felvettünk az egy Id, ami INT. Na, hát itt olyan sincs. Ugyan némely fejlesztő eszközben ezt ki lehet választani mint opció, nem jelent semmit, ha utána megnézzük a táblánkat kiscriptelve, látjuk hogy NUMBER lett az Id. Ez egy kicsit zavaros, mert ha decimal-t akarunk tárolni, akkor az is NUMBER, a hosszával lehet variálni. Ott lesz ez majd érdekes, ha az ODP .NET providert használjuk .NET kódból, úgy kell majd, hogy ha int-et várunk, akkor az OracleDBType.Int32, ha decimal-t akkor az OracleDBType.Decimal, a tárolt eljárásban meg mindkettő NUMBER. Erről egyelőre elég most ennyi.
Bit:
Az is furcsa lehet, hogy nincs Bit típus. Nincs Boolean. Egyik sincs. Tehát ha True - False értékeket akarunk használni, akkor arra is NUMBER-t javasolnak, amiben 0 meg 1 lesz...
Binary:
Ilyen típust sem találunk. Ha bináris adatot akarunk tárolni, akkor arra a BLOB nevű mezőt kell használnunk, ez a Binary Large Object.
VarChar:
Már nem meglepő, de ilyen sincs. Helyette a VARCHAR2 típust használjuk. Ha hosszú szöveget akarunk tárolni, arra meg a CLOB való, Character Large Object. Arra kell vigyázni a VARCHAR2-nél, hogy amikor a mezőnek megadjuk hogy milyen típusú legyen, és a hosszát is beállítjuk, akkor az alapból nem a karaktert jelenti, hanem hogy BYTE-ban mekkora lehet max. Tehát ki kell választani azt is, hogy CHAR, és így a hossza karakterben értendő. A típusokról itt egy nagyon jó összefoglaló táblázat, érdemes elolvasni, mi milyen hosszú, mi mit tud. Ha MSSQL szemmel akarjuk nézni, készítettem egy megfeleltető táblázatot. Ha valaki hibát talál benne, írja meg kommentben.
3. Autogenerated Identity
Ha egy Unique Id-t akarunk létrehozni, amivel nem akarunk különösebben törődni, azt akarjuk hogy auto-generated legyen, nem triviális Oracle-ben annyira, mint MSSQL-ben. Utóbbiban megadjuk a mező definiálásakor, hogy auto-generated legyen, és ennyi. Oracle-ben nincs ilyen. Ott ún. Szekvenciát kell erre használni. Külön létre kell hozni egy szekvenciát, ami kezeli a mezőben levő NUMBER folyamatos növekedését. Létrehozás, használat. Lehet könnyíteni a használatát, BEFORE Insert Triggert létrehozni, és akkor tényleg nem is kell vele foglalkozni, csak úgy nehezebb az új Id-t visszaadni paraméterként.
4. Szintaxis
Jónéhány eltérés van a szintaxisban is. Mivel ez sok, néhány link, ahol olvashatunk ezekről, később visszatérünk rá.
http://it.toolbox.com/blogs/oracle-guide/what-is-the-difference-between-oracle-sql-and-plsql-9602
http://jopinblog.wordpress.com/2007/04/24/oracle-plsql-equivalents-for-ms-sql-server-t-sql-constructs/
Megjegyzés:
Foly köv., SQL Developer használattal
Feliratkozás:
Megjegyzések küldése (Atom)
Ami hátránynak látszik, az néha előny is. Míg MS SQL-ben jobb hiján egy "ős" táblát kell létrehozni akkor, ha az ember olyan táblákat akar, ahol az egyedi kulcs diszjunkt, ha a teljes halmazt nézzük (tehát pl egy táblában tárolod az összes kulcsot és a típust hozzá, majd tipusonként külön táblát csinálsz, ahol a technikai kulcs egy idegenkulcs erre a táblára). Itt elég ez a szekvencia. Az érték felhasználása, amit a szekvenciából veszel "szabaon választott", így képes vagy segédtábla nélkül diszjunkt tábla ID-kat gyártani.
VálaszTörlés