|
MySQL: Añadir y usar procedimiento almacenado stored procedure en MySQL Server
Mostramos en este tutorial cómo añadir un procedimiento (o función) almacenado a un servidor de base de datos MySQL Server y cómo usarlo en consultas SQL. Como ejemplo añadiremos un procedimiento almacenado (stored procedure) que codificará el valor pasado como parámetro de HTML a texto plano, es decir, si el texto pasado como parámetro contiene algún carácter de escape de HTML lo convertirá a su carácter normal.
Requisitos para crear procedimiento almacenado stored procedure en MySQL ServerServidor con MySQL ServerEn primer lugar necesitaremos disponer de acceso a un servidor con MySQL Server, bien sea en Linux o en Windows. A continuación mostramos algunos tutoriales para instalar MySQL Server tanto en Linux como en Windows:
Herramienta software de administración de MySQL ServerPara el acceso al servidor de MySQL Server, para la administración y poder crear un procedimiento almacenado tendremos varias posibilidades:
Añadir procedimiento almacenado stored procedure en servidor MySQL Server con MySQL AdministratorA continuación mostraremos cómo añadir un procedimiento o función a un servidor MySQL Server usando el software MySQL Administrator. Para ello deberemos disponer de este software (es oficial de MySQL y gratuito). Iniciaremos sesión en MySQL Administrator contra el servidor MySQL Server que consideremos, accederemos a la pestaña "Stored procedures" y, para crear un nuevo, pulsaremos en "Create Stored Proc": Introduciremos un nombre para el procedimiento almacenado o función, en nuestro caso, HTML_UnEncode y pulsaremos si va a ser un procedimiento en "Create PROCEDURE", si va a ser una función en "Create FUNCTION". En nuestro caso será una función pues devolverá un valor de cadena. Aunque pulsando cualquiera de los dos botones en el código del procedimiento/función se puede especificar si es un procedimiento (PROCEDURE) o una función (FUNCTION): Si hemos elegido "Create PROCEDURE" nos habrá generado el código:
Si hemos elegido "Create FUNCTION" nos habrá generado el código:
Cambiaremos el código generado automáticamente por el que queramos que realice nuestro procedimiento/función. En nuestro caso añadiremos una función a la que se le pasará como parámetro un valor de texto (string / varchar) y devolverá otro valor de texto, lo que hará el código de la función será convertir los caracteres HTML en caracteres normales. Una vez que hayamos introducido el código para el procedimiento/función pulsaremos en "Execute SQL" que comprobará la sintaxis y ejecutará el SQL de creación del procedimiento/función:
Si todo es correcto el procedimiento/función quedará guardada en el servidor MySQL Server y podrá ser usado por cualquier aplicación que lo requiera: Añadir procedimiento almacenado stored procedure en servidor MySQL Server con MySQL WorkbenchA continuación mostraremos cómo añadir un procedimiento o función a un servidor MySQL Server usando el software MySQL Workbench. Para ello deberemos disponer de este software (es oficial de MySQL y gratuito). Iniciaremos sesión en MySQL Workbench contra el servidor MySQL Server que consideremos, pulsaremos en el botón "Create a new function..." o bien "Create a new stored procedure", según queramos generar un procedimiento (no devolverá nada) o una función (devolverá un valor): El asistente nos habrá generado un pequeño código para crear una función vacía:
Introduciremos el código que queramos para la función o el procedimiento y pulsaremos en "Apply": El asistente para crear un nuevo procedimiento/función de MySQL Workbench nos mostrará el scritp SQL que se ejecutará, pulsaremos en "Apply": Nos mostrará el resultado de la creación del procedimiento/función, si todo es correcto nos mostrará "SQL script was successfully applied to the database", pulsaremos "Finish": En la parte izquierda, en Functions o en Stored Procedures podremos consultar las funciones y procedimientos almacenados de nuestro servidor MySQL Server: Pulsando con el botón derecho del ratón sobre el procedimiento o función que queramos podremos editarlo o eliminarlo:
Cómo usar un procedimiento o función de MySQL Server en cualquier aplicaciónUna vez que hayamos creado el procedimiento o función como hemos indicado anteriormente, ya podremos usarlo en cualquier aplicación que conecte con MySQL Server. Por ejemplo, en nuestro caso, para usar la función HTML_UnEncode en una consulta SQL en el lenguaje de programación Delphi haremos lo siguiente: procedure TformMonitorizacion.llenarGridAlarmas(Posicion: Integer); begin mdMonitorizacion.tcEvento.Close; mdMonitorizacion.tcEvento.SQL.Clear; mdMonitorizacion.tcEvento.SQL.Add('select e.*, a.nombre Agente, a.ultimo_contacto, '); mdMonitorizacion.tcEvento.SQL.Add('g.nombre Grupo, HTML_UnEncode(e.evento) evento_deco'); mdMonitorizacion.tcEvento.SQL.Add('from tevento e'); mdMonitorizacion.tcEvento.SQL.Add('inner join tagente a on e.id_agente = a.id_agente'); mdMonitorizacion.tcEvento.SQL.Add('inner join tgrupo g on e.id_grupo = g.id_grupo'); mdMonitorizacion.tcEvento.SQL.Add('order by e.id_evento desc'); mdMonitorizacion.tcEvento.Open; mdMonitorizacion.tcEvento.RecNo := Posicion; end; Como vemos en el código de ejemplo, la función HTML_UnEncode creada se utiliza como una función más de MySQL Server y se añada en la sentencia SQL, en este caso le pasamos como parámetro el valor de un campo de texto y nos devuelve dicho valor pero reemplazando los caracteres unicode HTML por su correspondencia en caracteres normales.
Stored Procedure de ejemplo para convertir códigos HTML a caracteres normalesA continuación mostramos el contenido del procedimiento almacenado de ejemplo que hemos usado en este tutorial. En este caso hemos creado una función a la que se le pasa como parámetro un valor de texto y devuelve otro valor de texto, reemplazando los caracteres de escape propios de HTML en texto normal: CREATE DEFINER=CURRENT_USER FUNCTION `HTML_UnEncode`(x VARCHAR(255)) RETURNS varchar(255) CHARSET latin1 BEGIN DECLARE TextString VARCHAR(255) ; SET TextString = x ; #quotation mark IF INSTR( x , '"' ) THEN SET TextString = REPLACE(TextString, '"','"') ; END IF ; #apostrophe IF INSTR( x , ''' ) THEN SET TextString = REPLACE(TextString, ''','"') ; END IF ; #ampersand IF INSTR( x , '&' ) THEN SET TextString = REPLACE(TextString, '&','&') ; END IF ; #less-than IF INSTR( x , '<' ) THEN SET TextString = REPLACE(TextString, '<','<') ; END IF ; #greater-than IF INSTR( x , '>' ) THEN SET TextString = REPLACE(TextString, '>','>') ; END IF ; #non-breaking space IF INSTR( x , ' ' ) THEN SET TextString = REPLACE(TextString, ' ',' ') ; END IF ; #inverted exclamation mark IF INSTR( x , '¡' ) THEN SET TextString = REPLACE(TextString, '¡','¡') ; END IF ; #cent IF INSTR( x , '¢' ) THEN SET TextString = REPLACE(TextString, '¢','¢') ; END IF ; #pound IF INSTR( x , '£' ) THEN SET TextString = REPLACE(TextString, '£','£') ; END IF ; #currency IF INSTR( x , '¤' ) THEN SET TextString = REPLACE(TextString, '¤','¤') ; END IF ; #yen IF INSTR( x , '¥' ) THEN SET TextString = REPLACE(TextString, '¥','¥') ; END IF ; #broken vertical bar IF INSTR( x , '¦' ) THEN SET TextString = REPLACE(TextString, '¦','¦') ; END IF ; #section IF INSTR( x , '§' ) THEN SET TextString = REPLACE(TextString, '§','§') ; END IF ; #spacing diaeresis IF INSTR( x , '¨' ) THEN SET TextString = REPLACE(TextString, '¨','¨') ; END IF ; #copyright IF INSTR( x , '©' ) THEN SET TextString = REPLACE(TextString, '©','©') ; END IF ; #feminine ordinal indicator IF INSTR( x , 'ª' ) THEN SET TextString = REPLACE(TextString, 'ª','ª') ; END IF ; #angle quotation mark (left) IF INSTR( x , '«' ) THEN SET TextString = REPLACE(TextString, '«','«') ; END IF ; #negation IF INSTR( x , '¬' ) THEN SET TextString = REPLACE(TextString, '¬','¬') ; END IF ; #soft hyphen IF INSTR( x , '' ) THEN SET TextString = REPLACE(TextString, '','') ; END IF ; #registered trademark IF INSTR( x , '®' ) THEN SET TextString = REPLACE(TextString, '®','®') ; END IF ; #spacing macron IF INSTR( x , '¯' ) THEN SET TextString = REPLACE(TextString, '¯','¯') ; END IF ; #degree IF INSTR( x , '°' ) THEN SET TextString = REPLACE(TextString, '°','°') ; END IF ; #plus-or-minus IF INSTR( x , '±' ) THEN SET TextString = REPLACE(TextString, '±','±') ; END IF ; #superscript 2 IF INSTR( x , '²' ) THEN SET TextString = REPLACE(TextString, '²','²') ; END IF ; #superscript 3 IF INSTR( x , '³' ) THEN SET TextString = REPLACE(TextString, '³','³') ; END IF ; #spacing acute IF INSTR( x , '´' ) THEN SET TextString = REPLACE(TextString, '´','´') ; END IF ; #micro IF INSTR( x , 'µ' ) THEN SET TextString = REPLACE(TextString, 'µ','µ') ; END IF ; #paragraph IF INSTR( x , '¶' ) THEN SET TextString = REPLACE(TextString, '¶','¶') ; END IF ; #middle dot IF INSTR( x , '·' ) THEN SET TextString = REPLACE(TextString, '·','·') ; END IF ; #spacing cedilla IF INSTR( x , '¸' ) THEN SET TextString = REPLACE(TextString, '¸','¸') ; END IF ; #superscript 1 IF INSTR( x , '¹' ) THEN SET TextString = REPLACE(TextString, '¹','¹') ; END IF ; #masculine ordinal indicator IF INSTR( x , 'º' ) THEN SET TextString = REPLACE(TextString, 'º','º') ; END IF ; #angle quotation mark (right) IF INSTR( x , '»' ) THEN SET TextString = REPLACE(TextString, '»','»') ; END IF ; #fraction 1/4 IF INSTR( x , '¼' ) THEN SET TextString = REPLACE(TextString, '¼','¼') ; END IF ; #fraction 1/2 IF INSTR( x , '½' ) THEN SET TextString = REPLACE(TextString, '½','½') ; END IF ; #fraction 3/4 IF INSTR( x , '¾' ) THEN SET TextString = REPLACE(TextString, '¾','¾') ; END IF ; #inverted question mark IF INSTR( x , '¿' ) THEN SET TextString = REPLACE(TextString, '¿','¿') ; END IF ; #multiplication IF INSTR( x , '×' ) THEN SET TextString = REPLACE(TextString, '×','×') ; END IF ; #division IF INSTR( x , '÷' ) THEN SET TextString = REPLACE(TextString, '÷','÷') ; END IF ; #capital a, grave accent IF INSTR( x , 'À' ) THEN SET TextString = REPLACE(TextString, 'À','À') ; END IF ; #capital a, acute accent IF INSTR( x , 'Á' ) THEN SET TextString = REPLACE(TextString, 'Á','Á') ; END IF ; #capital a, circumflex accent IF INSTR( x , 'Â' ) THEN SET TextString = REPLACE(TextString, 'Â','Â') ; END IF ; #capital a, tilde IF INSTR( x , 'Ã' ) THEN SET TextString = REPLACE(TextString, 'Ã','Ã') ; END IF ; #capital a, umlaut mark IF INSTR( x , 'Ä' ) THEN SET TextString = REPLACE(TextString, 'Ä','Ä') ; END IF ; #capital a, ring IF INSTR( x , 'Å' ) THEN SET TextString = REPLACE(TextString, 'Å','Å') ; END IF ; #capital ae IF INSTR( x , 'Æ' ) THEN SET TextString = REPLACE(TextString, 'Æ','Æ') ; END IF ; #capital c, cedilla IF INSTR( x , 'Ç' ) THEN SET TextString = REPLACE(TextString, 'Ç','Ç') ; END IF ; #capital e, grave accent IF INSTR( x , 'È' ) THEN SET TextString = REPLACE(TextString, 'È','È') ; END IF ; #capital e, acute accent IF INSTR( x , 'É' ) THEN SET TextString = REPLACE(TextString, 'É','É') ; END IF ; #capital e, circumflex accent IF INSTR( x , 'Ê' ) THEN SET TextString = REPLACE(TextString, 'Ê','Ê') ; END IF ; #capital e, umlaut mark IF INSTR( x , 'Ë' ) THEN SET TextString = REPLACE(TextString, 'Ë','Ë') ; END IF ; #capital i, grave accent IF INSTR( x , 'Ì' ) THEN SET TextString = REPLACE(TextString, 'Ì','Ì') ; END IF ; #capital i, acute accent IF INSTR( x , 'Í' ) THEN SET TextString = REPLACE(TextString, 'Í','Í') ; END IF ; #capital i, circumflex accent IF INSTR( x , 'Î' ) THEN SET TextString = REPLACE(TextString, 'Î','Î') ; END IF ; #capital i, umlaut mark IF INSTR( x , 'Ï' ) THEN SET TextString = REPLACE(TextString, 'Ï','Ï') ; END IF ; #capital eth, Icelandic IF INSTR( x , 'Ð' ) THEN SET TextString = REPLACE(TextString, 'Ð','Ð') ; END IF ; #capital n, tilde IF INSTR( x , 'Ñ' ) THEN SET TextString = REPLACE(TextString, 'Ñ','Ñ') ; END IF ; #capital o, grave accent IF INSTR( x , 'Ò' ) THEN SET TextString = REPLACE(TextString, 'Ò','Ò') ; END IF ; #capital o, acute accent IF INSTR( x , 'Ó' ) THEN SET TextString = REPLACE(TextString, 'Ó','Ó') ; END IF ; #capital o, circumflex accent IF INSTR( x , 'Ô' ) THEN SET TextString = REPLACE(TextString, 'Ô','Ô') ; END IF ; #capital o, tilde IF INSTR( x , 'Õ' ) THEN SET TextString = REPLACE(TextString, 'Õ','Õ') ; END IF ; #capital o, umlaut mark IF INSTR( x , 'Ö' ) THEN SET TextString = REPLACE(TextString, 'Ö','Ö') ; END IF ; #capital o, slash IF INSTR( x , 'Ø' ) THEN SET TextString = REPLACE(TextString, 'Ø','Ø') ; END IF ; #capital u, grave accent IF INSTR( x , 'Ù' ) THEN SET TextString = REPLACE(TextString, 'Ù','Ù') ; END IF ; #capital u, acute accent IF INSTR( x , 'Ú' ) THEN SET TextString = REPLACE(TextString, 'Ú','Ú') ; END IF ; #capital u, circumflex accent IF INSTR( x , 'Û' ) THEN SET TextString = REPLACE(TextString, 'Û','Û') ; END IF ; #capital u, umlaut mark IF INSTR( x , 'Ü' ) THEN SET TextString = REPLACE(TextString, 'Ü','Ü') ; END IF ; #capital y, acute accent IF INSTR( x , 'Ý' ) THEN SET TextString = REPLACE(TextString, 'Ý','Ý') ; END IF ; #capital THORN, Icelandic IF INSTR( x , 'Þ' ) THEN SET TextString = REPLACE(TextString, 'Þ','Þ') ; END IF ; #small sharp s, German IF INSTR( x , 'ß' ) THEN SET TextString = REPLACE(TextString, 'ß','ß') ; END IF ; #small a, grave accent IF INSTR( x , 'à' ) THEN SET TextString = REPLACE(TextString, 'à','à') ; END IF ; #small a, acute accent IF INSTR( x , 'á' ) THEN SET TextString = REPLACE(TextString, 'á','á') ; END IF ; #small a, circumflex accent IF INSTR( x , 'â' ) THEN SET TextString = REPLACE(TextString, 'â','â') ; END IF ; #small a, tilde IF INSTR( x , 'ã' ) THEN SET TextString = REPLACE(TextString, 'ã','ã') ; END IF ; #small a, umlaut mark IF INSTR( x , 'ä' ) THEN SET TextString = REPLACE(TextString, 'ä','ä') ; END IF ; #small a, ring IF INSTR( x , 'å' ) THEN SET TextString = REPLACE(TextString, 'å','å') ; END IF ; #small ae IF INSTR( x , 'æ' ) THEN SET TextString = REPLACE(TextString, 'æ','æ') ; END IF ; #small c, cedilla IF INSTR( x , 'ç' ) THEN SET TextString = REPLACE(TextString, 'ç','ç') ; END IF ; #small e, grave accent IF INSTR( x , 'è' ) THEN SET TextString = REPLACE(TextString, 'è','è') ; END IF ; #small e, acute accent IF INSTR( x , 'é' ) THEN SET TextString = REPLACE(TextString, 'é','é') ; END IF ; #small e, circumflex accent IF INSTR( x , 'ê' ) THEN SET TextString = REPLACE(TextString, 'ê','ê') ; END IF ; #small e, umlaut mark IF INSTR( x , 'ë' ) THEN SET TextString = REPLACE(TextString, 'ë','ë') ; END IF ; #small i, grave accent IF INSTR( x , 'ì' ) THEN SET TextString = REPLACE(TextString, 'ì','ì') ; END IF ; #small i, acute accent IF INSTR( x , 'í' ) THEN SET TextString = REPLACE(TextString, 'í','í') ; END IF ; #small i, circumflex accent IF INSTR( x , 'î' ) THEN SET TextString = REPLACE(TextString, 'î','î') ; END IF ; #small i, umlaut mark IF INSTR( x , 'ï' ) THEN SET TextString = REPLACE(TextString, 'ï','ï') ; END IF ; #small eth, Icelandic IF INSTR( x , 'ð' ) THEN SET TextString = REPLACE(TextString, 'ð','ð') ; END IF ; #small n, tilde IF INSTR( x , 'ñ' ) THEN SET TextString = REPLACE(TextString, 'ñ','ñ') ; END IF ; #small o, grave accent IF INSTR( x , 'ò' ) THEN SET TextString = REPLACE(TextString, 'ò','ò') ; END IF ; #small o, acute accent IF INSTR( x , 'ó' ) THEN SET TextString = REPLACE(TextString, 'ó','ó') ; END IF ; #small o, circumflex accent IF INSTR( x , 'ô' ) THEN SET TextString = REPLACE(TextString, 'ô','ô') ; END IF ; #small o, tilde IF INSTR( x , 'õ' ) THEN SET TextString = REPLACE(TextString, 'õ','õ') ; END IF ; #small o, umlaut mark IF INSTR( x , 'ö' ) THEN SET TextString = REPLACE(TextString, 'ö','ö') ; END IF ; #small o, slash IF INSTR( x , 'ø' ) THEN SET TextString = REPLACE(TextString, 'ø','ø') ; END IF ; #small u, grave accent IF INSTR( x , 'ù' ) THEN SET TextString = REPLACE(TextString, 'ù','ù') ; END IF ; #small u, acute accent IF INSTR( x , 'ú' ) THEN SET TextString = REPLACE(TextString, 'ú','ú') ; END IF ; #small u, circumflex accent IF INSTR( x , 'û' ) THEN SET TextString = REPLACE(TextString, 'û','û') ; END IF ; #small u, umlaut mark IF INSTR( x , 'ü' ) THEN SET TextString = REPLACE(TextString, 'ü','ü') ; END IF ; #small y, acute accent IF INSTR( x , 'ý' ) THEN SET TextString = REPLACE(TextString, 'ý','ý') ; END IF ; #small thorn, Icelandic IF INSTR( x , 'þ' ) THEN SET TextString = REPLACE(TextString, 'þ','þ') ; END IF ; #small y, umlaut mark IF INSTR( x , 'ÿ' ) THEN SET TextString = REPLACE(TextString, 'ÿ','ÿ') ; END IF ; #espacio IF INSTR( x , ' ' ) THEN SET TextString = REPLACE(TextString, ' ',' ') ; END IF ; #parentesis ( IF INSTR( x , '(' ) THEN SET TextString = REPLACE(TextString, '(','(') ; END IF ; #parentesis ) IF INSTR( x , ')' ) THEN SET TextString = REPLACE(TextString, ')',')') ; END IF ; #comilla simple ' IF INSTR( x , ''' ) THEN SET TextString = REPLACE(TextString, ''','\'') ; END IF ; RETURN TextString ; END
Artículos relacionados
CréditosArtículo realizado íntegramente por Alonsojpd, miembro fundador del Proyecto AjpdSoft. Anuncios
Enviado el Viernes, 29 mayo a las 14:17:49 por ajpdsoft
|
|