You are on page 1of 2

IMPLEMENTACION DE FUNCIONES DE USUARIO EN MYSQL

En Mysql, hemos visto que se tiene muchas funciones ya implementadas y de


diferentes tipos; sin embargo cuando se está realizando la implementación de algún
sistema surge la necesidad de implementar funciones para las diferentes
funcionalidades del sistema como por ejemplo la generación automática de códigos
entre otras cosas.

Para implementar funciones en Mysql, se debe seguir la siguiente sintaxis:

Delimiter//

Create function Nombredefuncion([Argumentos]) as Returns tipodedatoquedevueve

Begin

Instrucciones;

Return valoradevolver;

End//

Delimiter;

Como se puede notar la implementación de funciones es bastante parecido a la


implementación de procedimientos almacenados con diferencias como que en lugar de
usar la palabra reservada procedure se usa function, otra que en los argumentos no es
necesario indicar si son de entrada o de salida; pues todos serán de entrada. Hay que
poner al final de la cabecera de la función la palabra returns seguida del tipo de dato
que devuelve la función y en las instrucciones se debe retornar el valor de la función
usando la palabra returns.

Por Ejemplo:

delimiter//

create function Factorial(n int) returns int

begin

Declare fa int default 1;

Declare num int default 1;

while num<=n do

Set fa=fa*num;

Set num=num+1;

end while;

return fa;
end//

delimiter;

Esta es una función a la cual le pasamos como argumento un número y nos retorna el
factorial de dicho numero.

La usamos de la siguiente manera:

select factorial(5) Factorial; esta instrucción nos retornara el valor de 120;

Para usar esta función desde NetBeans usamos el siguiente código:

public void LlamarFuncion(){

if(txbnc.getText().trim().length()==0){

Vzd.Dlg.showMessageDialog(this, "Ingrese un Número en la caja de texto");

else{

try{

Ctrl.cn.cllst=Ctrl.cn.conec.prepareCall("{?=call Factorial(?)}");

Ctrl.cn.cllst.registerOutParameter(1,Types.INTEGER);

Ctrl.cn.cllst.setInt(2,Integer.parseInt(txbnc.getText()));

Ctrl.cn.cllst.execute();

int n=Ctrl.cn.cllst.getInt(1);

Vzd.Dlg.showMessageDialog(this, "El Factorial Es "+Integer.toString(n));

catch(Exception e){}

Como se puede apreciar la llamada es bastante parecida a cuando llamamos un


procedimiento almacenado con parámetros de salida, con diferencias como las
siguientes: al momento de registrar el parámetro de salida este siempre debe ser el
primero es decir se debe poner 1, y el tipo de dato se debe corresponder con el tipo de
dato que se definió va a retornar la función; así también en la llamada a la función se
le debe anteponer los símbolos “?=” que nos indican que va a retornar un valor el cual
deberá ser capturado en alguna variable.

You might also like