Oracle.Tutorial fournit une base de données ‘Exemple’ pour l’expérimentation avec le SGBD Oracle.
Nous utiliserons cette DB pour les apprentissages sur les fonctions, procédures, déclencheurs, …
Les directives pour l’installation de la BD sont disponibles ici
Voici le schéma de la base de données

Il faut créer, sur le SGBD à 192.168.138.58 (user:sys, pws: 4205D3) une PDB nommé ‘M’+ votre matricule, avec un utilisateur nommé ‘ot’.
-- Par exemple, show con_name; -- Si pas au contexte racine alors: ALTER SESSION SET CONTAINER = CDB$ROOT CREATE PLUGGABLE DATABASE M12345678 ADMIN ot IDENTIFIED BY password create_file_dest='/home/oracle' ; show pdbs; ALTER SESSION SET CONTAINER = M12345678 ; ALTER DATABASE OPEN; GRANT CONNECT, RESOURCE, DBA TO ot; -- Puis, ouvrir une nouvelle connexion avec l'utilisateur 'ot'
-- regions
CREATE TABLE regions
(
region_id NUMBER GENERATED BY DEFAULT AS IDENTITY
START WITH 5 PRIMARY KEY,
region_name VARCHAR2( 50 ) NOT NULL
);
-- countries table
CREATE TABLE countries
(
country_id CHAR( 2 ) PRIMARY KEY ,
country_name VARCHAR2( 40 ) NOT NULL,
region_id NUMBER , -- fk
CONSTRAINT fk_countries_regions FOREIGN KEY( region_id )
REFERENCES regions( region_id )
ON DELETE CASCADE
);
-- location
CREATE TABLE locations
(
location_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 24
PRIMARY KEY ,
address VARCHAR2( 255 ) NOT NULL,
postal_code VARCHAR2( 20 ) ,
city VARCHAR2( 50 ) ,
state VARCHAR2( 50 ) ,
country_id CHAR( 2 ) , -- fk
CONSTRAINT fk_locations_countries
FOREIGN KEY( country_id )
REFERENCES countries( country_id )
ON DELETE CASCADE
);
-- warehouses
CREATE TABLE warehouses
(
warehouse_id NUMBER
GENERATED BY DEFAULT AS IDENTITY START WITH 10
PRIMARY KEY,
warehouse_name VARCHAR( 255 ) ,
location_id NUMBER( 12, 0 ), -- fk
CONSTRAINT fk_warehouses_locations
FOREIGN KEY( location_id )
REFERENCES locations( location_id )
ON DELETE CASCADE
);
-- employees
CREATE TABLE employees
(
employee_id NUMBER
GENERATED BY DEFAULT AS IDENTITY START WITH 108
PRIMARY KEY,
first_name VARCHAR( 255 ) NOT NULL,
last_name VARCHAR( 255 ) NOT NULL,
email VARCHAR( 255 ) NOT NULL,
phone VARCHAR( 50 ) NOT NULL ,
hire_date DATE NOT NULL ,
manager_id NUMBER( 12, 0 ) , -- fk
job_title VARCHAR( 255 ) NOT NULL,
CONSTRAINT fk_employees_manager
FOREIGN KEY( manager_id )
REFERENCES employees( employee_id )
ON DELETE CASCADE
);
-- product category
CREATE TABLE product_categories
(
category_id NUMBER
GENERATED BY DEFAULT AS IDENTITY START WITH 6
PRIMARY KEY,
category_name VARCHAR2( 255 ) NOT NULL
);
-- products table
CREATE TABLE products
(
product_id NUMBER
GENERATED BY DEFAULT AS IDENTITY START WITH 289
PRIMARY KEY,
product_name VARCHAR2( 255 ) NOT NULL,
description VARCHAR2( 2000 ) ,
standard_cost NUMBER( 9, 2 ) ,
list_price NUMBER( 9, 2 ) ,
category_id NUMBER NOT NULL ,
CONSTRAINT fk_products_categories
FOREIGN KEY( category_id )
REFERENCES product_categories( category_id )
ON DELETE CASCADE
);
-- customers
CREATE TABLE customers
(
customer_id NUMBER
GENERATED BY DEFAULT AS IDENTITY START WITH 320
PRIMARY KEY,
name VARCHAR2( 255 ) NOT NULL,
address VARCHAR2( 255 ) ,
website VARCHAR2( 255 ) ,
credit_limit NUMBER( 8, 2 )
);
-- contacts
CREATE TABLE contacts
(
contact_id NUMBER
GENERATED BY DEFAULT AS IDENTITY START WITH 320
PRIMARY KEY,
first_name VARCHAR2( 255 ) NOT NULL,
last_name VARCHAR2( 255 ) NOT NULL,
email VARCHAR2( 255 ) NOT NULL,
phone VARCHAR2( 20 ) ,
customer_id NUMBER ,
CONSTRAINT fk_contacts_customers
FOREIGN KEY( customer_id )
REFERENCES customers( customer_id )
ON DELETE CASCADE
);
-- orders table
CREATE TABLE orders
(
order_id NUMBER
GENERATED BY DEFAULT AS IDENTITY START WITH 106
PRIMARY KEY,
customer_id NUMBER( 6, 0 ) NOT NULL, -- fk
status VARCHAR( 20 ) NOT NULL ,
salesman_id NUMBER( 6, 0 ) , -- fk
order_date DATE NOT NULL ,
CONSTRAINT fk_orders_customers
FOREIGN KEY( customer_id )
REFERENCES customers( customer_id )
ON DELETE CASCADE,
CONSTRAINT fk_orders_employees
FOREIGN KEY( salesman_id )
REFERENCES employees( employee_id )
ON DELETE SET NULL
);
-- order items
CREATE TABLE order_items
(
order_id NUMBER( 12, 0 ) , -- fk
item_id NUMBER( 12, 0 ) ,
product_id NUMBER( 12, 0 ) NOT NULL , -- fk
quantity NUMBER( 8, 2 ) NOT NULL ,
unit_price NUMBER( 8, 2 ) NOT NULL ,
CONSTRAINT pk_order_items
PRIMARY KEY( order_id, item_id ),
CONSTRAINT fk_order_items_products
FOREIGN KEY( product_id )
REFERENCES products( product_id )
ON DELETE CASCADE,
CONSTRAINT fk_order_items_orders
FOREIGN KEY( order_id )
REFERENCES orders( order_id )
ON DELETE CASCADE
);
-- inventories
CREATE TABLE inventories
(
product_id NUMBER( 12, 0 ) , -- fk
warehouse_id NUMBER( 12, 0 ) , -- fk
quantity NUMBER( 8, 0 ) NOT NULL,
CONSTRAINT pk_inventories
PRIMARY KEY( product_id, warehouse_id ),
CONSTRAINT fk_inventories_products
FOREIGN KEY( product_id )
REFERENCES products( product_id )
ON DELETE CASCADE,
CONSTRAINT fk_inventories_warehouses
FOREIGN KEY( warehouse_id )
REFERENCES warehouses( warehouse_id )
ON DELETE CASCADE
);
Il faut utiliser le contenu du fichier ot_data.sql
NOTE: Vous allez rencontrer des problèmes:
À VOUS DE TROUVER DES SOLUTIONS
Tester les données en affichant la liste des employés.
DROP TABLE order_items; DROP TABLE orders; DROP TABLE inventories; DROP TABLE products; DROP TABLE product_categories; DROP TABLE warehouses; DROP TABLE employees; DROP TABLE contacts; DROP TABLE customers; DROP TABLE locations; DROP TABLE countries; DROP TABLE regions;
Mettre en place l’infrastructure requise pour les parties évaluées du cours
NOTE TELLEMENT IMPORTANTE: Il faut FERMER la VM lorsqu’elle n’est pas utilisée!!!
--- Scratch PAD
--- Exemple d'un champ de type AUTO-INCREMENT
--- GENERATED BY DEFAULT AS IDENTITY (facultaitf)
--- GENERATED ALWAYS AS IDENTITY (séquence automatique obligatoire)
--- (START WITH 10 INCREMENT BY 5)
CREATE TABLE Pays (
pays_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY ,
nom VARCHAR2(80)
);
INSERT INTO pays(nom) VALUES ('Québec');
INSERT INTO pays(pays_id, nom) VALUES (2, 'Canada');
SELECT * FROM pays;
----------------------------------------------------------------------------
----------------------------------------------------------------------------
--- Des bandes dessinées
CREATE TABLE Auteurs (
auteur_id NUMBER PRIMARY KEY,
nom VARCHAR2(60)
);
INSERT INTO Auteurs (auteur_id, nom) VALUES (1, 'Herge');
CREATE TABLE Albums (
album_id NUMBER PRIMARY KEY,
titre VARCHAR2(255),
annee_publication NUMBER,
auteur_id NUMBER,
FOREIGN KEY (auteur_id) REFERENCES Auteurs(auteur_id),
nombre_pages NUMBER,
isbn VARCHAR2(20),
photo_couverture VARCHAR2(255)
);
----
INSERT INTO Albums (titre, annee_publication, auteur_id, nombre_pages, isbn, photo_couverture)
VALUES
('Tintin au pays des Soviets', 1929, 1, 144, '978-2203001016', 'tintin_soviets.jpg'),
('Tintin au Congo', 1931, 1, 62, '978-2203001023', 'tintin_congo.jpg'),
('Tintin en Amérique', 1932, 1, 120, '978-2203001030', 'tintin_amerique.jpg'),
('Les Cigares du Pharaon', 1934, 1, 128, '978-2203001047', 'tintin_cigares_pharaon.jpg'),
('Le Lotus bleu', 1936, 1, 80, '978-2203001054', 'tintin_lotus_bleu.jpg'),
('L''Oreille cassée', 1943, 1, 62, '978-2203001061', 'tintin_oreille_cassee.jpg'),
('L''Île noire', 1938, 1, 62, '978-2203001078', 'tintin_ile_noire.jpg'),
('L''Étoile mystérieuse', 1942, 1, 62, '978-2203001108', 'tintin_etoile_mysterieuse.jpg'),
('Le Secret de La Licorne', 1943, 1, 62, '978-2203001115', 'tintin_secret_licorne.jpg'),
('Le Trésor de Rackham le Rouge', 1944, 1, 62, '978-2203001122', 'tintin_tresor_rackham_rouge.jpg');
--- Modifier le champ album_id pour le rendre AUTO-INCREMENT
ALTER TABLE Albums
ALTER COLUMN album_id
SET GENERATED BY DEFAULT;
--- Pour enlever le compteur
ALTER TABLE Albums
ALTER COLUMN album_id
DROP IDENTITY IF EXISTS;
------------------------------------------------
select titre, auteurs.nom from albums inner JOIN auteurs ON albums.auteur_id = auteurs.auteur_id ;
select al.titre, a.nom from albums al inner JOIN auteurs a ON al.auteur_id = a.auteur_id ;