Je travaille en ce moment sur un cours portant sur les procédures et les fonctions stockées pl/sql.
J'ai quelques questions à ce sujet.
Je vous remercie beaucoup d'avoir la gentillesse de bien vouloir y répondre.
procedures stockées
Quand, le mode de paramètre est OUT, il est indiqué dans le cours dont je dispose, que le paramètre formel agit en tant que
variable non initialisée et ne peut pas être affecté à une autre variable ou à lui-même.
En outre, le paramètre réel dans le mode paramètre OUT doit être une variable.
Voici un exemple de procedure stockée avec des paramètre OUT
Dans cette procédure, un des paramètre OUT est, par exemple p_name.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE OR REPLACE PROCEDURE query_emp ( p_id IN emp.empno%TYPE, p_name OUT emp_ename%TYPE, p_salary OUT emp.sal%TYPE, p_comm OUT emp.comm%TYPE) IS BEGIN SELECT ename, sal, comm INTO p_name, p_salary,p_comm WHERE empno =p_id; END query_emp; /
C'est bien une variable non initialisée, et que je ne peux pas initialiser.
Lorqu'il est dit que l'on ne peut affecter cette variable à lui-même, cela signifie t-il que je ne peux pas avoir,dans le code, une expresion telle que p_name= p_name;
Dans quel cas pourrais-je avoir une telle instruction?
Dans la syntaxe de création d'une procédure, il est écrit IS/AS après la section des paramètres
Que signifie ce AS? a-til la même valeur que le IS et peut-on utiliser indifféremment l'un ou l'autre.?
Pour ce qui concerne le mot clé REPLACE dans la syntaxe de création d'une procédure ou d'une fonction, est-ce bien du fait du mot clé REPLACE que je peux ensuite effectuer un ALTER function ou un ALTER procedure?
D'après ce que j'ai compris, si je ne fais pas cela, il me sera impossible de faire un ALTER function ou un ALTER procedure?
J'ai fait un test et me suis rendu compte que j'ai pu faire un alter function même si je n'ai pas indiqué REPLACE dans la syntaxe de création de cette fonction.
Pouvez-vous m'expliquer mon erreur, si erreur il y a et ce que je n'ai pas bien compris.
Je vous en remercie.
D'après ce que j'ai appris, la commande ALTER function ou ALTER procedure permet de changer la definition d'une fonction ou d'une procédure, mais pas son code ( ses instructions).
Est ce bien exact?
Si c'est le cas, est-il si important alors de préciser OR REPLACE dans la syntaxe de création d'une procédure ou d'une fonction?
Existe t-il une machine virtuelle , dans le moteur pl/SQl qui permet d'exécuter les programmes pl/sql, puisque le code est d'abord modifié en pseude-code, il faut un outil pour executer ce code ensuite.
En ce qui concerne les paramètres de l'instruction ALTER FUNCTION , il sont entre autres les suivants:
schema: specifie le schema qui contient la fonction
function:specifie le nom de la fonction à recompiler
COMPILE:specifier COMPILE pour que la base de données recompile la fonction
J'ai tenté de lancer l'instruction alter function non definie avec OR REPLACE avec ce paramètre ,et la compilation a bien eu lieu.
Pouvez-vous m'expliquer pourquoi( pas de message d'erreur reçu)
DEBUG:Specifer DEBUG pour informer le compilateur PL/SQL compiler de generer et de stocker le code en vue qu'il soit debuggué
Dans quels cas importants ces paramètres s'appliquent-ils?
Il est dit , dans le cours dont je dispose, qu'un fichier script avec l'instruction CREATE PROCEDURE permet de modifier l'instruction en cas d'erreurs de compilation ou d'exécution.
N'est ce pas plutôt l'instruction CREATE OR REPLACE qui le permet?
soit la procédure suivante
Pouvez-vous me confirmer le cheminement de la variable g_phone_no:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 VARIABLE g_phone_no VARCHAR2(15) BEGIN := g_phone_no= '8006330575'; END; EXECUTE format_phone(:g_phone_no);
Tout d'abord, dans le bloc anonyme commençant par BEGIN, ci-dessus, elle prend la valeur 8006330575
Ce qui implique que la variable g_phone_no a pour valeur 8006330575
Ensuite, cette valeur est utilisée pour le paramètre réél :=g_phone_no de la procedure format_phone
Je vous demande cela, pour bien confirmer que c'est du fait que la variable g_phone_no existe en dehors du bloc anonyme, que je peux reutiliser sa valeur dans l'appel à la procedure format_phone
Fonctions stockées
Pouvez-vous m'expliquer cette phrase
Pouvez-vous me donner un exemple qui illustre ces propos et permet de mieux les comprendre."on peut appeler des fonctions stockées à partir d'expression SQL pour augmenter l'indépendance des données .
Ceci permet de traiter des analyses complexes de données dans le serveur Oracle plutôt que d'extraire les données dans une application afin d'y executer la fonction."
Je vous en remercie.
Par ailleurs, que signifient
- "augmenter l'indépendance des données"
pouvez vous me donner un exemple.Je vous en remercie beaucoup.
-traiter des analyses complexes des données dans le serveur Oracle
Que signifie le fait que les fonctions stockées permettent de gérer de nouveaux types de données?
Voici la phrase suivante" les expression SQL pouvant provoquer des effets de bord sont les suivantes INSERT, UPDATE, DELETE
Ceci signifie qu'il n'est pas permis, par le biais d'une fonction stockée de modifier les valeurs de la base de données, mais de simplement ramener une valeur à partir de celles dejà existantes dans les colonnes de base de données .
Pouvez vous m'expliquer pourquoi une telle restriction êst nécessaire.
Vous remerciant encore beaucoup de votre aide sur tous ces points ,
Cordialement.
new_wave
Partager