la Sintaxis de

Descripción

Crea un procedimiento almacenado. De forma predeterminada, una rutina está asociada con la base de datos predeterminada. Para asociar la ruta explícitamente con una base de datos dada, especifique el nombre como db_name.sp_namewhen lo crea.

cuando se invoca la rutina, se realiza un uso implícito db_name (andundone cuando la rutina termina). El hace que la rutina tenga la base de datos predeterminada dada mientras se ejecuta. Las declaraciones de uso con rutinas almacenadas no están permitidas.,

cuando se ha creado un procedimiento almacenado, lo invoca utilizando la instrucción CALL(consulte CALL).

para ejecutar la instrucción CREATE PROCEDURE, es necesario tener el privilegio CREATE ROUTINE. Por defecto, Mariadbautomáticamente otorga los privilegios ALTER ROUTINE y EXECUTE al creador de outine. Consulte también privilegios de rutina almacenados.,

las cláusulas de seguridad DEFINER y SQL especifican el contexto de seguridad que se debe usar al comprobar los privilegios de acceso en tiempo de ejecución de rutina, como se describe más adelante. Requiere el súper privilegio, o, desde MariaDB 10.5.2, el establecer privilegio de usuario.

si el nombre de la rutina es el mismo que el nombre de una función SQL incorporada, debe usar un espacio entre el nombre y el siguiente parenthesis al definir la rutina, o se produce un error de sintaxis. Esto también es cierto cuando invoca la rutina más tarde., Por esta razón, sugerimos que es mejor evitar reutilizar los nombres de Funciones SQL existentes para sus propias rutinas almacenadas.

el modo SQL IGNORE_SPACE se aplica a funciones integradas, no a storedroutines. Siempre se permite tener espacios después de un nombre de rutina, independientemente de si IGNORE_SPACE está habilitado.

la lista de parámetros encerrada entre paréntesis debe estar siempre presente.Si no hay parámetros, se debe usar una lista vacía de parámetros de (). Los nombres de los parámetros no distinguen entre mayúsculas y minúsculas.,

cada parámetro puede ser declarado para usar cualquier tipo de datos válido, excepto que el atributo COLLATE no puede ser usado.

para usar identificadores válidos como nombres de procedimiento, consulte nombres de identificador.

IN / OUT / INOUT

cada parámetro es un parámetro IN por defecto. Para especificar otro parámetro fora, utilice la palabra clave OUTo INOUT antes del nombre del parámetro.

Un parámetro IN pasa un valor a un procedimiento., El procedimiento puede modificar el valor, pero la modificación no es visible para el llamador cuando el procedimiento regresa. Un parámetro OUT pasa un valor de theprocedure de nuevo a la persona que llama. Su valor inicial es NULL dentro delprocedure, y su valor es visible para el llamador cuando el procedurereturns. Un parámetro INOUT es inicializado por el llamante, puede ser modificado por el procedimiento, y cualquier cambio realizado por el procedimiento es visible para el llamante cuando el procedimiento regresa.,

para cada parámetro OUT o INOUT, pase una variable definida por el usuario en la instrucciónCALL que invoque el procedimiento para que pueda obtener su valor cuando regrese el procedimiento. Si está llamando al procedimientodesde otro procedimiento o función almacenados, también puede pasar el parámetro aroutine o la variable de rutina local como un parámetro IN o INOUT.

DETERMINISTIC/NOT DETERMINISTIC

DETERMINISTICandNOT DETERMINISTIC apply only to functions., Especificar DETERMINISTC o NON-DETERMINISTIC en procedimientos no tiene efecto. El valor predeterminado es NOT DETERMINISTIC. Las funciones son DETERMINISTIC cuando siempre devuelven el mismo valor para la misma entrada. Por ejemplo, una función truncar o subcadena. Cualquier función que involucre datos, por lo tanto, es siempre NOT DETERMINISTIC.,

contiene SQL/no SQL/lee datos SQL/modifica datos SQL

CONTAINS SQL, NO SQL, READS SQL DATA, y MODIFIES SQL DATA son cláusulas informativas que le dicen al servidor lo que hace la función. MariaDB no comprueba de ninguna manera si la cláusula especificada es correcta. Si no se especifica ninguna de estas cláusulas, CONTAINS SQL se utiliza de forma predeterminada.

MODIFIES SQL DATA significa que la función contiene instrucciones que pueden modificar los datos almacenados en bases de datos., Esto sucede si la función contiene instrucciones como DELETE, UPDATE, INSERT, REPLACE o DDL.

READS SQL DATA significa que la función lee datos almacenados en bases de datos, pero no modifica ningún dato. Esto sucede si se utilizan instrucciones SELECT, pero no se ejecutan operaciones de escritura.

CONTAINS SQL significa que la función contiene al menos una instrucción SQL, pero no lee ni escribe ningún dato almacenado en una base de datos. Los ejemplos incluyen SET o DO.,

NO SQL no significa nada, porque MariaDB actualmente no admite ningún otro lenguaje que no sea SQL.

el routine_body consiste en una instrucción de procedimiento SQL válida. Esto puede ser una instrucción simple como SELECT o INSERT, o puede ser una instrucción compuesta escrita usando BEGIN y END. Compound statementscan contiene declaraciones, bucles y otras estructuras de control. Consulte Instrucciones programáticas y compuestas para obtener detalles de sintaxis.

MariaDB permite que las rutinas contengan instrucciones DDL, como CREATE andDROP., MariaDB también permite que los procedimientos almacenados (pero no las funciones almacenadas)contengan instrucciones de transacción SQL como COMMIT.

para obtener información adicional acerca de las instrucciones que no están permitidas como rutinas en instancias, consulte Limitaciones de rutina almacenadas.

invocar procedimientos almacenados desde programas

para obtener información sobre cómo invocar procedimientos almacenados desde programas escritos en un lenguaje que tenga una interfaz MariaDB / MySQL, consulte llamar.

o reemplazar

MariaDB a partir de 10.1.,3

si se usa la cláusula opcional OR REPLACE, actúa como un atajo para:

DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;

con la excepción de que no se eliminen los privilegios existentes para el procedimiento.

Sql_mode

MariaDB almacena la configuración de la variable de sistema sql_mode que está en vigor en el momento en que se crea una rutina, y siempre ejecuta la rutina con esta configuración en vigor, independientemente del modo SQL del servidor en vigor cuando se invoca la rutina.

conjuntos de caracteres y colaciones

Los parámetros del procedimiento se pueden declarar con cualquier conjunto de caracteres/colación., Si el conjunto de caracteres y la intercalación no se establecen específicamente, se utilizarán los valores predeterminados de la base de datos en el momento de la creación. Si los valores predeterminados de la base de datos cambian en una etapa posterior, el conjunto de caracteres/intercalación del procedimiento almacenado no se cambiará al mismo tiempo; el procedimiento almacenado debe eliminarse y recrearse para garantizar que se use el mismo conjunto de caracteres/intercalación que la base de datos.

Oracle Mode

MariaDB a partir de 10.3

de MariaDB 10.3, se ha admitido un subconjunto del lenguaje PL/SQL de Oracle además de la sintaxis tradicional de MariaDB basada en SQL / PSM., Consulte el modo Oracle de MariaDB 10.3 para obtener más información sobre los cambios al ejecutar el modo Oracle.

Ejemplos

El siguiente ejemplo muestra un procedimiento almacenado simple que utiliza un OUTparámetro. Utiliza el comando DELIMITER para establecer un nuevo delimitador para la duración del proceso — consulte delimitadores en el cliente mysql.,

conjunto de caracteres y intercalación:

crear o reemplazar:

ver también

  • nombres de identificador
  • Descripción general del procedimiento almacenado
  • ALTER PROCEDURE
  • DROP PROCEDURE
  • SHOW CREATE PROCEDURE
  • SHOW PROCEDURE STATUS
  • Stored Routine Privileges
  • Information schema ROUTINES Table

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *