Pl/sql - interaction avec la base de données & structures de contrôleAbdelouahed Abdou
Interaction avec la base de données
Extraction
Insertion
Modification
Suppression
Structures de contrôle
Structures conditionnelles :
IF
case
Structures répétitives:
LOOP
WHILE-LOOP
FOR-LOOP
Structures répétitives:
Boucles avec étiquettes
Contrôle séquentiel avec GOTO
Opérateurs de comparaison:
IS NULL
LIKE
BETWEEN
IN
PL/SQL (Procedural Language / SQL), l’extension procédurale proposée par Oracle pour SQL (L4G),
Il permet de combiner des requêtes SQL (SELECT, INSERT, UPDATE et DELETE) et des instructions procédurales (boucles, conditions...),
Créer des traitements complexes destinés à être stockés sur le serveur de base de données (objets serveur),
Comme on le sait, les structures de contrôle habituelles d’un langage (IF, WHILE…) ne font pas partie intégrante de la norme SQL. Oracle les prend en compte dans PL/SQL.
Présente une description complète sur les curseurs avec exemples et exercices corrigés. Ainsi, vous allez trouver:
- Définition des curseurs
- Curseurs implicites
- Curseurs explicites
- Les curseurs paramétrables
- Accès concurrents (FOR UPDATE)
- Variables de types Curseurs: Curseurs non typés et typés
-
Pl/sql - interaction avec la base de données & structures de contrôleAbdelouahed Abdou
Interaction avec la base de données
Extraction
Insertion
Modification
Suppression
Structures de contrôle
Structures conditionnelles :
IF
case
Structures répétitives:
LOOP
WHILE-LOOP
FOR-LOOP
Structures répétitives:
Boucles avec étiquettes
Contrôle séquentiel avec GOTO
Opérateurs de comparaison:
IS NULL
LIKE
BETWEEN
IN
PL/SQL (Procedural Language / SQL), l’extension procédurale proposée par Oracle pour SQL (L4G),
Il permet de combiner des requêtes SQL (SELECT, INSERT, UPDATE et DELETE) et des instructions procédurales (boucles, conditions...),
Créer des traitements complexes destinés à être stockés sur le serveur de base de données (objets serveur),
Comme on le sait, les structures de contrôle habituelles d’un langage (IF, WHILE…) ne font pas partie intégrante de la norme SQL. Oracle les prend en compte dans PL/SQL.
Présente une description complète sur les curseurs avec exemples et exercices corrigés. Ainsi, vous allez trouver:
- Définition des curseurs
- Curseurs implicites
- Curseurs explicites
- Les curseurs paramétrables
- Accès concurrents (FOR UPDATE)
- Variables de types Curseurs: Curseurs non typés et typés
-
Objectif général : Acquérir les bases méthodologiques de la résolution d'un problème conduisant à la réalisation d'un programme informatique
Objectifs opérationnels :
- Connaître les étapes de résolution d’un problème
- Stocker et traiter des données simples
- Permettre à un programme de communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Traiter des données composites
- Définir et utiliser des procédures et des fonctions
objectif général : acquerir les fondamentaux d'un langage procédural
objectifs opérationnels :
Mémoriser des données à l’aide des variables
Traiter des données à l’aide des opérateurs
Communiquer avec le programme à travers le clavier et l’écran
Contrôler le flux d’exécution des instructions
Se servir des tableaux, des pointeurs et des structures
Gérer la mémoire d’une manière dynamique
Définir et utiliser des fonctions
objectif général : Acquérir les compétences nécessaires pour développer des sites Web dynamiques.
objectifs opérationnels :
Stocker et utiliser des données à l’aide des variables et des opérateurs.
Manipuler des tableaux et des chaînes de caractères.
Contrôler le flux d’exécution des instructions.
Définir et utiliser des fonctions.
Transférer des données.
Interfacer PHP avec MySQL.
Objectif général : Savoir créer des pages Web interactives sans trop solliciter le serveur et le réseau pour offrir une meilleure expérience utilisateur
Objectifs opérationnels
- Stocker des données à l’aide des variables
- Traiter des données à l’aide des opérateurs.
- Communiquer avec l’internaute à l’aide des E/S de base
- Contrôler le flux d’exécution des instructions.
- Réutiliser et organiser le code en créant des fonctions
- Créer l’interactivité grâce à la gestion des évènements
- Traiter plus facilement plusieurs données connexes grâce aux tableaux et aux objets
- Gérer les propriétés de la fenêtre avec l’objet window
- Manipuler le contenu de la page Web grâce à l’objet document
- Contrôler la saisie d’un formulaire avec l’objet form
Présentation des nouveautés apportées par la version 7 du langage C# : Méthodes locales, Tuples, Déconstructeurs, Pattern matching, Variables de sortie, Membres sous forme d’expression, Amélioration de la levée des exceptions, ...
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
Fortaleciendo las capacidades de los partidos políticos y los Congresos en se...ndiperu
El Director del Programa Regional del NDI para Centroamérica, Eduardo Núñez, participó como expositor en el 1er. Curso Internacional sobre Nuevos Liderazgos en América Latina, desarrollado en la ciudad de Lima (Perú) el pasado 02 de agosto del 2013, organizado por el NDI y el Consorcio Académico.
Objectif général : Acquérir les bases méthodologiques de la résolution d'un problème conduisant à la réalisation d'un programme informatique
Objectifs opérationnels :
- Connaître les étapes de résolution d’un problème
- Stocker et traiter des données simples
- Permettre à un programme de communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Traiter des données composites
- Définir et utiliser des procédures et des fonctions
objectif général : acquerir les fondamentaux d'un langage procédural
objectifs opérationnels :
Mémoriser des données à l’aide des variables
Traiter des données à l’aide des opérateurs
Communiquer avec le programme à travers le clavier et l’écran
Contrôler le flux d’exécution des instructions
Se servir des tableaux, des pointeurs et des structures
Gérer la mémoire d’une manière dynamique
Définir et utiliser des fonctions
objectif général : Acquérir les compétences nécessaires pour développer des sites Web dynamiques.
objectifs opérationnels :
Stocker et utiliser des données à l’aide des variables et des opérateurs.
Manipuler des tableaux et des chaînes de caractères.
Contrôler le flux d’exécution des instructions.
Définir et utiliser des fonctions.
Transférer des données.
Interfacer PHP avec MySQL.
Objectif général : Savoir créer des pages Web interactives sans trop solliciter le serveur et le réseau pour offrir une meilleure expérience utilisateur
Objectifs opérationnels
- Stocker des données à l’aide des variables
- Traiter des données à l’aide des opérateurs.
- Communiquer avec l’internaute à l’aide des E/S de base
- Contrôler le flux d’exécution des instructions.
- Réutiliser et organiser le code en créant des fonctions
- Créer l’interactivité grâce à la gestion des évènements
- Traiter plus facilement plusieurs données connexes grâce aux tableaux et aux objets
- Gérer les propriétés de la fenêtre avec l’objet window
- Manipuler le contenu de la page Web grâce à l’objet document
- Contrôler la saisie d’un formulaire avec l’objet form
Présentation des nouveautés apportées par la version 7 du langage C# : Méthodes locales, Tuples, Déconstructeurs, Pattern matching, Variables de sortie, Membres sous forme d’expression, Amélioration de la levée des exceptions, ...
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
Fortaleciendo las capacidades de los partidos políticos y los Congresos en se...ndiperu
El Director del Programa Regional del NDI para Centroamérica, Eduardo Núñez, participó como expositor en el 1er. Curso Internacional sobre Nuevos Liderazgos en América Latina, desarrollado en la ciudad de Lima (Perú) el pasado 02 de agosto del 2013, organizado por el NDI y el Consorcio Académico.
Comment HWC accompagne ses bâtisseurs de réseauhwc-network
Cette présentation vous décrit comment HWC accompagne ses bâtisseurs de réseau. C'est une démarche par étape, l'apprentissage se fait naturellement en observant ceux qui ont le plus d'expérience.
Presentación del Director Residente del NDI en Perú, Víctor H. Rojas, durante el conversatorio organizado el 19 de agosto del 2013 por Democracia & Desarrollo Internacional. Esta presentación contiene algunos datos recogidos por los especialistas Andrew Claster y Eduardo Núñez.
[Atelier en ligne Frenchweb - 05/11/2015]
> Quelques chiffres
> Rappel Responsive Web Design
> État des lieux du Test RWD
> Priorité : choix des terminaux
> Stratégie de test
> FOCUS Tests mobile
> FOCUS Blocs de contenus externes
> FOCUS E-Commerce
Durant cette session, on va vous montrer les différentes fonctions de la Tooling API avec des cas d'utilisations concrets.
Et vous présentera quelques requêtes SOQL en Tooling API utilisable au quotidien ( Dev ou Admin)
Vous avez déjà travaillé avec de vieux projet PHP (3,4), du “include-ception” ou tout simplement un framework non PSR-0? Voici un retour sur les étapes employé dans différent cas de migration de “legacy” vers Symfony 2.
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Formation
Suite à l'entrée en vigueur de la « Participation Financière Obligatoire » le 2 mai dernier, les règles du jeu ont changé !
Pour les entreprises, cette révolution du dispositif est l'occasion de revoir sa stratégie de formation pour co-construire avec ses salariés un plan de formation alliant performance de l'organisation et engagement des équipes.
Au cours de ce webinar de 20 minutes, co-animé avec la Caisse des Dépôts et Consignations, découvrez tous les détails actualisés sur les dotations et les exonérations, les meilleures pratiques, et comment maximiser les avantages pour les entreprises et leurs salariés.
Au programme :
- Principe et détails de la « Participation Financière Obligatoire » entrée en vigueur
- La dotation : une opportunité à saisir pour co-construire sa stratégie de formation
- Mise en pratique : comment doter ?
- Quelles incidences pour les titulaires ?
Webinar exclusif animé à distance en coanimation avec la CDC
Conseils pour Les Jeunes | Conseils de La Vie| Conseil de La JeunesseOscar Smith
Besoin des conseils pour les Jeunes ? Le document suivant est plein des conseils de la Vie ! C’est vraiment un document conseil de la jeunesse que tout jeune devrait consulter.
Voir version video:
➡https://youtu.be/7ED4uTW0x1I
Sur la chaine:👇
👉https://youtube.com/@kbgestiondeprojets
Aimeriez-vous donc…
-réussir quand on est jeune ?
-avoir de meilleurs conseils pour réussir jeune ?
- qu’on vous offre des conseils de la vie ?
Ce document est une ressource qui met en évidence deux obstacles qui empêchent les jeunes de mener une vie épanouie : l'inaction et le pessimisme.
1) Découvrez comment l'inaction, c'est-à-dire le fait de ne pas agir ou d'agir alors qu'on le devrait ou qu'on est censé le faire, est un obstacle à une vie épanouie ;
> Comment l'inaction affecte-t-elle l'avenir du jeune ? Que devraient plutôt faire les jeunes pour se racheter et récupérer ce qui leur appartient ? A découvrir dans le document ;
2) Le pessimisme, c'est douter de tout ! Les jeunes doutent que la génération plus âgée ne soit jamais orientée vers la bonne volonté. Les jeunes se sentent toujours mal à l'aise face à la ruse et la volonté politique de la génération plus âgée ! Cet état de doute extrême empêche les jeunes de découvrir les opportunités offertes par les politiques et les dispositifs en faveur de la jeunesse. Voulez-vous en savoir plus sur ces opportunités que la plupart des jeunes ne découvrent pas à cause de leur pessimisme ? Consultez cette ressource gratuite et profitez-en !
En rapport avec les " conseils pour les jeunes, " cette ressource peut aussi aider les internautes cherchant :
➡les conseils pratiques pour les jeunes
➡conseils pour réussir
➡jeune investisseur conseil
➡comment investir son argent quand on est jeune
➡conseils d'écriture jeunes auteurs
➡conseils pour les jeunes auteurs
➡comment aller vers les jeunes
➡conseil des jeunes citoyens
➡les conseils municipaux des jeunes
➡conseils municipaux des jeunes
➡conseil des jeunes en mairie
➡qui sont les jeunes
➡projet pour les jeunes
➡conseil des jeunes paris
➡infos pour les jeunes
➡conseils pour les jeunes
➡Quels sont les bienfaits de la jeunesse ?
➡Quels sont les 3 qualités de la jeunesse ?
➡Comment gérer les problèmes des adolescents ?
➡les conseils de jeunes
➡guide de conseils de jeunes
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24BenotGeorges3
Les informations et évènements agricoles en province du Luxembourg et en Wallonie susceptibles de vous intéresser et diffusés par le SPW Agriculture, Direction de la Recherche et du Développement, Service extérieur de Libramont.
https://agriculture.wallonie.be/home/recherche-developpement/acteurs-du-developpement-et-de-la-vulgarisation/les-services-exterieurs-de-la-direction-de-la-recherche-et-du-developpement/newsletters-des-services-exterieurs-de-la-vulgarisation/newsletters-du-se-de-libramont.html
Bonne lecture et bienvenue aux activités proposées.
#Agriculture #Wallonie #Newsletter #Recherche #Développement #Vulgarisation #Evènement #Information #Formation #Innovation #Législation #PAC #SPW #ServicepublicdeWallonie
2. Faire cohabiter des structures de contrôle (si, pour et tant que) avec des
instructions SQL (principalement SELECT, INSERT, UPDATE et DELETE).
Eviter les encombrements reseau : En effet, un bloc PL/SQL donne lieu à
un seul échange entre le client et le serveur
La modularité (un bloc d’instruction peut être composé d’un autre, etc.) :
un bloc peut être nommé pour devenir une procédure ou une fonction
cataloguée, donc réutilisable. Une procédure, ou fonction, cataloguée
peut être incluse dans un paquetage (package) pour mieux contrôler et
réutiliser ces composants logiciels.
La portabilité : un programme PL/SQL est indépendant du système
d’exploitation qui héberge le serveur Oracle. En changeant de système,
les applicatifs n’ont pas à être modifiés.
L’intégration avec les données des tables : on retrouvera avec PL/SQL
tous les types de données et instructions disponibles sous SQL, et des
mécanismes pour parcourir des résultats de requêtes (curseurs), pour
traiter des erreurs (exceptions), pour manipuler des données complexes
(paquetages DBMS_xxx) et pour programmer des transactions (COMMIT,
ROLLBACK, SAVEPOINT).
3. un bloc de code, executé comme une
commande SQL, via un interpréteur standard
(SQL+ ou iSQL*PLus)
un fichier de commande PL/SQL
un programme stocké (procédure, fonction,
package ou trigger)
4.
5.
6.
7. identificateur [CONSTANT] typeDeDonnée [NOT NULL]
[:= | DEFAULT expression];
CONSTANT précise qu’il s’agit d’une constante ;
NOT NULL pose une contrainte en ligne sur la variable ;
DEFAULT permet d’initialiser la variable (équivaut à l’affectation :=).
c_pi CONSTANT NUMBER := 3.14159;
v_rayon NUMBER DEFAULT 1.5;
v_aire NUMBER := c_pi * v_rayon**2;
v_trouvé BOOLEAN NOT NULL := TRUE;
VALUE_ERROR
8. l’affectation comme on la connaît dans les langages de programmation
(variable := expression) ;
par la directive DEFAULT ;
par la directive INTO d’une requête (SELECT … INTO variable FROM …).
9. Variables %TYPE
Variables %ROWTYPE
TYPE RECORD DECLARE
v_cat Produit.categorie%TYPE;
r_prod Produit%ROWTYPE;
BEGIN
SELECT * INTO r_prod FROM
produit WHERE refProd=5;
v_cat=r_prod.categorie;
r_prod.nom=‘nouvp’;
insert into produit values r_prod;
…
TYPE nomRecord IS RECORD
( nomChamp typeDonnées [[NOT NULL] {:= | DEFAULT} expression]
[,nomChamp typeDonnées… ]… );
10. Type TABLE
TYPE nomTypeTableau IS TABLE OF
{typeScalaire | variable%TYPE | table.colonne%TYPE} [NOT NULL]
| table%ROWTYPE
[INDEX BY BINARY_INTEGER];
nomTableau nomTypeTableau;
11. IF condition THEN
instructions;
END IF;
IF condition THEN
instructions;
ELSE
instructions;
END IF;
IF condition1 THEN
instructions;
ELSIF condition2 THEN
instructions;
ELSE
instructions;
END IF;
12. [<<étiquette>>]
CASE variable
WHEN expr1 THEN instructions1;
WHEN expr2 THEN instructions2;
…
WHEN exprN THEN instructionsN;
[ELSE instructionsN+1;]
END CASE [étiquette];
[<<étiquette>>]
CASE
WHEN condition1 THEN instructions1;
WHEN condition2 THEN instructions2;
…
WHEN conditionN THEN instructionsN;
[ELSE instructionsN+1;]
END CASE [étiquette];
13.
14. WHILE condition LOOP
instructions;
END LOOP;
LOOP
instructions;
EXIT [WHEN condition;]
END LOOP;
FOR compteur IN [REVERSE] valeurInf..valeurSup LOOP
instructions;
END LOOP;
CONTINUE [ etiquette ] [ WHEN condition ];
15. SELECT liste INTO { nomVariablePLSQL [,nomVariablePLSQL]… |
nomRECORD } FROM nomTable …;
16.
17. l’atomicité des instructions qui sont
considérées comme une seule opération
(principe du tout ou rien) ;
la cohérence (passage d’un état cohérent de
la base à un autre état cohérent) ;
l’isolation des transactions entre elles (lecture
consistante, mécanisme décrit plus loin) ;
la durabilité des opérations (les mises à jour
perdurent même si une panne se produit
aprèsla transaction).
18.
19. CREATE [OR REPLACE] PROCEDURE [schéma.]nomProcédure
[(paramètre [ IN | OUT | IN OUT ] [NOCOPY] typeSQL
[{:= | DEFAULT} expression]
[,paramètre [ IN | OUT | IN OUT ] [NOCOPY] typeSQL
[{:= | DEFAULT} expression]… ) ] ]
[AUTHID { CURRENT_USER | DEFINER }]
{ IS | AS }
[PRAGMA AUTONOMOUS_TRANSACTION;]
{ corpsduSousProgrammePL/SQL | LANGUAGE {
JAVA NAME 'nomMéthodeJava' |
C [NAME nomSourceC] LIBRARY nomLibrairie [AGENT IN (paramètre)]
[WITH CONTEXT] [PARAMETERS ( paramètres )] } };
20. IN désigne un paramètre d’entrée, out un paramètre de sortie et
in out un paramètre d’entrée et de sortie. Il est possible
d’initialiser chaque paramètre par une valeur.
NOCOPY permet de transmettre directement le paramètre. On
l’utilise pour améliorer les performances lors du passage de
volumineux paramètres de sortie comme les record, les tables
index-by (les paramètres IN sont toujours passés en NOCOPY).
La clause AUTHID détermine si la procédure s’exécute avec les
privilèges de son propriétaire (option par défaut, on parle de
definer-rights procedure) ou de l’utilisateur courant (on parle de
invoker-rights procedure).
PRAGMA AUTONOMOUS_TRANSACTION déclare le sous-
programme en tant que transaction autonome (lancée par une
autre transaction dite « principale »). Les transactions autonomes
permettent de mettre en suspens la transaction principale puis
de reprendre la transaction principale
corpsduSousProgrammePL/SQL contient la déclaration et les
instructions de la procédure, toutes deux écrites en PL/SQL.
21. CREATE [OR REPLACE ] FUNCTION [schéma.]nomFonction
[(paramètre [ IN | OUT | IN OUT ] [NOCOPY] typeSQL
[{:= | DEFAULT} expression]
[,paramètre [ IN | OUT | IN OUT ] [NOCOPY] typeSQL
[{:= | DEFAULT} expression]… ) ] ]
RETURN typeSQL
[ AUTHID { DEFINER | CURRENT_USER } ]
{IS | AS}
{ corpsduSousProgrammePL/SQL |
LANGUAGE {
JAVA NAME 'nomMéthodeJava' |
C [NAME nomSourceC] LIBRARY nomLibrairie [AGENT IN (paramètre)]
[WITH CONTEXT] [PARAMETERS ( paramètres )] } };
22.
23.
24.
25.
26.
27.
28. EXCEPTION
WHEN exception1 [OR exception2 …] THEN
instructions;
[WHEN exception3 [OR exception4 …] THEN
instructions; ]
[WHEN OTHERS THEN
instructions; ]
35. BEFORE | AFTER | INSTEAD OF précise la chronologie entre l’action à
réaliser par le déclencheur LMD et la réalisation de l’événement
(exemple BEFORE INSERT programmera l’exécution du déclencheur
avant de réaliser l’insertion).
DELETE | INSERT | UPDATE précise la nature de l’événement pour les
déclencheurs LMD.
ON {[schéma.] nomTable | nomVue} spécifie la table, ou la vue,
associée au déclencheur LMD.
REFERENCING permet de renommer des variables.
FOR EACH ROW différencie les déclencheurs LMD au niveau ligne ou
au niveau état.
36. événementBase identifie la nature d’un déclencheur d’instance (STARTUP ou
SHUTDOWN pour exécuter le déclencheur au démarrage ou à l’arrêt de la
base), d’un déclencheur d’erreurs (SERVERERROR ou SUSPEND pour exécuter
le déclencheur dans le cas d’une erreur particulière ou quand une transaction
est suspendue) ou d’un déclencheur de connexion (LOGON ou LOGOFF pour
exécuter le déclencheur lors de la connexion ou de la déconnexion à la
base).
actionStructureBase spécifie la nature d’un déclencheur LDD (CREATE, ALTER,
DROP, etc. pour exécuter par exemple le déclencheur lors de la création, la
modification ou la suppression d’un objet de la base).
ON {[schéma.]SCHEMA | DATABASE}} précise le champ d’application du
déclencheur (de type LDD, erreur ou connexion). Utilisez DATABASE pour les
déclencheurs qui s’exécutent pour quiconque commence l’événement, ou
SCHEMA pour les déclencheurs qui ne doivent s’exécuter que dans le schéma
courant.
WHEN conditionne l’exécution du déclencheur
41. CREATE OR REPLACE PROCEDURE test_file_pack IS
file_handle UTL_FILE.FILE_TYPE;
BEGIN
file_handle := UTL_FILE.FOPEN('l:db8utlfiledir','file1.txt','w');
DBMS_OUTPUT.PUT_LINE('Start');
UTL_FILE.PUT_LINE(file_handle,'Bonjour chez Vous !');
UTL_FILE.PUT_LINE(file_handle,' on est le ' || to_char(sysdate));
UTL_FILE.FFLUSH(file_handle);
UTL_FILE.FCLOSE(file_handle);
DBMS_OUTPUT.PUT_LINE('Fin !');
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No_data_found');
UTL_FILE.FCLOSE(file_handle);
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('UTL_FILE.INVALID_PATH');
UTL_FILE.FCLOSE(file_handle);
WHEN UTL_FILE.READ_ERROR THEN
DBMS_OUTPUT.PUT_LINE('UTL_FILE.READ_ERROR');
UTL_FILE.FCLOSE(file_handle);
WHEN UTL_FILE.WRITE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('UTL_FILE.WRITE_ERROR');
UTL_FILE.FCLOSE(file_handle);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Autres erreurs');
UTL_FILE.FCLOSE(file_handle);
END;
46. UTL_MAIL.SEND_ATTACH_VARCHAR2 (
sender IN VARCHAR2 CHARACTER SET ANY_CS,
recipients IN VARCHAR2 CHARACTER SET ANY_CS,
cc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
bcc IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
subject IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL,
message IN VARCHAR2 CHARACTER SET ANY_CS,
mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=us-ascii',
priority IN PLS_INTEGER DEFAULT NULL
attachment IN RAW,
att_inline IN BOOLEAN DEFAULT TRUE,
att_mime_type IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT
'text/plain; charset=us-ascii',
att_filename IN VARCHAR2 DEFAULT NULL);
47. begin
UTL_MAIL.send(sender => ‘source@gmail.fcom',
recipients => ‘cible@hotmail.com',
cc => NULL,
bcc => NULL,
subject => ‘email de test',
message => ‘message de utl_mail ‘);
end;
begin
UTL_MAIL.send_attach_raw
(sender => ‘sender@yahoo.com',
recipients => ‘aicha@gmail.com',
subject => ‘sj',
attachment => HEXTORAW('616262646566C2AA'),
message => ‘email avec fichier attaché',
att_filename => 'os.sql');
end;
48. Fonction OPEN_CURSOR RETURN INTEGER ;Cette fonction ouvre un
curseur et renvoie un INTEGER.
Procédure PARSE (pointeur IN INTEGER, requête_sql IN
VARCHAR2,DBMS.NATIVE) ;Cette procédure analyse la chaîne
‘requête_sql‘ suivant la version sous laquellel’utilisateur est
connecté.
Fonction EXECUTE (pointeur IN INTEGER) RETURN INTEGER ;Cette
fonction exécute l’ordre associé au curseur et renvoie le nombre de
lignestraitées dans le cas d’un INSERT, DELETE ou UPDATE.
Procédure CLOSE_CURSOR (pointeur IN OUT INTEGER) ;Cette
procédure ferme le curseur spécifié, met l’identifiant du curseur à
NULL etlibère la mémoire allouée au curseur
Procédure BIND_VARIABLE( pointeur IN INTEGER,
nom_variable_substitutionIN VARCHAR2,
valeur_variable_substitution IN {NUMBER|VARCHAR2|DATE})
49. CREATE OR REPLACE PROCEDURE up (
p_salaire IN NUMBER, p_no IN NUMBER,
p_table IN VARCHAR2)
IS
pointeur INTEGER;exec INTEGER;
BEGIN
pointeur:=DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE( pointeur,
'update '||p_table||
' set salaire ='||p_salaire||
' where no ='||p_no,
DBMS_SQL.V7);
exec:=DBMS_SQL.EXECUTE(pointeur);
DBMS_SQL.CLOSE_CURSOR(pointeur);
END;
51. …
source_cursor := dbms_sql.open_cursor;
DBMS_SQL.PARSE(source_cursor,
'SELECT id, name, birthdate FROM ' || source,
DBMS_SQL.NATIVE);
DBMS_SQL.DEFINE_COLUMN(source_cursor, 1, id_var);
DBMS_SQL.DEFINE_COLUMN(source_cursor, 2, name_var, 30);
DBMS_SQL.DEFINE_COLUMN(source_cursor, 3, birthdate_var);
ignore := DBMS_SQL.EXECUTE(source_cursor);
…
LOOP
IF DBMS_SQL.FETCH_ROWS(source_cursor)=0 THEN exit; END IF;
-- get column values of the row
DBMS_SQL.COLUMN_VALUE(source_cursor, 1, id_var);
DBMS_SQL.COLUMN_VALUE(source_cursor, 2, name_var);
DBMS_SQL.COLUMN_VALUE(source_cursor, 3, birthdate_var);
…
END LOOP;
52. EXECUTE IMMEDIATE dynamic_string
[ INTO { define_variable [, define_variable ...]
| record_name } ]
[ USING [ IN | OUT | IN OUT ] bind_argument
[, [ IN | OUT | IN OUT ] bind_argument] ... ]
Plus grande rapidité d’exécution : En moyenne, le SQL
dynamique natif s’exécute de 1.5 à 3 fois plus rapidement.
Support des types définis : Le SQL dynamique natif supporte tous
les types définis par l’utilisateur, Objets, collections, etc…
Support des types RECORD pour les ordres Select : Le SQL
dynamique natif permet d’utiliser un objet de type RECORD dans
une clause INTO
53. DECLARE
Requete VARCHAR2(256) ;
Emp_id emp.emp_id%TYPE := 1214 ;
BEGIN
Requete := ‘CREATE TABLE XX ( ID NUMBER, LIBELLE VARCHAR2(100) )’;
EXECUTE IMMEDIATE Requete ;
Requete := ‘BEGIN Mon_package.Ma_procedure( :1 ); END;’;
EXECUTE IMMEDIATE Requete USING Emp_id;
END ;
54. DECLARE
Emp_id emp.emp_id%TYPE := 1214 ;
Salary NUMBER(7,2) ;
v_Null NUMBER := NULL ;
Requete VARCHAR2(256) ;
BEGIN
Requete:= ‘SELECT salary from EMP WHERE empno = :1’;
EXECUTE IMMEDIATE Requete INTO salary USING Emp_id ;
Requete:= ‘UPDATE EMP SET salary = :1 WHERE empno = :2’;
EXECUTE IMMEDIATE Requete USING NULL, Emp_id ;
Requete:= ‘UPDATE EMP SET salary = :1 WHERE empno = :2’;
EXECUTE IMMEDIATE Requete USING v_Null, Emp_id ;
END ;
55. create function row_count (tab_name VARCHAR2) RETURN NUMBER AS
rows NUMBER;
begin
EXECUTE IMMEDIATE ’select count(*) from ’ || tab_name into rows;
return rows;
end;
DECLARE
Emp_id emp.emp_id%TYPE := 1214 ;
Emp_name emp.name_id%TYPE ;
Emp_rec emp%ROWTYPE ;
Requete VARCHAR2(256) ;
BEGIN
Requete:= ‘SELECT emp_name from EMP WHERE empno = :1’;
EXECUTE IMMEDIATE Requete INTO Emp_name USING Emp_id ;
Requete:= ‘SELECT * from EMP WHERE empno = :1’;
EXECUTE IMMEDIATE Requete INTO Emp_rec USING Emp_id ;
END ;
56. DECLARE
TYPE T_EMP_NAME is TABLE of EMP.emp_name%TYPE;
TYPE T_EMP_SAL is TABLE of EMP.salary%TYPE;
T_Names T_EMP_NAME ;
T_Sal T_EMP_SAL ;
Requete VARCHAR2(256);
BEGIN
Requete:= ‘SELECT emp_name, salary from EMP’;
EXECUTE IMMEDIATE Requete BULK COLLECT INTO T_Names, T_sal;
END;
57. DECLARE
TYPE EmpCurTyp IS REF CURSOR;
emp_cv EmpCurTyp;
emp_rec employees%ROWTYPE;
sql_stmt VARCHAR2(200);
v_job VARCHAR2(10) := ’ST_CLERK’;
BEGIN
sql_stmt := ’SELECT * FROM employees WHERE job_id = :j’;
OPEN emp_cv FOR sql_stmt USING v_job;
LOOP
FETCH emp_cv INTO emp_rec;
EXIT WHEN emp_cv%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(’Name: ’ || emp_rec.last_name || ’
Job Id: ’ || emp_rec.job_id);
END LOOP;
CLOSE emp_cv;
END;
/
58.
59. IDENTIFIED BY motdePasse permet d’affecter un mot de passe à un utilisateur
local (cas le plus courant et le plus simple).
IDENTIFIED BY EXTERNALLY permet de se servir de l’authenticité du système
d’exploitation pour s’identifier à Oracle (cas des compte OPS$ pour Unix).
IDENTIFIED BY GLOBALLY permet de se servir de l’authenticité d’un système
d’annuaire.
DEFAULT TABLESPACE nomTablespace associe un espace disque de travail
(appelé tablespace) à l’utilisateur.
TEMPORARY TABLESPACE nomTablespace associe un espace disque
temporaire (dans lequel certaines opérations se dérouleront) à l’utilisateur.
QUOTA permet de limiter ou pas chaque espace alloué.
PROFILE nomProfil affecte un profil (caractéristiques système relatives au CPU
et aux connexions) à l’utilisateur.
PASSWORD EXPIRE pour obliger l’utilisateur à changer son mot de passe à la
première connexion (par défaut il est libre). Le DBA peut aussi changer ce
mot de passe.
ACCOUNT pour verrouiller ou libérer l’accès à la base (par défaut UNLOCK).
60.
61.
62. SESSIONS_PER_USER : nombre de sessions concurrentes autorisées.
CPU_PER_SESSION : temps CPU maximal pour une session en centièmes de secondes.
CPU_PER_CALL : temps CPU autorisé pour un appel noyau en centièmes de secondes.
CONNECT_TIME : temps total autorisé pour une session en minutes (pratique pour les examens
de TP minutés).
IDLE_TIME : temps d’inactivité autorisé, en minutes, au sein d’une même session (pour les
étudiants qui ne clôturent jamais leurs sessions).
PRIVATE_SGA : espace mémoire privé alloué dans la SGA (System Global Area).
FAILED_LOGIN_ATTEMPTS : nombre de tentatives de connexion avant de bloquer l’utilisateur
PASSWORD_LIFE_TIME : nombre de jours de validité du mot de passe (il expire s’il n’est pas
changé au cours de cette période).
PASSWORD_REUSE_TIME : nombre de jours avant que le mot de passe puisse être utilisé à
nouveau. Si ce paramètre est initialisé à un entier, le paramètre PASSWORD_REUSE_MAX doit
être passé à UNLIMITED.
PASSWORD_REUSE_MAX : nombre de modifications de mot de passe avant de pouvoir réutiliser
le mot de passe courant. Si ce paramètre est initialisé à un entier, le paramètre
PASSWORD_REUSE_TIME doit être passé à UNLIMITED.
PASSWORD_LOCK_TIME : nombre de jours d’interdiction d’accès à un compte après que le
nombre de tentatives de connexions a été atteint
PASSWORD_GRACE_TIME : nombre de jours d’une période de grâce qui prolonge l’utilisation du
mot de passe avant son changement (un message d’avertissement s’affiche lors des
connexions). Après cette période le mot de passe expire.
63.
64.
65. privilègeSystème : description du privilège système (exemple
CREATE TABLE, CREATE SESSION, etc.).
ALL PRIVILEGES : tous les privilèges système.
PUBLIC : pour attribuer le(s) privilège(s) à tous les utilisateurs.
IDENTIFIED BY désigne un utilisateur encore inexistant dans la
base. Cette option n’est pas valide si le bénéficiaire est un
rôle ou est PUBLIC.
WITH ADMIN OPTION : permet d’attribuer aux bénéficiaires le
droit de retransmettre le(s) privilège(s) reçu(s) à une tierce
personne (utilisateur(s) ou rôle(s)).
66.
67.
68.
69. privilègeObjet : description du privilège objet (ex : SELECT,
DELETE, etc.).
colonne précise la ou les colonnes sur lesquelles se porte le
privilège INSERT, REFERENCES, ou UPDATE (exemple :
UPDATE(typeAvion) pour n’autoriser que la modification de la
colonne typeAvion).
ALL PRIVILEGES donne tous les privilèges avec l’option GRANT
OPTION) l’objet en question.
PUBLIC : pour attribuer le(s) privilège(s) à tous les utilisateurs.
WITH GRANT OPTION : permet de donner aux bénéficiaires le
droit de retransmettre les privilèges reçus à une tierce
personne (utilisateur(s) ou rôle(s)).
70.
71.
72.
73.
74. IDENTIFIED indique le mot de passe du rôle si besoin est.
ALL active tous les rôles (non identifies) accordes a l’utilisateur qui execute la
commande. Cette activation n’est valable que dans la session courante. La clause EXCEPT
permet d’exclure des rôles accordes a l’utilisateur (mais pas via d’autres rôles) de
l’activation globale.
•NONE désactive tous les rôles dans la session courante (role DEFAULT inclus).