Como creo mi propia UDF?

Iniciado por Skeletron, 21 Marzo 2010, 02:02 AM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

Hola gente.
Recien leyendo un libro de MySQL (La Biblia de MySQL), leí que se pueden crear librerias para que MySQL las utilice luego(con las funciones que traen dentro las librerias)

Viendo lo que decía el libro, esas UDF pueden ser simples o "compuestas".. Diagamos que, estan las que se aplican sobre un conjunto de datos y otras que aplica sobre 1 solo dato.

Me interesaría ir probando sobre la mas sencilla, supongo que será la STANDART (aplica a 1 solo dato)

Tambien leí en el libro que en sí, lo que hay que crear, es una DLL.... Y no es necesario que sea C++ o C el lenguaje a generarlas, sino que tiene que ser cualquier lenguaje que pueda generar una DLL...

Eso es verdad? Puedo hacer una DLL para MySQL con mi VB.NET (desde él si se pueden hacer dll)

Luego que me respondan esto, seguiré con algunas cuantas otras preguntas

Skeletron

Les comento algo mas:
Acabo de entrar al Visual Studio, y creé por primera vez una DLL que al ejecutar su metodo, me devolvía el valor: Broda Noel
Probé ejecutarlo con otra aplicacion hecha en vb.net y devolvió el resultado PERFECTAMENTE..

Así que supongo que SI puedo hacer mi propia UDF con VB.NET.... :)

Alguien me da una mano?
Supongamos que quiero hacer mi propio UDT que haciendo:
select noel(numero);
siendo "numero" un NUMERO escrito con numeros (que quilomboo)
Por ejemplo:
Select noel(9);
y que el resultado devuelto sea:
NUEVE

Yo hago la logica en VB.net, pero, para poder pasar los datos por parametro, simplemente pongo los datos que entran por parametro en el metodo "noel()" de la dll: funcionnoel.dll?

Y que el return devuelva lo que tiene que devolver...

Y luego agregarla a MySQL? como? Donde tengo que colocar (en que directorio del pc) a la dll nueva? y como agrego la funcion a mi MySQL?



:)

^Tifa^

Las UDF se hacen en puro lenguaje C generico nino  :rolleyes:

Se integran al motor mediante otra linea de comandos dentro del motor para validar dichas funciones como globales  ;)

Pero antes de aventurar con UDF deberias conocer y manejar el lenguaje C para hacer una de estas. No te compliques sobremanera, se puede hacer cosas similares con procedimientos almacenados o funciones, que no seran globales bueno.. es su unico limite, pero no es algo que yo consideraria muy de uso sino fuera a crear una aplicacion que maneje MySQL para algo y para relacionar o hacer funcional dicha aplicacion con MySQL crearia par de UDF

Skeletron

Bien....
Veré que puedo hacer.

Pero te juro que mañana o pasado mañana, verás un post mio aqui mismo con los links de descarga del proyecto en vb.net, la dll, y mi libreria en vb.net funcionando :)

^Tifa^

VB.NET no es C  es Visual Basic No????

Las UDF se desarrollan en puro C generico, deberias primeramente ver tutos de C mejor y luego ejemplos online de codigo fuente de UDF...  :P

Eternal Idol

#5
¿User-defined function?

http://en.wikipedia.org/wiki/User_Defined_Function

"Some database management systems allow the creation of user defined functions in languages other than SQL. Microsoft SQL Server, for example, allows the user to use .NET languages including C# for this purpose. DB2 and Oracle support user-defined functions written in C or Java programming languages."

http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html
http://dev.mysql.com/doc/refman/5.1/en/create-function-udf.html

"For the UDF mechanism to work, functions must be written in C or C++ (or another language that can use C calling conventions), your operating system must support dynamic loading and you must have compiled mysqld dynamically (not statically)."
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Skeletron

Pero.. En el libro de La Biblia de MySQL, leo que son dll las que hay que crear, y "importarlas" desde MYSQL.

Supongo que el resultado de una DLL, es lo mismo si la creo con C++, C o vb.net.. o me equivoco?

^Tifa^

CitarSupongo que el resultado de una DLL, es lo mismo si la creo con C++, C o vb.net.. o me equivoco?

En ese punto yo no te puedo guiar  :xD  tendrias que preguntarle a alguien con el nivel correspondiente y suficiente como Eternal Idol.

Porque manejo en mayor extension MySQL bajo plataformas Unix/Linux y hasta lo que he visto y leido las UDFs se crean en C pero bajo Windows como desarrollo no se como vaya el asunto, pero aparentemente continua siendo bajo C/C++ segun esta web:

http://rpbouman.blogspot.com/2007/09/creating-mysql-udfs-with-microsoft.html

Eternal Idol

Para MySQL no es lo mismo si la DLL no exporta las funciones y usa la convencion de llamada de C (cosa que no se si podes hacer en .NET, si lo podes hacer en assembly por ejemplo).

Aca tenes respuesta a algunas de las preguntas que hiciste hasta ahora:
http://www.codeguru.com/cpp/data/mfc_database/misc/article.php/c12615
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Skeletron

Perfecto.
Muchas gracias a los 2.

No tengo tampoco porque renegar con UDF... Simplemente estaba leyendo un libro y haciendo el 100% de la parte practica del libro, y no quería dejar de probar los ejemplos de UDF.. Pero bue...

Tendré que aprender a programar C++