1. Tabeller
Tabeller lagrar data och är därför det viktigaste objektet i en databas. En tabell kan ha en eller flera kolumner och varje kolumn kan ha restriktioner knutna till sig (se
Restriktioner ).
2. CREATE TABLE
Du skapar tabeller med CREATE TABLE. Den generella syntaxen ser ut på detta sätt:
CREATE TABLE tabellnamn (
kolumnnamn DATATYP [restriktioner]
[,kolumnnamn DATATYP [restriktioner]]
...
) [restriktioner];
|
Eller så kan man skapa tabeller från en SUBSELECT:
CREATE TABLE tabellnamn AS
SELECT ... FROM ... [WHERE osv.];
|
Ett exempel:
SQL> CREATE TABLE emp1(
emp_pk NUMBER(10) NOT NULL PRIMARY KEY,
dep_pk NUMBER(10) NOT NULL REFERENCES dep(dep_pk),
first_name VARCHAR(20),
last_name VARCHAR(20)
);
Tabellen är skapad.
SQL> DESC emp1;
Namn Null? Typ
----------------------------------------- -------- ----------------------------
EMP_PK NOT NULL NUMBER(10)
DEP_PK NOT NULL NUMBER(10)
FIRST_NAME VARCHAR2(20)
LAST_NAME VARCHAR2(20)
|
Vi lägger till en rad data i tabellen:
SQL> INSERT INTO emp1 (emp_pk, dep_pk, first_name, last_name)
VALUES(1,1,'Sven','Svensson');
1 rad är skapad.
|
3. ALTER TABLE-syntax
Med ALTER TABLE kan man förändra strukturen på en redan existerande tabell. Såhär ser syntaxen ut för de kommandon som har med kolumner att göra:
ALTER TABLE tabellnamn
RENAME TO tabellnamn2
| [NO]PARALLELL [nr]
| ADD( kolumnnamn DATATYP [restriktioner] )
| MODIFY (kolumnnamn [DATATYP] [DEFAULT utr] [restriktioner])
| RENAME COLUMN kolumnnamn TO kolumnnamn2
| DROP COLUMN kolumnnamn [{CASCADE CONSTRAINTS | INVALIDATE}]
| DROP (kolumnnamn1, kolumnnamn2, ..) [{CASCADE CONSTRAINTS | INVALIDATE}]
| SET UNUSED COLUMN kolumnnamn [{CASCADE CONSTRAINTS | INVALIDATE}]
| SET UNUSED (kolumnnamn1, kolumnnamn2, ..) [{CASCADE CONSTRAINTS | INVALIDATE}]
|
Funktionen RENAME på kolumner är ny för Oracle 9i. ALTER TABLE kan även lägga till och ta bort restriktioner på en tabell (se
Restriktioner ).
4. ALTER TABLE ... RENAME TO
Att byta namn på en tabell görs på följande sätt:
SQL> ALTER TABLE emp1 RENAME TO emp2;
Tabell är ändrad.
|
5. ALTER TABLE ... ADD()
Med ALTER TABLE kan man lägga till nya kolumner i en existerande tabell. Vi testar att addera en kolumn:
SQL> ALTER TABLE emp1
ADD( idnr CHAR(10) DEFAULT '0000000000');
Tabell är ändrad.
|
Här ser vi att de redan existerande raderna får den nya kolumnens defaultvärde:
SQL> SELECT * FROM emp1;
EMP_PK DEP_PK FIRST_NAME LAST_NAME IDNR
---------- ---------- -------------------- -------------------- ----------
1 1 Sven Svensson 0000000000
|
Det är inte möjligt att addera en NOT NULL-kolumn till en tabell som innehåller data om man inte specifierar ett defaultvärde, se nedan:
SQL> ALTER TABLE emp1
ADD (address VARCHAR2(100) NOT NULL);
ALTER TABLE emp1
*
Fel på rad 1:
ORA-01758: tabell måste vara tom för tillägg av obligatorisk (NOT NULL) kolumn
|
6. ALTER TABLE ... MODIFY()
Med ALTER TABLE kan man förändra existerande kolumner. I exemplet nedan byter vi datatyp på kolumnen FIRST_NAME:
SQL> ALTER TABLE emp1
MODIFY(first_name CHAR(10));
Tabell är ändrad.
SQL> SELECT * FROM emp1;
EMP_PK DEP_PK FIRST_NAME LAST_NAME IDNR
---------- ---------- ---------- -------------------- ----------
1 1 Sven Svensson 0000000000
|
Här såg vi att det till och med är möjligt att krympa datatyperna för existerande kolumner. Men man kan inte krympa en kolumn till mindre än det största värdet:
SQL> ALTER TABLE emp1 MODIFY( last_name CHAR(3));
ALTER TABLE emp1 MODIFY( last_name CHAR(3))
*
Fel på rad 1:
ORA-01441: kan inte minska kolumnlängden därför att något värde är för stort
|
7. ALTER TABLE ... RENAME COLUMN
Möjligheten att byta namn på en kolumn är ny för Oracle 9i. Ett exempel:
SQL> ALTER TABLE emp1 RENAME COLUMN emp_pk TO emp_id;
Tabell är ändrad.
SQL> SELECT * FROM emp1;
EMP_ID DEP_PK FIRST_NAME LAST_NAME IDNR
---------- ---------- ---------- -------------------- ----------
1 1 Sven Svensson 0000000000
|
Här ser vi att den första kolumnen har bytt namn till EMP_ID.
8. ALTER TABLE ... SET UNUSED
Med SET UNUSED förändrar man strukturen på tabellen utan att faktiskt radera den kolumn som tas bort. Detta går mycket snabbare än motsvarande DROP COLUMN på stora tabeller. En kolumn som är UNUSED kan senare tas bort med ALTER TABLE ... DROP UNUSED COLUMNS. Vi kan till exempel göra oss av med kolumnen DEP_PK:
SQL> ALTER TABLE emp1
SET UNUSED COLUMN dep_pk;
Tabell är ändrad.
SQL> SELECT * FROM emp1;
EMP_PK FIRST_NAME LAST_NAME IDNR
---------- ---------- -------------------- ----------
1 Sven Svensson 0000000000
SQL> ALTER TABLE emp1 DROP UNUSED COLUMNS;
Tabell är ändrad.
|
9. ALTER TABLE ... DROP
Med ALTER TABLE kan man även ta bort kolumner från tabellen. Ett exempel:
SQL> ALTER TABLE emp1 DROP COLUMN idnr;
Tabell är ändrad.
|
10. DROP TABLE
Med DROP TABLE kan man kasta en tabell som inte längre används. Syntaxen ser ut såhär:
DROP TABLE tabellnamn [CASCADE CONSTRAINTS]
|
CASCADE CONSTRAINTS innebär att Oracle går in i andra tabeller och tar bort de restriktioner som refererar till den borttagna tabellens primärnyckel. Nedan ges ett exempel:
SQL> DROP TABLE emp1;
Tabell är borttagen.
|
Eftersom det inte finns några andra tabeller som refererar till EMP1 behövs inte CASCADE CONSTRAINTS.