SQL pour Oracle by Christian Soutou

SQL pour Oracle by Christian Soutou

Auteur:Christian Soutou [Soutou, Christian]
La langue: fra
Format: epub
Tags: Informatique
Éditeur: O'Reilly
Publié: 2008-02-01T14:00:02+00:00


BEGIN

SELECT * INTO rty_pilote

Chargement de l’enregistrement rty_pilote

FROM Pilote WHERE brevet='PL-1';

à partir d’une ligne de la table Pilote.

Accès à des valeurs de l’enregistrement par la

v_brevet := rty_pilote.brevet;

notation pointée.

rty_pilote.brevet := 'PL-9';

rty_pilote.nom := 'Pierre Bazex';

INSERT INTO Pilote VALUES rty_pilote; Insertion dans la table Pilote à partir d’un enregistrement.

262

© Éditions Eyrolles

SOUTOU Livre Page 263 Vendredi, 25. janvier 2008 1:08 13

chapitre n° 6

Bases du PL/SQL

Les colonnes récupérées par la directive %ROWTYPE n’héritent pas des contraintes NOT NULL

qui seraient éventuellement déclarées au niveau de la table.

Variables RECORD

Alors que la directive %ROWTYPE permet de déclarer une structure composée de colonnes de tables, elle ne convient pas à des structures de données personnalisées. Le type de données RECORD (disponible depuis la version 7) définit vos propres structures de données (l’équivalent du struct en C). Depuis la version 8, les types RECORD peuvent inclure des LOB

(BLOB, CLOB et BFILE) ou des extensions objets (REF, TABLE ou VARRAY).

La syntaxe générale pour déclarer un RECORD est la suivante :

TYPE nomRecord IS RECORD

( nomChamp typeDonnées [[NOT NULL] {:= | DEFAULT} expression]

[, nomChamp typeDonnées… ]… );

L’exemple suivant décrit l’utilisation d’un record :

Tableau 6-8 Manipulation de RECORD

Code PL/SQL

Commentaires

Web

DECLARE

Déclaration du RECORD contenant quatre

TYPE avionAirbus_rec IS RECORD

champs ; initialisation du champ usine par

(nserie CHAR(10), nomAvion CHAR(20),

défaut.

usine CHAR(10) := 'Blagnac',

nbHVol NUMBER(7,2));

r_unA320 avionAirbus_rec ;

r_FGLFS avionAirbus_rec ;

Déclaration de deux variables de type RECORD.

BEGIN

r_unA320.nserie := 'A1';

Initialisation des champs d’un RECORD.

r_unA320.nomAvion := 'A320-200';

r_unA320.nbHVol := 2500.60;

Affectation d’un RECORD.

r_FGLFS := r_unA320;

Les types RECORD ne peuvent pas être stockés dans une table. En revanche, il est possible qu’un champ d’un RECORD soit lui-même un RECORD, ou soit déclaré avec les directives %TYPE ou

%ROWTYPE. L’exemple suivant illustre le RECORD r_vols déclaré avec ces trois possibilités : DECLARE

TYPE avionAirbus_rec IS RECORD

(nserie CHAR(10), nomAvion CHAR(20),

usine CHAR(10) := 'Blagnac', nbHVol NUMBER(7,2));

© Éditions Eyrolles

263

SOUTOU Livre Page 264 Vendredi, 25. janvier 2008 1:08 13

Partie II

PL/SQL

TYPE vols_rec IS RECORD

(r_aéronef avionAirbus_rec , dateVol DATE,

rty_coPilote Pilote%ROWTYPE, affretéPar Compagnie.comp%TYPE);

Les RECORD ne peuvent pas être comparés (nullité, égalité et inégalité), ainsi les tests suivants sont incorrects :

v1 avionAirbus_rec;

v2 vols_rec;

v3 vols_rec;

BEGIN

IF v1 IS NULL THEN …

IF v2 > v3 THEN …

Variables tableaux (type TABLE)

Les variables de type TABLE ( associative arrays) permettent de définir et de manipuler des tableaux dynamiques (car définis sans dimension initiale). Un tableau est composé d’une clé primaire (de type BINARY_INTEGER) et d’une colonne (de type scalaire, TYPE, ROWTYPE ou

RECORD) pour stocker chaque élément.

Syntaxe

La syntaxe générale pour déclarer un type de tableau et une variable tableau est la suivante : TYPE nomTypeTableau IS TABLE OF

{ typeScalaire | variable%TYPE | table. colonne%TYPE} [NOT NULL]

| table.%ROWTYPE

[INDEX BY BINARY_INTEGER];

nomTableau nomTypeTableau;

L’option INDEX BY BINARY_INTEGER est facultative depuis la version 8 de PL/SQL. Si elle est omise, le type déclaré est considéré comme une nested table (extension objet). Si elle est pré-

sente, l’indexation ne commence pas nécessairement à 1 et peut être même négative (l’intervalle de valeurs du type BINARY_INTEGER va de – 2 147 483 647 à 2 147 483 647).

L’exemple suivant décrit la déclaration de trois tableaux et l’affectation de valeurs à différents indices (– 1, – 2 et 7800). L’accès à des champs d’éléments complexes se fait à l’aide de la notation pointée (voir la dernière instruction).



Télécharger



Déni de responsabilité:
Ce site ne stocke aucun fichier sur son serveur. Nous ne faisons qu'indexer et lier au contenu fourni par d'autres sites. Veuillez contacter les fournisseurs de contenu pour supprimer le contenu des droits d'auteur, le cas échéant, et nous envoyer un courrier électronique. Nous supprimerons immédiatement les liens ou contenus pertinents.