CREATE PROCEDURE |
Créer une procédure |
|---|---|
| Oracle Database SQL |
Syntaxe
|
CREATE [OR REPLACE] PROCEDURE [schema.]procedure_name [ argument IN [NOCOPY] datatype argument OUT [NOCOPY] datatype argument IN OUT [NOCOPY] datatype ] [AUTHID CURRENT_USER | AUTHID DEFINER] AS plsql_sub_program_body |
|
CREATE [OR REPLACE] PROCEDURE [schema.]procedure_name [ argument IN [NOCOPY] datatype argument OUT [NOCOPY] datatype argument IN OUT [NOCOPY] datatype ] [AUTHID CURRENT_USER | AUTHID DEFINER] AS LANGUAGE JAVA NAME ('string') |
|
CREATE [OR REPLACE] PROCEDURE [schema.]procedure_name [ argument IN [NOCOPY] datatype argument OUT [NOCOPY] datatype argument IN OUT [NOCOPY] datatype ] [AUTHID CURRENT_USER | AUTHID DEFINER] AS LANGUAGE C NAME name LIBRARY lib_name [AGENT IN (argument)] [WITH CONTEXT][PARAMETERS (parameters)] |
Paramètres
| Nom | Description |
|---|---|
| CREATE PROCEDURE | Ce paramètre permet de démarrer la création d'une procédure stockée. |
| OR REPLACE | Ce paramètre permet de recréer une procédure existante sans provoquer d'erreur si elle existe déjà. |
| [schema.]procedure_name | Ce paramètre permet d'indiquer le nom complet de la procédure, avec éventuellement le schéma auquel elle appartient. |
| argument | Ce paramètre permet d'indiquer le nom d'un paramètre de la procédure. |
| IN | Ce paramètre permet d'indiquer le mode d'entrée du paramètre : valeur fournie par l'appelant. |
| OUT | Ce paramètre permet d'indiquer le mode de sortie du paramètre : valeur renvoyée à l'appelant. |
| IN OUT | Ce paramètre permet d'indiquer le mode d'entrée/sortie du paramètre : la valeur est modifiée par la procédure. |
| NOCOPY | Ce paramètre permet d'indiquer que le paramètre doit être passé par référence (optimisation des performances, surtout pour les gros objets). |
| datatype | Ce paramètre permet d'indiquer le type de données du paramètre (exemple : NUMBER, VARCHAR2, DATE,...). |
| AUTHID CURRENT_USER | Ce paramètre permet d'indiquer la procédure s'exécute avec les privilèges du utilisateur appelant (sécurité basée sur le contexte d'exécution). |
| AUTHID DEFINER | Ce paramètre permet d'indiquer la procédure s'exécute avec les privilèges du créateur de la procédure (valeur par défaut). |
| plsql_sub_program_body | Ce paramètre permet d'indiquer le corps de la procédure en langage PL/SQL, contenant les instructions exécutées. |
| AS LANGUAGE JAVA NAME ('string') | Ce paramètre permet d'indiquer qu'il s'agit d'une procédure Java et donne le nom Java complet de la méthode (signature entre guillemets simples). |
| AS LANGUAGE C NAME name | Ce paramètre permet d'indiquer qu'il s'agit d'une procédure C et donne le nom de la fonction C dans la bibliothèque. |
| LIBRARY lib_name | Ce paramètre permet d'indiquer le nom logique de la bibliothèque partagée déclarée dans Oracle (CREATE LIBRARY), contenant la fonction C. |
| AGENT IN (argument) | Ce paramètre permet de spécifier un paramètre jouant le rôle d'agent (intermédiaire, souvent pour les appels distribués). |
| WITH CONTEXT | Ce paramètre permet de fournir à la fonction C un contexte Oracle (OCIExtProcContext), utile pour des appels externes complexes. |
| PARAMETERS (parameters) | Ce paramètre permet de cartographier les types Oracle aux types C, utile si la conversion par défaut ne convient pas. |
Description
Cette instruction permet de créer une nouvelle base de données.
Remarques
- Polyvalence du mot-clef CREATE PROCEDURE : L'instruction CREATE PROCEDURE permet de définir une STORED PROCEDURE dans Oracle, pouvant être écrite en trois langages différents : PL/SQL, Java ou C. Cela démontre la grande interopérabilité de la base Oracle avec des environnements externes. Cette souplesse facilite l'intégration d'algorithmes complexes ou de bibliothèques existantes sans avoir à les réécrire en PL/SQL.
- Utilisation du mot-clé OR REPLACE : L'ajout de OR REPLACE permet de remplacer une procédure existante sans devoir la supprimer au préalable. Cela évite les erreurs liées à la redéclaration et préserve les privilèges associés à l'objet. Ce mécanisme est très utile pour les mises à jour fréquentes dans les environnements de développement ou de maintenance.
- Définition des paramètres IN, OUT et IN OUT : Les paramètres d'une procédure Oracle peuvent être déclarés en IN, OUT ou IN OUT, ce qui permet de contrôler le flux de données entre l'appelant et la procédure. Cela rend possible la création de procédures très flexibles, pouvant à la fois recevoir des valeurs et en renvoyer. L'utilisation judicieuse de ces modes de passage est essentielle à la clarté et à la robustesse du code.
- Optimisation avec le mot-clef NOCOPY : Le mot-clef NOCOPY permet une optimisation des performances en évitant la copie physique des paramètres (surtout pour les structures volumineuses comme les collections ou les objets). Cependant, son utilisation peut introduire des effets de bord indésirables si le traitement échoue, car la mémoire peut avoir déjà été modifiée. Il convient donc de l'utiliser avec prudence.
- Sécurité contextuelle avec AUTHID : L'option AUTHID CURRENT_USER ou AUTHID DEFINER permet de choisir le contexte de sécurité dans lequel la procédure sera exécutée. Cela affecte les droits d'accès aux objets de la base de données. Cette distinction est particulièrement utile dans des architectures multitenant ou orientées services, où les permissions doivent être soigneusement contrôlées.
- Support du langage Java intégré : Oracle permet de créer des STORED PROCEDURE en Java, ce qui est très utile pour réutiliser du code Java existant directement dans la base de données. Cela permet de bénéficier de la puissance de la JVM (Java Virtual Machine) tout en restant dans l'écosystème Oracle. L'appel se fait via le nom complet de la méthode Java, spécifié sous forme de chaîne de caractères.
- Connexion aux bibliothèques externes en C : Grâce au support du langage C, Oracle permet d'appeler du code natif via des bibliothèques dynamiques (LIBRARY). Cela ouvre la porte à des intégrations bas niveau, par exemple pour des traitements spécialisés, des accès matériels ou des protocoles personnalisés. Ces extensions C doivent être déclarées au préalable via l'instruction CREATE LIBRARY.
- Paramètres avancés pour les procédures C : Les options AGENT IN, WITH CONTEXT et PARAMETERS sont spécifiques aux procédures C et permettent une fine configuration de l'appel externe. Par exemple, WITH CONTEXT fournit un objet de contexte Oracle au code natif, et PARAMETERS permet de cartographier précisément les types Oracle aux types C. Ces paramètres avancés assurent une interopérabilité fine et robuste entre Oracle et le code externe.
Voir également
Article - Les géants de l'informatique - Oracle
Dernière mise à jour : Lundi, le 11 mai 2015