Les différents 'objets' (structures de données et consorts) de la base

 

les premiers objets qui suivent, sont donc des segments physiques, composés d'extents et qui s'allouent dynamiquement de la place dans le tablespace dans lequel ils sont créés.

Les tables

Contiennent les données utilisateur. Composées de colonnes. Descriptions des tables dans dba_tables.

CREATE TABLE salaires
( no_emp NUMBER , salaire NUMBER)
TABLESPACE TEMPORARY
STORAGE (INITIAL 50K NEXT 50K MINEXTENTS 1 MAXEXTENTS 25 PCTINCREASE 0)

SQL> describe salaires
 Name                            Null?    Type
 ------------------------------- -------- ----
 NO_EMP                                   NUMBER
 SALAIRE                                  NUMBER

on peut vérifier les caractéristiques de la table dans le dictionnaire :
SQL> select * from dba_tables
  2* where table_name = 'SALAIRES'

OWNER                          TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
CLUSTER_NAME                   IOT_NAME                        PCT_FREE  PCT_USED INI_TRANS
------------------------------ ------------------------------ --------- --------- ---------
MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS FREELIST_GROUPS
--------- -------------- ----------- ----------- ----------- ------------ --------- ---------------
LOG B  NUM_ROWS    BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN AVG_SPACE_FREELIST_BLOCKS
--- - --------- --------- ------------ --------- --------- ----------- -------------------------
NUM_FREELIST_BLOCKS DEGREE     INSTANCES  CACHE TABLE_LO SAMPLE_SIZE LAST_ANA PAR IOT_TYPE     T NES
------------------- ---------- ---------- ----- -------- ----------- -------- --- ------------ - ---
BUFFER_
-------
SYSTEM                         SALAIRES                       USER_DATA
                                                                     10        40         1
      255          51200       51200           1          25            0         1               1
YES N
                             1          1     N ENABLED                       NO               N NO
DEFAULT

 

Il est plus judicieux comme ici de préciser la clause STORAGE au niveau de chaque table plutôt qu'au niveau du tablespace, les volumes pouvant être très différents d'une table à l'autre....

CREATE TABLE mini_emp (empno NUMBER CONSTRAINT pk_emp PRIMARY KEY,
ename VARCHAR2(10) CONSTRAINT upper_ename CHECK (ename = UPPER(ename)),
hiredate DATE DEFAULT SYSDATE,
deptno NUMBER(2) CONSTRAINT fk_deptno REFERENCES scott.dept(deptno) )

on voit ici un certain nombre de contraintes d'intégrité qui faciliteront les développements

Les indexs

Accélérateurs. Externes aux tables. Peuvent être créés / détruits à tout moment. Se remplissent dynamiquement au fur et à mesure des mises à jour de la table indexée. Organisés en B-TREE. Description dans dba_indexes.

create [unique] index i1 on t1(col1)

rem : un index peut ne pas être unique. Une clé primaire dans une table est représentée sous forme d'index unique par Oracle.

Les clusters

Accélérateurs. Les clusters sont des segments spéciaux qui contiennent plusieurs tables fusionnées, suivant en général une colonne de jointure. On peut les voir comme des jointures physiques.rem : un certain nombre de tables du dictionnaire sont organisées en cluster.
Voir dba_clusters

les objets qui suivent ne sont pas des segments. Ils sont des références à d'autres objets (segments ou non) dont la description est stocké dans le dictionnaire de données. Il ne prennent donc pas vraiment de place physique

Les vues

Une vue est une fenetre sur une table. Elle ne contient pas de données. Stockée dans le DD sous forme de 'select nommé'.
La mise à jour d'une vue est en fait la mise à jour de la table 'A TRAVERS' la vue. Il n'y a pas de duplication de données.
Une vue peut porter sur plusieurs tables, éventuellemnts distantes !

Les vues sont décrites dans la vue dba_views du dictionnaire de données.

create view emp_10 as select empno numero, ename nom
where deptno = 10

l'une des colonnes de dba_views est de type LONG. Si on veut visualiser la totalité des informatiions sous SQL*Plus, utiliser la commande 'SET LONG 2000' par exemple pour ne pas tronquer l'affichage !

il existe des vues paramétrées qui peuvent rendrent de grands services pour restreindre certains type d'accès

Si on veut restreindre l'accès à certaines périodes horaires par exemple :

CREATE VIEW emp_ouvrable
AS SELECT * FROM EMP
WHERE TO_CHAR(SYSDATE,'HH') BETWEEN '08' AND '17'

en dehors de la période 8H - 17H le predicat est faux et la vue ne renvoie aucune données !

Si on veut restreindre l'accès a certains postes de travail :

CREATE VIEW EMP_RESTREINTE
AS SELECT * FROM EMP
WHERE USERENV('TERMINAL') IN ('PC1', 'PC3')

seuls les postes clients dont l'identification réseau est 'PC1' ou 'PC3' seront autorisés !

Synonymes

Type propriétaire syntaxe
public pseudo user 'PUBLIC' create public synonym nom_syn for [propr.]objet
privé le créateur (user courant) create synonym nom_syn for [propr.]objet

rem : seul un DBA peut créer (ou détruire) un synonyme public.

Un synonyme public doit être unique dans la base.h

Le fait que le synonyme soit public ne veut pas dire que l'objet pointé est accessible par tout le monde, il faut en plus donner des droits si nécessaire!

database links

Les database links sont des référence à des comptes utilisateurs distants.
Ceci permet au sein d'une même session SQL d'accéder à différents objets de bases réparties sur le réseau. On peut par exemple définir un database link compta_bordeaux qui référence le schéma compta qui se trouve sur la base distante localisée sur le serveur de bordeaux. Ensuite on pourra accéder à une table ou vue distante via ce database link. Une description des database links se trouve dans la vue USER_DB_LINKS du dictionnaire.

exemple
SQL> CREATE DATABASE LINK compta_bordeaux CONNECT TO compta IDENTIFIED BY xyz USING 'la_base_de_bordeaux' ;
SQL> SELECT * FROM balance@compta_bordeaux ;
-- on peut le rendre transparent grace aux synonymes
SQL> CREATE SYNONYM balance FOR balance@compta_bordeaux ;
SQL> SELECT * FROM balance ;

Les séquences

Une séquence est un compteur programmable stocké en mémoire par Oracle et utilisable de manière partagé.
Il est en général utilisé pour fournir des no de clé d'enregistrements.
Pour créer une séquence :

create sequence nom_seq start with no_debut
increment by saut
maxvalue valeur_max cycle|nocycle cache|nocache

Pour utiliser une séquence :
la valeur courante de la séquence est donnée par nom_seq.currval et la suivante par nom_seq.nextval.

Exemple

SQL> create sequence seq_no_cli
start with 1000 increment by 100;
SQL> insert into clients (no, nom) values (seq_no_cli.nextval, 'Martin');

J pour vérifier rapidement la valeur à suivre : select seq_no_cli.nexval from dual

 

Les programmes stockés

Les programmes stockés (procédures, fonctions ou packages) sontt des programmes codés en PL/SQL, nommés, et stockés dans un schéma dee la base.
Nécessite le privilège 'Create procedure' ou 'create any procedure' suivant qu'on est dans son propre schéma ou dans un autre schéma.

Procedures

Exemple de prcédure de crédit d'un compte (qui prend en entrée le no du compte et le montant à créditer)

CREATE PROCEDURE credit (no IN NUMBER, montant IN NUMBER)
AS
BEGIN
UPDATE compte SET solde = solde + montant
WHERE no_compte= no;
END;

Fonctions

Une fonction est une procédure qui retourne une (ou des) valeur(s).

CREATE FUNCTION lit_solde (no IN NUMBER)
RETURN NUMBER
IS solde NUMBER (11,2);
BEGIN
SELECT balance INTO solde FROM compte
WHERE no_compte = no;
RETURN (solde);
END;

no est un paramètre d'entrée et solde la valeur du solde du compte fournie en sortie

Packages

Un package est un ensemble encapsulé de procédures et ou de fonctions, ainsi que de données dépendant fonctionnellement.
Il est constitué de 2 parties : la specification qui déclare les objets publics du package et le corps (body) qui définit ces objets.
Pour créer ces 2 entités on utilisera respectivement les ordres :
create package et create package body

Triggers

Un trigger est un morceau de code PL/SQL, stocké dans la base, déclenché lors de l'occurrence d'un événement particulier. Il permet notamment de synchroniser des opérations entre plusieurs tables.
La plupart du temps les triggers sont déclenchés par la modification du contenu d'une table.
La liste des événements déclencheurs apparaît ci-après :

Type d'ordre ordre déclencheur : DELETE, INSERT, UPDATE, CREATE, ALTER, DROP, SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

exemple
-- trigger déclenché lors d'une insertion
-- ou d'une modification de la table client
SQL> CREATE OR REPLACE TRIGGER aff_discount BEFORE INSERT OR UPDATE ON clients FOR EACH ROW WHEN (new.no_cli > 0)
DECLARE evol_discount number;
BEGIN evol_discount := :new.discount - :old.discount;
DBMS_OUTPUT.PUT_LINE(' evolution : ' || evol_discount); END;
/ -- FOR EACH ROW signale qu'une modification de 4 lignes
-- par un seul UPDATE déclenche 4 fois le trigger.
-- Si on ne souhaite qu'un seul déclenchement ,
-- on omet simplement la clause FOR EACH ROW.


(c) 2002- 2006 Didier Deléglise


modifié
le 20/11/2006

Ecrire a DD
ecris
moi


les forums techniques Oracle

mon BLOG Oracle,
en Francais
connaitre DD
l'autre vie
de DD

mon CV

trucs
et astuces

JOBs Oracle
du jour
Homepage "Tout sur Oracle"
Mon site :
Tout sur Oracle (et le web)
Copyright (C) 2002
Utilisation de ces documents