syntaxe
Description
crée une procédure stockée. Par défaut, une routine estassociée à la base de données par défaut. Pour associer la routineexplicitly à une base de données Donnée, spécifiez le nom comme db_name.sp_namewlorsque vous le créez.
Lorsque la routine est appelée, une UTILISATION implicite db_name est effectuée (andundone lorsque la routine se termine). Le provoque la routine à havethe donnée base de données par défaut pendant son exécution. Les instructions USE withinstored routines sont interdites.,
Lorsqu’une procédure stockée a été créée, vous l’invoquez en utilisant l’instructionCALL
(voir appel).
pour exécuter l’instructionCREATE PROCEDURE
, il est nécessaire d’avoir le privilègeCREATE ROUTINE
. Par défaut, Mariadbautomatiquement accorde les privilègesALTER ROUTINE
etEXECUTE
à theroutine creator. Voir Aussi privilèges de Routine stockés.,
les clauses DEFINER
et SQL SECURITY spécifient le contexte de sécurité à utiliser lors de la vérification des privilèges d’accès au moment de l’exécution de routine, comme décrit plus loin. Nécessite le super privilège, ou, à partir de MariaDB 10.5.2, le privilège SET USER.
Si le nom de la routine est identique au nom d’une fonction SQL intégrée, vous devez utiliser un espace entre le nom et la parenthèse suivante lors de la définition de la routine, sinon une erreur de syntaxe se produit. Ceci est également vrai lorsque vous invoquez la routine plus tard., Pour cette raison, nous suggérons qu’il est préférable d’éviter de réutiliser les noms des fonctions SQL existantes pour vos propres routines stockées.
le mode SQL IGNORE_SPACE s’applique aux fonctions intégrées, pas aux storedroutines. Il est toujours permis d’avoir des espaces après un nom de routine,que IGNORE_SPACE soit activé ou non.
la liste des paramètres entre parenthèses doit toujours être présente.S’il n’y a pas de paramètres, une liste de paramètres vide de () devrait être utilisée. Les noms de paramètres ne sont pas sensibles à la casse.,
chaque paramètre peut être déclaré Pour utiliser n’importe quel type de données valide, sauf que L’attribut COLLATE ne peut pas être utilisé.
pour les identificateurs valides à utiliser comme noms de procédure, voir noms D’identificateurs.
IN/OUT/INOUT
Chaque paramètre est un IN
paramètre par défaut. Pour spécifier autrement forums paramètre, utilisez le mot-clé OUT
ou INOUT
avant le nom du paramètre.
un paramètreIN
transmet une valeur à une procédure., La procédure peut modifier la valeur, mais la modification n’est pas visible par l’appelant lors du retour de la procédure. Un paramètreOUT
transmet une valeur de theprocedure à l’appelant. Sa valeur initiale est NULL dans theprocedure, et sa valeur est visible à l’appelant lorsque le procedurereturns. Un paramètre INOUT
est initialisé par l’appelant, peut être modifié par la procédure, et toute modification apportée par la procédure est visible à l’appelant lorsque la procédure revient.,
pour chaque paramètreOUT
ouINOUT
, passez une variable définie par l’utilisateur dans l’instructionCALL
qui appelle la procédure afin que vous puissiez obtenir sa valeur lorsque la procédure revient. Si vous appelez procedurefrom dans une autre procédure ou fonction stockée, vous pouvez également passer un paramètre aroutine ou une variable de routine locale en tant que paramètre IN
ou INOUT
.
DÉTERMINISTE/NON DÉTERMINISTE
DETERMINISTIC
et NOT DETERMINISTIC
appliquer uniquement aux fonctions., Spécification DETERMINISTC
ou NON-DETERMINISTIC
dans des procédures n’a pas d’effet. La valeur par défaut est NOT DETERMINISTIC
. Les fonctions sont DETERMINISTIC
lorsqu’ils retournent toujours la même valeur pour la même entrée. Par exemple, une fonction tronquer ou sous-chaîne. Toute fonction impliquant des données est donc toujours NOT DETERMINISTIC
.,
contient SQL/pas SQL/lit les données SQL/modifie les données SQL
CONTAINS SQL
,NO SQL
,READS SQL DATA
, etMODIFIES SQL DATA
sont des clauses informatives qui disent au serveur ce que fait la fonction. MariaDB ne vérifie en aucune façon si la clause spécifiée est correcte. Si aucune de ces clauses n’est spécifiée, CONTAINS SQL
est utilisé par défaut.
MODIFIES SQL DATA
signifie que la fonction contient des énoncés qui peuvent modifier les données stockées dans les bases de données., Cela se produit si la fonction contient des instructions telles que DELETE, UPDATE, INSERT, REPLACE ou DDL.
READS SQL DATA
signifie que la fonction lit les données stockées dans les bases de données, mais ne modifie pas les données. Cela se produit si des instructions SELECT sont utilisées, mais aucune opération d’écriture n’est exécutée.
CONTAINS SQL
signifie que la fonction contient au moins une instruction SQL, mais qu’elle ne lit ni n’écrit Aucune donnée stockée dans une base de données. Les exemples incluent SET ou DO.,
NO SQL
ne signifie rien, car MariaDB ne prend actuellement en charge aucune langue autre que SQL.
Le routine_body est constitué d’une instruction de procédure SQL valide. Cela peut être une instruction simple telle que SELECT ou INSERT, ou il peut être une instruction composée écrite en utilisant BEGIN et END. Les déclarations composéespeut contenir des déclarations, des boucles et d’autres structurestatements de contrôle. Voir Instructions programmatiques et composées pour plus de détails sur la syntaxe.
MariaDB permet aux routines de contenir des instructions DDL, telles queCREATE
andDROP., MariaDB permet également aux procédures stockées (mais pas aux fonctions stockées) de contenir des instructions de transaction SQL telles que COMMIT
.
Pour plus d’informations sur les instructions qui ne sont pas autorisées dans les routines instored, voir Limitations de Routine stockées.
appel de procédures stockées à partir de programmes
pour plus d’informations sur l’appel de procédures stockées à partir de programmes écrits dans un langage doté d’une interface MariaDB / MySQL, voir appel.
ou remplacer
MariaDB à partir de 10.1.,3
Si l’option OR REPLACE
l’article est utilisé, il agit comme un raccourci pour:
DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;
à l’exception que tous les privilèges de la procédure ne sont pas abandonnées.
sql_mode
MariaDB stocke le paramètre de variable système sql_mode en vigueur au moment de la création d’une routine, et exécute toujours la routine avec ce paramètre en vigueur, quel que soit le mode SQL serveur en vigueur lors de l’appel de la routine.
jeux de caractères et classements
Les paramètres de procédure peuvent être déclarés avec n’importe quel jeu de caractères / classement., Si le jeu de caractères et le classement ne sont pas spécifiquement définis, les valeurs par défaut de la base de données au moment de la création seront utilisées. Si les valeurs par défaut de la base de données changent à un stade ultérieur, le jeu de caractères/classement de la procédure stockée ne sera pas modifié en même temps; la procédure stockée doit être supprimée et recréée pour garantir le même jeu de caractères/classement que la base de données est utilisée.
Mode Oracle
MariaDB à partir de 10.3
à partir de MariaDB 10.3, un sous-ensemble du langage PL/SQL D’Oracle a été pris en charge en plus de la syntaxe MariaDB traditionnelle basée sur SQL / PSM., Voir Mode Oracle de MariaDB 10.3 Pour plus de détails sur les modifications lors de l’exécution du Mode Oracle.
Exemples
L’exemple suivant montre une simple procédure stockée qui utilise un OUT
paramètre. Il utilise la commande DELIMITER pour définir un nouveau délimiteur pour la durée du processus — voir délimiteurs dans le client mysql.,
Jeu de caractères et classement:
créer ou remplacer:
Voir Aussi
- noms des identificateurs
- aperçu de la procédure stockée
- ALTER PROCEDURE
- DROP PROCEDURE
- SHOW CREATE PROCEDURE
- SHOW PROCEDURE STATUS
- stored routine Privileges
- Information Schema ROUTINES Table