Oracle Database/Tables
Lister les tables
[modifier | modifier le wikicode]Pour obtenir la liste des tables du tablespace courant :
SELECT owner, table_name FROM all_tables;
Créer des tables
[modifier | modifier le wikicode]En reprenant l'exemple du livre SQL :
CREATE TABLE client1 (nom VARCHAR(10), prenom VARCHAR(10), adresse VARCHAR(20) );
Table créée.
En passant par un clic droit sur les tables, Nouvelle table..., SQL Developer permet de générer puis exécuter cette démarche :
CREATE TABLE client1
( id INT NOT NULL
, nom VARCHAR2(50)
, prenom VARCHAR2(50)
, adresse VARCHAR2(255)
, CONSTRAINT client1_PK PRIMARY KEY (ID) ENABLE
) TABLESPACE Wikibooks;
Dans cette commande, on a précisé le tablespace dans lequel rattacher la nouvelle table avec le mot clé TABLESPACE
dans la clause de création. Mais SQL Developer le permet en le sélectionnant dans l'interface graphique.
Modifier la structure des tables
[modifier | modifier le wikicode]Exemple de renommage :
ALTER TABLE client1 RENAME to client2
Ajout d'une contrainte sur les valeurs du premier champ :
ALTER TABLE client1 CHECK id > 1;
Ajout d'une clé primaire :
ALTER TABLE client1 ADD CONSTRAINT client1_pk PRIMARY KEY (id);
Retrait d'une clé primaire :
ALTER TABLE client1 ADD PRIMARY KEY (id) DISABLE;
Ajout d'une clé étrangère :
ALTER TABLE client1
ADD CONSTRAINT fk_client2
FOREIGN KEY (client2_id)
REFERENCES client2(id);
Supprimer des tables
[modifier | modifier le wikicode]DROP TABLE client1;
Insérer des lignes
[modifier | modifier le wikicode]INSERT INTO client1 (id, nom, prenom, adresse) VALUES (1, 'Croche', 'Sarah', 'Petaouchnoc');
1 ligne inséré [sic].
Plusieurs lignes :
INSERT ALL
INTO client1 (id, nom, prenom, adresse) VALUES (2, 'Pelle', 'Sarah', 'Clochemerle')
INTO client1 (id, nom, prenom, adresse) VALUES (3, 'Porte', 'Sarah', 'Cuges-les-Bains')
SELECT 1 FROM DUAL;
2 lignes inséré [sic].
ID | PRENOM | NOM | ADRESSE |
---|---|---|---|
1 | Sarah | Croche | Petaouchnoc |
2 | Sarah | Pelle | Clochemerle |
3 | Sarah | Porte | Cuges-les-Bains |
Lire une table
[modifier | modifier le wikicode]Pour accéder à sa structure :
desc client1;
Nom NULL Type ------- -------- ------------- ID NOT NULL NUMBER(38) NOM VARCHAR2(10) PRENOM VARCHAR2(10) ADRESSE VARCHAR2(20)
Si la table n'existe pas, l'erreur qui apparait est ORA-00923: FROM keyword not found where expected
.
Pour son contenu :
SELECT * from client1;
ID NOM PRENOM ADRESSE - ---------- ---------- -------------------- 1 Croche Sarah Petaouchnoc 2 Pelle Sarah Clochemerle
Le nombre de tirets correspond à la taille du champ.
Mettre à jour des lignes
[modifier | modifier le wikicode]UPDATE client1 SET adresse = 'Cuges-les-Bains' WHERE id = 1;
Supprimer des lignes
[modifier | modifier le wikicode]DELETE client1 WHERE ID = 2;
Partitionner une table
[modifier | modifier le wikicode]Le partitionnement Oracle sert à diviser les données d'une table volumineuse dans plusieurs plus petites afin d'en augmenter les performances.
Range
[modifier | modifier le wikicode]Exemple :
CREATE TABLE t_range
( t1 VARCHAR2(10) NOT NULL,
t2 NUMBER NOT NULL,
t3 NUMBER
)
PARTITION BY RANGE (t2)
( PARTITION part1 VALUES LESS THAN (1),
PARTITION part2 VALUES LESS THAN (11),
PARTITION part3 VALUES LESS THAN (MAXVALUE)
);
Hash
[modifier | modifier le wikicode]Exemple :
CREATE TABLE t_hash
( t1 VARCHAR2(10) NOT NULL,
t2 NUMBER NOT NULL,
t3 NUMBER
PARTITION BY HASH (t2)
PARTITIONS 4
;
List
[modifier | modifier le wikicode]Exemple :
CREATE TABLE t_list
( ort VARCHAR2(30) NOT NULL,
t2 NUMBER,
t3 NUMBER
)
PARTITION BY LIST(ort)
( PARTITION part_nord VALUES IN ('Hamburg','Berlin'),
PARTITION part_sued VALUES IN ('Muenchen', 'Nuernberg'),
PARTITION part_west VALUES IN ('Koeln','Duesseldorf'),
PARTITION part_ost VALUES IN ('Halle'),
PARTITION part_def VALUES (DEFAULT)
);
Interval
[modifier | modifier le wikicode]Exemple :
CREATE TABLE t_interval
( buchungs_datum DATE NOT NULL,
buchungs_text VARCHAR2(100),
betrag NUMBER(10,2)
)
PARTITION BY RANGE (buchungs_datum)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
( PARTITION p_historie VALUES LESS THAN (TO_DATE('2014.01.01', 'YYYY.MM.DD')),
PARTITION p_2014_01 VALUES LESS THAN (TO_DATE('2014.02.01', 'YYYY.MM.DD')),
PARTITION p_2014_02 VALUES LESS THAN (TO_DATE('2014.03.01', 'YYYY.MM.DD'))
);
Schémas
[modifier | modifier le wikicode]Un schéma est un ensemble de permissions[1] pour des tables ou procédures stockées. Le mot clé AUTHORIZATION
permet de donner des droits à un utilisateur :
CREATE SCHEMA AUTHORIZATION root
CREATE TABLE table1...
CREATE TABLE table2...
;
Synonymes
[modifier | modifier le wikicode]Un synonyme est un alias d'un nom de table (ou d'autres objets). Il peut être utilisé pour la sécurité en masquant le nom du propriétaire de l'objet vers lequel il pointe, ou bien pour uniformiser les noms d'objets distants dans les bases de données distribuées[2].
CREATE SYNONYM table1 FOR client1;
SELECT * from table1;