Het type gegevens dat in een kolom in een Oracle-tabel kan worden opgeslagen, wordt bepaald door het gegevenstype die u opgeeft bij het maken of wijzigen van het schema van de tabel. De gegevenstypedeclaratie dicteert het soort waarden dat in die kolom is toegestaan, en Oracle handhaaft deze beperking.
Hier volgt een overzicht van de belangrijkste factoren:
* Declaratie van gegevenstype: De primaire determinant is het 'data_type' gekozen tijdens het maken van de tabel (met behulp van 'CREATE TABLE') of wijziging (met behulp van 'ALTER TABLE'). Bijvoorbeeld:
```sql
MAAK TAFEL medewerkers (
werknemer_id NUMBER(6), -- Getal met precisie 6
voornaam VARCHAR2(20), -- Tekenreeks met variabele lengte van maximaal 20 tekens
achternaam VARCHAR2(25) CONSTRAINT nn_laatste_naam NOT NULL, -- Tekenreeks met variabele lengte, niet nul
e-mail VARCHAR2(25),
hire_date DATE, -- Datum en tijd
salaris NUMBER(8,2), -- Getal met precisie 8, 2 decimalen
...
);
```
In dit voorbeeld kan 'werknemer_id' alleen cijfers bevatten, kunnen 'voornaam' en 'achternaam' tekenreeksen van variabele lengte bevatten, kan 'huurdatum' datums bevatten en kan 'salaris' getallen met decimalen bevatten.
* Ingebouwde gegevenstypen van Oracle: Oracle biedt een rijke set ingebouwde gegevenstypen die tegemoetkomen aan verschillende behoeften op het gebied van gegevensopslag. Enkele van de meest voorkomende zijn:
* Tekengegevenstypen:
* `VARCHAR2(size)`:tekenreeks met variabele lengte (door Oracle aanbevolen tekentype). `size` specificeert de maximale lengte in bytes of tekens (afhankelijk van de tekenset van de database). Gebruik dit voor algemene tekstgegevens.
* `NVARCHAR2(size)`:nationale tekenreeks met variabele lengte. Wordt gebruikt voor het opslaan van Unicode-gegevens. `size` specificeert de maximale lengte in tekens.
* `CHAR(size)`:tekenreeks met een vaste lengte. Pads met spaties tot de opgegeven `grootte`. Minder vaak gebruikt dan `VARCHAR2`.
* `NCHAR(size)`:Nationale tekenreeks met een vaste lengte.
* `CLOB`:Karakter groot object. Voor het opslaan van grote hoeveelheden tekstgegevens (tot 4 GB). Slaat de feitelijke gegevens afzonderlijk op, met behulp van een locator in de tabel.
* `NCLOB`:Groot object met nationaal karakter. CLOB voor Unicode-gegevens.
* Numerieke gegevenstypen:
* `NUMBER(precisie, schaal)`:numeriek gegevenstype voor algemene doeleinden. 'precisie' is het totale aantal cijfers en 'schaal' is het aantal cijfers rechts van de komma.
* `NUMBER`:Standaard ingesteld op maximale precisie en schaal.
* `BINARY_FLOAT`:32-bits drijvende-kommagetal.
* `BINARY_DOUBLE`:64-bits drijvende-kommagetal.
* Datum- en tijdgegevenstypen:
* `DATE`:Slaat datum- en tijdinformatie op.
* `TIMESTAMP`:slaat datum en tijd op met fracties van seconden. Er bestaan varianten voor ondersteuning van tijdzones (bijvoorbeeld `TIMESTAMP WITH TIME ZONE`, `TIMESTAMP WITH LOCAL TIME ZONE`).
* `INTERVAL JAAR TOT MAAND`:Slaat een tijdsperiode op in jaren en maanden.
* `INTERVAL DAG TOT SECONDE`:Slaat een tijdsperiode op in dagen, uren, minuten en seconden.
* Binaire gegevenstypen:
* `BLOB`:binair groot object. Voor het opslaan van grote hoeveelheden binaire gegevens (tot 4 GB), zoals afbeeldingen, audio of video. Slaat de feitelijke gegevens afzonderlijk op, met behulp van een locator in de tabel.
* `BFILE`:Binair bestand. Slaat een verwijzing op naar een binair bestand dat *buiten* de database is opgeslagen (op het bestandssysteem van het besturingssysteem). De database slaat alleen de locatie van het bestand op, niet de bestandsinhoud zelf.
* RowID-gegevenstypen:
* `ROWID`:Een pseudo-kolom die het adres van een rij in een tabel bevat. Het is uniek binnen de database en zorgt voor de snelste toegang tot een bepaalde rij.
* `UROWID`:Een universele rij-ID, die ROWID's van geïndexeerde, georganiseerde tabellen kan vertegenwoordigen.
* XML-gegevenstype:
* `XMLTYPE`:Voor het opslaan van XML-gegevens. Oracle biedt methoden voor het opvragen en manipuleren van XML die in dit gegevenstype is opgeslagen.
* JSON-gegevenstype:
* `JSON`:Voor het opslaan van JSON-gegevens. Beschikbaar in latere versies van Oracle.
* Precisie en schaal (voor NUMBER): Bij gebruik van het gegevenstype 'NUMBER' zijn de parameters 'precisie' en 'schaal' cruciaal.
* `precisie`:Specificeert het totale aantal cijfers (inclusief zowel vóór als na de komma).
* `schaal`:Specificeert het aantal cijfers rechts van de komma.
Met 'NUMBER(7,2)' kunt u bijvoorbeeld getallen opslaan met maximaal 7 cijfers, waarbij 2 van deze cijfers achter de komma staan. Geldige waarden zijn 12345,67, 123,45 of 0,01. Ongeldige waarden zijn 123456.7 of 1.234567.
* Databasetekenset: De tekenset van de database beïnvloedt de opslag van tekengegevenstypen (vooral `VARCHAR2` en `CHAR`). Het bepaalt de maximale lengte van een `VARCHAR2`-kolom in termen van *bytes* of *tekens*. In oudere versies werd `VARCHAR2(size)` geïnterpreteerd als bytes. Recentere versies van Oracle, met de initialisatieparameter `MAX_STRING_SIZE=EXTENDED`, maken het mogelijk dat `VARCHAR2(size)` als tekens wordt geïnterpreteerd. Met behulp van Unicode-tekensets (zoals AL32UTF8) kunt u tekens uit meerdere talen opslaan.
* Beperkingen: Hoewel beperkingen het gegevenstype niet *definiëren*, kunnen ze wel de toegestane waarden in een kolom verder beperken. Bijvoorbeeld:
* `NOT NULL`:Zorgt ervoor dat een kolom geen NULL-waarden kan bevatten.
* `UNIQUE`:Zorgt ervoor dat alle waarden in een kolom (of reeks kolommen) uniek zijn.
* `PRIMARY KEY`:Identificeert een kolom (of een reeks kolommen) als de unieke identificatie voor elke rij in de tabel.
* `FOREIGN KEY`:Brengt een relatie tot stand tussen twee tabellen, waarbij wordt verzekerd dat waarden in de refererende sleutelkolom(men) bestaan in de primaire sleutelkolom(men) waarnaar wordt verwezen.
* `CHECK`:Hiermee kunt u een aangepaste regel definiëren waaraan de waarden in een kolom moeten voldoen. Bijvoorbeeld:`CHECK (salaris> 0)` om ervoor te zorgen dat de salarissen altijd positief zijn.
* Impliciete gegevenstypeconversie: Oracle kan tijdens vergelijkingen of toewijzingen soms impliciet datatypen converteren. Oracle kan bijvoorbeeld impliciet een tekenreeks naar een getal converteren als u deze vergelijkt met een numerieke kolom. Het is echter over het algemeen het beste om expliciete gegevenstypeconversiefuncties te gebruiken (zoals `TO_NUMBER`, `TO_CHAR`, `TO_DATE`) om onverwacht gedrag te voorkomen en de gegevensintegriteit te garanderen.
Samenvattend is het voor een kolom gedeclareerde gegevenstype het fundamentele controlemechanisme dat bepaalt welk soort gegevens u in die kolom in een Oracle-database kunt opslaan. Het begrijpen van de gegevenstypen en hun eigenschappen van Oracle is essentieel voor het ontwerpen van efficiënte en betrouwbare databaseschema's. |