Relationsdatabaser og SQL

Download Report

Transcript Relationsdatabaser og SQL

Relationsdatabaser og SQL
Del 3 af 4:
Data Manipulation Language (DML) i SQL
Aalborg Universitet, d. 6. september 2006
B ent Mølle r Ma dse n
Tegn-forklaring
Denne skrifttype er lig kode
STORE BOGSTAVER er lig Oracle kommandoer
<tekst> betyder at tekst inkl. større-end og
mindre-end tegn skal erstattes med den
faktiske tekst/værdi.
[tekst] betyder at tekst er valgfri og kan
udelades. De firkantede parenteser skal aldrig
skrives i koden.
{tekst1|tekst2} betyder at en af teksterne
adskilt af de lodrette streger skal vælges. De
krøllede parenteser skal aldrig skrives i koden.
Elementer i en tabel
Postnumre
Postnr
Bynavn
Postnumre
Postnr
Bynavn
9000
Aalborg
9000
Aalborg
9760
Vrå
9760
Vrå
8000
Århus C
8000
Århus C
4180
Sorø
4180
Sorø
7430
Ikast
7430
Ikast
SQL til tabeldata
Data Manipulation Language (DML)
INSERT
UPDATE
DELETE
SELECT
(MERGE)
(TRUNCATE)
Vedrører de faktiske data i tabeller
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Insert
INSERT INTO <tabelnavn>
[(<kolonner>)]
VALUES
(<værdier>);
Bemærk, tomt felt
Kunder
Id
Number
Kunde
Varchar2
Postnr
Number
Dato
INSERT INTO kunder
VALUES
(115, 'Føtex', null, '13-08-2006');
INSERT INTO kunder
(id, kunde)
VALUES
(116, 'Netto');
Date
Insert data fra anden tabel
INSERT INTO <tabelnavn>
[(<kolonner>)]
SELECT <kolonnenavne> FROM <tabelnavn>;
INSERT INTO kunder_kopi
(id, kunde)
SELECT (id, kunde) FROM kunder;
Bemærk at nøgleordet VALUES udelades ved
indsætning af data fra en anden tabel
Regler for (indsættelse af) data
Værdierne adskilles med komma ,
Enkelt anførselstegn ' ' omkring værdier der
indsættes (ikke krav ved NUMBER datatype)
Der skal (naturligvis) tages hensyn til store
og små bogstaver
Ved manuel dataindsættelse kan kun én
række oprettes for hver INSERT kommando
NULL indtastes for et blankt felt.
Der skal altid indtastes data i kolonner med
NOT NULL betingelse
Regler for (indsættelser af) datoer
Da datoer kan antage mange forskellige formater, er det
nødvendigt at definere det anvendte datoformat.
Direkte i INSERT kommandoen vha. TO_DATE funktionen
INSERT INTO kunder VALUES
(115, 'Føtex', null, TO_DATE('13-08-2006', 'DDMM-YYYY'));
Eller ved at definere et datoformat for hele sessionen.
ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MM-YYYY';
INSERT INTO kunder VALUES
(115, 'Føtex', null, '13-08-2006');
Funktionen SYSDATE indsætter dags dato i kolonnen.
INSERT INTO kunder VALUES
(115, 'Føtex', null, SYSDATE);
Sekvenser – fortløbende numre
Sekvenser anvendes hovedsageligt til at danne
indholdet i syntetiske primærnøgler
CREATE SEQUENCE <sekvensnavn>
[INCREMENT BY <antal>]
[START WITH <nummer>];
DROP SEQUENCE <sekvensnavn>
SELECT * FROM user_sequences;
CREATE SEQUENCE kunder_seq
INCREMENT BY 1
START WITH 1000;
INSERT INTO kunder (id, kunde) VALUES
(kunder_seq.nextval, 'Føtex');
Opdatering af data
UPDATE <tabelnavn>
SET <kolonnenavn> = <værdi>
[WHERE <betingelse>];
UPDATE kunder
SET kunde = 'Bilka',
postnr = 9000
WHERE kunde = 'A-Z';
Hvis WHERE-sektionen udelades opdateres alle
rækker i tabellen!
Sletning af data
DELETE [FROM] <tabelnavn>
[WHERE <betingelse>];
DELETE FROM kunder
WHERE kunde = 'Føtex';
TRUNCATE TABLE kunder;
TRUNCATE sletter uden mulighed for at foretage
rollback/fortryde, men er til gengæld langt
hurtigere end DELETE ved større datasæt.
Gemme og fortryde
Når der arbejdes med data i tabeller gemmes
ændringer ikke automatisk.
COMMIT;
Gemmer ændringer
SAVEPOINT <navn på savepoint>;
Opretter midlertidigt punkt der kan fortrydes
tilbage til
ROLLBACK [TO <navn på savepoint>];
Fortryd ændringer siden sidste commit eller
bestemt savepoint
Udtrække data
SELECT
FROM
[WHERE]
[GROUP BY]
[HAVING]
[ORDER BY]
- Hvilke data vil jeg have?
- Hvor skal data komme fra?
- Hvilke betingelser skal være
gældende?
- Hvordan skal data
grupperes?
- Hvilke betingelser skal være
gældende for grupper?
- Hvordan skal data sorteres?
Komplet udtræk
SELECT
*
FROM
postnumre;
SELECT
postnr, bynavn
FROM
postnumre;
Postnumre
Postnr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Resultat
Postnr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Udtræk på delmængde af kolonner projection
SELECT
bynavn
FROM
postnumre;
Postnumre
Postnr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Resultat
Bynavn
Aalborg
Vrå
Århus C
Sorø
Ikast
Sortering af output – stigende (asc)
eller faldende (desc)
SELECT
*
FROM
postnumre
ORDER BY
postnr [ASC]
Postnumre
Postnr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Resultat
Postnr
Bynavn
4180
Sorø
7430
Ikast
8000
Århus C
9000
Aalborg
9760
Vrå
Udtræk på delmængde af rækker restrict
SELECT
*
FROM
postnumre
WHERE
postnr > 8000;
Postnumre
Postnr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Resultat
Postnr
Bynavn
9000
Aalborg
9760
Vrå
Betingelser i WHERE
Grundlæggende typer af betingelser:
Sammenligning
Interval
Mængde medlemskab
Mønster-match
Test for NULL
Joins, der fortæller hvordan data fra flere
tabeller hænger sammen kan også foretages i
WHERE-sektionen, men generelt anbefales det
at foretage joins direkte i FROM-sektionen.
Sammenligning
Følgende type sammenligninger kan foretages
mellem kolonner og/eller værdier
=
<
>
<=
>=
!=
<>
Lig med
Mindre end
Større end
Mindre end eller lig med
Større end eller lig med
Forskellig fra
Forskellig fra
Interval og mængde medlemskab
Interval inkl. start- og slutværdi (BETWEEN):
SELECT <kolonnenavne> FROM <tabelnavn>
WHERE <kolonnenavn>
BETWEEN <kolonne1 eller værdi1> AND
<kolonne2 eller værdi2>;
Mængde medlemsskab (IN):
SELECT <kolonnenavn> FROM <tabelnavn>
WHERE <kolonnenavn>
IN (<kolonne1 eller værdi1>, <kolonne2
eller værdi2>, …);
Mønster-match
Mønster-match - jokertegn:
hvis den præcise værdi ikke kendes
eller værdier med bestemte karakteristika ønskes
WHERE <kolonnenavn> LIKE '<%_>';
_ = præcis én vilkårlig karakter
% = 0 til mange vilkårlige karakterer
Eks:
SELECT * FROM medarbejdere
WHERE fornavn LIKE 'Ann_'
AND efternavn LIKE '%rist%nsen';
SELECT * FROM medarbejdere
WHERE email like '%@%';
Test for NULL
Test om feltet er tomt eller ej
WHERE <kolonnenavn> IS NULL;
WHERE <kolonnenavn> IS NOT NULL;
Eks:
SELECT kunde_id, kunde
FROM kunder
WHERE tlf IS NOT NULL;
Bemærk forskellene i betingelserne!
WHERE Kunde = 'Bilka’
Finder rækker hvor kundenavnet er præcis ’Bilka’.
WHERE Kunde = 'Bil%’
Finder rækker hvor kundenavnet er præcis ’Bil%’.
WHERE Kunde = 'null’
Finder rækker hvor kundenavnet er præcis ’null’.
WHERE Kunde like 'Bil%’
Finder rækker hvor kundenavnet starter med ’Bil’.
WHERE Kunde is null
Finder rækker hvor kundenavnet er tomt.
Flere samtidige betingelser og
negation af betingelser
Flere betingelser kan kombineres ved
anvendelse af AND og OR i WHERE-sektionen
NOT kan anvendes til at negere en betingelse
(opnå det modsatte resultat)
Evalueringsrækkefølge:
Generelt fra venstre mod højre
Dog evalueres parenteser først
Og NOT evalueres før AND, der evalueres før OR
Select * FROM kunder
WHERE (postnr >= 9000)
AND (kunde = 'Føtex')
OR NOT(kunde != 'Bilka');
Joins
Anvendes til søgning på data fra flere tabeller
Tabellerne samles (”join'es”) via kolonner med
ens indhold
ofte kolonner med fremmed- og primærnøgler
Join kan ske i FROM- eller WHERE-delen
Typer af joins
Naturligt join
Inner join
Outer join (left, right, full)
Kartesisk produkt
Simpelt ”gammeldags” join i WHERE
SELECT
k.kunde, k.postnr, p.bynavn
FROM
postnumre p, kunder k
WHERE
p.postnr = k.postnr
Når samme kolonnenavn forekommer
i begge tabeller skal kolonnen
præciseres med tabelnavnet
Postnumre
Postnr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Kunder
ID
Kunde
Postnr
101
Bilka
9000
Kunde
Postnr
Bynavn
102
Kvickly
Bilka
9000
Aalborg
105
Spar
4180
Spar
4180
Sorø
103
Ikea
5000
Naturligt join på alle enslydende
kolonner
Postnumre
SELECT
k.kunde, postnr, p.bynavn
FROM
postnumre p NATURAL JOIN
kunder k
Postnr
Tabelnavn må IKKE stå foran
join-kolonnen i et naturligt join
Postnr
Bynavn
Bilka
9000
Aalborg
Spar
4180
Sorø
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Kunder
ID
Kunde
Bynavn
Kunde
Postnr
101
Bilka
9000
102
Kvickly
105
Spar
4180
103
Ikea
5000
Inner Join på delmængde af
enslydende kolonnenavne
Postnumre
SELECT
k.kunde, postnr, p.bynavn
FROM
postnumre p JOIN kunder k
USING (postnr)
Postnr
Tabelnavn må IKKE stå foran
join-kolonnen ved USING
Postnr
Bynavn
Bilka
9000
Aalborg
Spar
4180
Sorø
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Kunder
ID
Kunde
Navn
Navn
Postnr
101
Bilka
9000
102
Kvickly
105
Spar
4180
103
Ikea
5000
Inner Join på kolonner med
forskellige navne
SELECT
k.kunde, k.postnr, p.bynavn
FROM
postnumre p JOIN kunder k
ON (p.nr = k.postnr)
Postnumre
Nr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Kunder
ID
Kunde
Postnr
Bynavn
Bilka
9000
Aalborg
Spar
4180
Sorø
Kunde
Postnr
101
Bilka
9000
102
Kvickly
105
Spar
4180
103
Ikea
5000
{Left|right|full} outer join
Postnumre
SELECT
k.kunde, postnr, p.bynavn
FROM
postnumre p NATURAL
RIGHT OUTER JOIN kunder k
{LEFT|RIGHT|FULL} OUTER kan
Postnr
tilføjes til alle typer FROM-joins
Kunde
Postnr
Bynavn
Bilka
9000
Aalborg
Kvickly
Spar
4180
Ikea
5000
Sorø
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Kunder
ID
Kunde
Postnr
101
Bilka
9000
102
Kvickly
105
Spar
4180
103
Ikea
5000
Det kartesiske produkt
SELECT
k.kunde, k.postnr, p.bynavn
FROM
postnumre p CROSS JOIN
kunder k
Resultatet er lig alle kombinationer
af rækkerne fra kildetabellerne
Postnr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Kunder
Kunde
Postnr
101
Bilka
9000
Vrå
102
Kvickly
…
…
105
Spar
4180
5000
Ikast
103
Ikea
5000
Kunde
Postnr
Bynavn
Bilka
9000
Aalborg
Bilka
9000
…
Ikea
ID
Postnumre
Beregninger på kolonner
Alle almindelige regneoperationer
(plus, minus, gange og division)
kan foretages på tal-kolonner
Plus og minus kan også foretages
på datoer for at lægge dage til
eller trække dage fra en dato.
SELECT
postnr – 1000 AS nyt_postnr
FROM
postnumre;
Postnumre
Postnr
Bynavn
9000
Aalborg
9760
Vrå
8000
Århus C
4180
Sorø
7430
Ikast
Resultat
Nyt_postnr
8000
8760
7000
3180
6430
Funktioner
Concatenation sammentrækker data fra flere
felter til et felt:
<kolonnenavn1 eller værdi1> ||
<kolonnenavn2 eller værdi2>
CONCAT(< kolonnenavn1 eller værdi1 >,
<kolonnenavn2 eller værdi2>)
• CONCAT virker kun med to kolonner/værdier af gangen
Eks:
SELECT 'Navn: ' || kunde AS kundenavn
FROM kunder;
Funktioner
Udtræk en delmængde af teksten i et felt.
Tallet m siger hvorfra der skal klippes, mens n
er antal tegn fra m der klippes ud
SUBSTR (<kolonnenavn>, m,n)
SELECT SUBSTR(kunde, 1,3) FROM kunder;
• Viser de første 3 bogstaver i hver kundes navn
Udskift tomme / null værdier med egen
tekst/tal eller indholdet fra en anden kolonne.
NVL(<kolonnenavn>, <kolonnenavn eller
værdi>)
SELECT NVL(kunde, 'Ukendt') FROM kunder;
Funktioner
Find/vis længden af hver enkelt værdi i en kolonne
LENGTH(<kolonnenavn>)
Fjern decimaler, så der kun er m antal tilbage
TRUNC (<kolonnenavn>, m)
Afrund, så der kun er m antal decimaler tilbage
ROUND (<kolonnenavn>, m)
Fjern foran- og/eller bagvedstillede karakterer
TRIM
TRIM
TRIM
TRIM
(LEADING [<karakter>] FROM <kolonne>)
(TRAILING [<karakter>] FROM <kolonne>)
([BOTH] [<karakter>] FROM <kolonne>)
(<kolonne>)
Funktioner
Konvertering af dataformat
TO_CHAR (<kolonnenavn>)
TO_NUMBER (<kolonnenavn>)
TO_DATE (<kolonnenavn>,'datoformat')
• Datoformat f.eks. lig 'DD-MM-YYYY' for '15-06-2004'
Ændring af tekst til STORE / små bogstaver
UPPER (<kolonnenavn>)
LOWER (<kolonnenavn>)
Aggregeringsfunktioner og GROUP BY
SELECT
COUNT(<kolonnenavn> eller *)
MIN (<kolonnenavn>)
MAX (<kolonnenavn>)
AVG (<kolonnenavn>)
SUM (<kolonnenavn>)
Ved hjælp af GROUP BY kan der laves
aggregeringer gruppevis i stedet for alle valgte
rækker.
HAVING kan anvendes med GROUP BY til at
begrænse de grupper, der skal vises.
Kan sammenlignes med
WHERE
Aggregeringsfunktioner - eksempler
SELECT COUNT(*)
FROM kunder
SELECT MIN (postnr),
MAX (postnr)
FROM kunder;
SELECT postnr,
COUNT (*) AS antal
FROM kunder
GROUP BY postnr
HAVING COUNT(*) >= 10
ORDER BY postnr;
COUNT(*)
264
MIN(postnr)
MAX(postnr)
4180
9000
Postnr
Antal
5000
15
7400
19
8200
17
9000
27
Distinct
DISTINCT finder de unikke værdier i en eller
flere kolonne
DISTINCT <kolonnenavn(e)>
SELECT DISTINCT postnr FROM KUNDER;
SELECT DISTINCT kunde, postnr FROM KUNDER;
DISTINCT kan anvendes i aggregeringsfunktioner, hvor den mest interessante typisk
er COUNT
SELECT COUNT(DISTINCT postnr) FROM KUNDER;
Hvis man vil tælle unikke værdier over flere
kolonner skal de først sammentrækkes til et felt
CASE
CASE anvendes til at danne nye værdier, hver
gang der er et match på eksisterende værdier.
(CASE <kolonnenavn>
WHEN <originalværdi>
THEN <ny værdi>
…
[ELSE <default_værdi>]
END) AS <ny kolonne>
(CASE
WHEN <betingelse>
THEN <ny værdi>
…
[ELSE <default_værdi>]
END) AS <ny kolonne>
Case - eksempler
SELECT kunde,
(CASE postnr
WHEN 9000 THEN 'Aalborg’
WHEN 9220 THEN 'Aalborg Øst’
ELSE 'Ukendt by’
END) AS Bynavn
FROM kunder;
SELECT postnr, bynavn,
(CASE
WHEN postnr < 5000 THEN ’Sjælland’
WHEN postnr >= 6000 THEN ’Jylland’
ELSE ’Fyn’
END) AS region
FROM postnumre;
Sæt operatorer
Sæt operatorer kombinere resultatet
(rækkerne) fra forskellige select-sætninger
UNION (Alle rækker minus dubletter)
UNION ALL (Alle rækker inkl. dubletter)
INTERSECT (Alle dubletter)
MINUS (Unikke rækker fra første Select)
JOIN
UNION/INTERSECT/MINUS
Sæt operator - eksempel
Alle unikke samarbejdspartnere og postnr
SELECT kunde AS navn, postnr
FROM kunder
UNION
SELECT lev_navn, postnr
FROM leverandoerer;
Alle samarbejdspartnere, der både er kunder
og leverandører fra samme postnr
SELECT kunde AS navn, postnr
FROM kunder
INTERSECT
SELECT lev_navn, postnr
FROM leverandoerer;
navn
postnr
Ikea
5000
Spar
4180
Subqueries
Anvendelse af resultatet fra en (indre)
SELECT-sætning som input i en anden (ydre)
SELECT-sætning.
Eks:
SELECT <kolonnenavn>
FROM <tabelnavn>
WHERE <kolonnenavn> IN (SELECT……);
SELECT <kolonnenavn>
FROM (SELECT……)
WHERE …;
Subqueries – eksempler
Find navnet på byen der har det største postnr
SELECT postnr, bynavn FROM postnumre
WHERE postnr = (
SELECT max (postnr) FROM postnr
);
Banalt eks. hvor en forespørgsel anvendes
som den komplette kilde til en ny forespørgsel
SELECT id, kunde
FROM (
SELECT * FROM kunder
WHERE postnr > 8000
)
ORDER BY kunde;
Eksempel på hierarkisk forespørgsel
Hierarkier kan gemmes i
tabeller ved at have ”far/parent”kolonne, der viser den overordnede række.
SELECT id, navn,
PRIOR navn AS chef, LEVEL
FROM medarbejdere
CONNECT BY PRIOR id = chef_id
START WITH chef_id IS NULL;
Medarbejdere
ID
Navn
Chef_id
101
Hans
102
102
Jens
105
Niels
102
103
Peter
101
Resultat
ID
Navn
Chef
Level
102
Jens
1
101
Hans
Jens
103
Peter
Hans 3
105
Niels
Jens
2
2
View
Virtuel tabel, der baseres på en gemt SQLsætning
I databasen gemmes kun sql-sætningen
Formål
Forenkle komplicerede forespørgsler
Implementering af sikkerhed
Give forskellige brugere forskellige måder at se de
samme data
Logisk uafhængighed af ændringer i
tabelstrukturer
Alle SELECT-forespørgsler kan foretages mod
et view
Begrænsede muligheder for INSERT, UPDATE
og DELETE afhængig af konstruktionen
Oprettelsen af et view
Oprettelsen af et view
CREATE [OR REPLACE] VIEW <viewnavn> AS
SELECT <kolonner>
FROM <tabelnavne>
WHERE … ;
Forespørgsel mod et view
SELECT * FROM <viewnavn>;
Sletning af et view
DROP VIEW <viewnavn>;
Vis definitionerne af alle views
SELECT * FROM user_views;
DUAL tabel i Oracle
DUAL tabellen er en dummy tabel, der ikke
har noget indhold, men som kan anvendes ved
SELECT-sætninger, hvor der reelt ikke er en
kildetabel
Eks:
SELECT 5*10 FROM DUAL;
SELECT SYSDATE FROM DUAL;
SELECT USER FROM DUAL;
Trigger
En trigger er et lille program, der ved en brugerdefineret aktivitet udfører en bestemt handling.
CREATE [OR REPLACE] TRIGGER <trigger-navn>
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON
<tabel-navn>
[REFERENCING [NEW AS <navn for ny række>]
[OLD AS <navn for gammel række>]]
[FOR EACH ROW [WHEN (<trigger-betingelse>)]]
<trigger-handling>
Trigger der automatisk henter næste
værdi fra en sekvens ind i en tabel
CREATE OR REPLACE TRIGGER kunde_seq_trigger
BEFORE INSERT ON kunder FOR EACH ROW
BEGIN
IF ( :NEW.kunde_id IS NULL ) THEN
SELECT kunde_seq.NEXTVAL
INTO :NEW.kunde_id
FROM DUAL;
END IF;
END;
/
Kommentarer - Comments
Kommentarer der ikke registreres i databasen
-hvis kommentaren kun fylder én linie
/* */ hvis kommentaren fylder flere linier
Kommentarer der registreres i databasen
COMMENT ON TABLE <tabelnavn>
IS '<kommentarer>';
COMMENT ON COLUMN <tabelnavn.kolonnenavn>
IS '<kommentarer>';
SELECT table_name, comments
FROM user_tab_comments
WHERE table_name = '<tabelnavn>';
Access Rights (DCL)
Brugerstyring og hvilke brugere, der har
adgang til hvilke data.
GRANT <access_right> ON <tabelnavn> TO
<user_id>;
REVOKE <access_right> ON <tabelnavn> FROM
<user_id>;
Eks:
GRANT SELECT ON kunder TO bmm;
REVOKE SELECT ON kunder FROM bmm;
Brugerstyring med SQL
Opret bruger:
CREATE USER <brugernavn> IDENTIFIED BY
<password>;
Slet bruger
DROP USER <brugernavn> [CASCADE];
Rettigheder til bruger
GRANT CONNECT, RESOURCE, CREATE VIEW TO
<brugernavn>
Ændre password:
ALTER USER <brugernavn> IDENTIFIED BY <nyt
password>;
Log på med bruger:
CONNECT
brugernavn>/<password>@<databasenavn>;
Indeksering
Hvorfor?
Større hastighed
Uden et indeks må databasen søge sekventielt
Tilsvarende at skulle finde oplysninger i en bog
Syntaks
CREATE [UNIQUE] INDEX <indeksnavn>
ON <tabelnavn> (<kolonnenavn> [DESC]);
Hvilke kolonner skal man så indeksere?
Primære og unikke nøgler indekseres automatisk
Fremmednøgler
Felter der ofte søges på
Data dictionary
Databasens systemtabeller (ejes af sys):
Tabeldefinitioner
Integrity constraints
Sikkerhedsinformation
Definition af indeks, views, mv.
Data dictionary
Nyttige views i Oracle's data dictionary:
user_tables
user_constraints
user_cons_columns (Constraints kolonner)
user_views
user_sequences
user_synonyms
user_indexes
user_ind_columns (Indeks kolonner)
Scripts
Et script er en eller flere sql-sætninger
placeret i en tekstfil – typisk med endelsen
”.sql”.
Kan eksekveres fra SQL-prompten med
@<sti og filnavn>;
Eksempel:
@C:\scripts\create_tables.sql;