2. rész, alapvető különbségekTegyü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ázisMS 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 IdentityHa 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. SzintaxisJó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-9602http://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