Este documento presenta una conferencia sobre el diseño de funciones definidas por el usuario (UDF) eficientes en SQL Server 2000. La conferencia incluye presentaciones sobre Fernando G. Guerrero y Miguel Egea, una introducción a las UDF, ventajas y limitaciones de las UDF, y convertir vistas y procedimientos almacenados en UDF. La agenda también incluye temas como UDF escalares, UDF de tabla en línea y UDF multicomando.
Proyecto desarrollado en Visual FoxPro + MySQL. Como interfaz grafica se utilizo VFP 9 y como base de dtos MySQL. De estar forma se creo una aplicacion Cliente - Servidor.
Proyecto desarrollado en Visual FoxPro + MySQL. Como interfaz grafica se utilizo VFP 9 y como base de dtos MySQL. De estar forma se creo una aplicacion Cliente - Servidor.
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
An immersive workshop at General Assembly, SF. I typically teach this workshop at General Assembly, San Francisco. To see a list of my upcoming classes, visit https://generalassemb.ly/instructors/seth-familian/4813
I also teach this workshop as a private lunch-and-learn or half-day immersive session for corporate clients. To learn more about pricing and availability, please contact me at http://familian1.com
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusXavier Espinoza
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus generando contra RPG y Java. Contiene recomendaciones de como escribir las consultas en Genexus en un entorno específico en ETAPA EP
New gTLDs between two rounds: trade mark challenges
▶ gTLDs: first round of applications’ results: who registered and why?
▶ Transparency: how did TM owners find their way through new gTLD application system?
▶ More gTLDs, more disputes? Will cybersquatting increase?
▶ trade mark protection mechanisms: all about uniform rapid suspension system, pre-emptive registration period and trade mark clearinghouse
Si bien los hospitales conjuntan a profesionales de salud que atienden a la población, existe un equipo de organización, coordinación y administración que permite que los cuidados clínicos se otorguen de manera constante y sin obstáculos.
Mario García Baltazar, director del área de Tecnología (TI) del Hospital Victoria La Salle, relató la manera en la que el departamento que él lidera, apoyado en Cirrus y Estela, brinda servicio a los clientes internos de la institución e impulsa una experiencia positiva en el paciente.
Conoce el Hospital Victoria La Salle
Ubicado en Ciudad Victoria, Tamaulipas, México
Inició operaciones en el 2016
Forma parte del Consorcio Mexicanos de Hospitales
Hospital de segundo nivel
21 habitaciones para estancia
31 camas censables
13 camillas
2 quirófanos
+174 integrantes en su plantilla
+120 equipos médicos de alta tecnología
+900 pacientes atendidos
Servicios de +20 especialidades
Módulos utilizados de Cirrus
HIS
EHR
ERP
Estela - Business Intelligence
Los desafíos de calidad de software que nos trae la IA y los LLMsFederico Toledo
En esta charla, nos sumergiremos en los desafíos emergentes que la inteligencia artificial (IA) y los Large Language Models (LLMs) traen al mundo de la calidad del software y el testing. Exploraremos cómo la integración, uso o diseño de modelos de IA plantean nuevos retos, incluyendo la calidad de datos y detección de sesgos, sumando la complejidad de probar algo no determinístico. Revisaremos algunas propuestas que se están llevando adelante para ajustar nuestras tareas de testing al desarrollo de este tipo de sistemas, incluyendo enfoques de pruebas automatizadas y observabilidad.
Escaneo y eliminación de malware en el equiponicromante2000
El malware tiene muchas caras, y es que los programas maliciosos se reproducen en los ordenadores de diferentes formas. Ya se trate de virus, de programas espía o de troyanos, la presencia de software malicioso en los sistemas informáticos siempre debería evitarse. Aquí te muestro como trabaja un anti malware a la hora de analizar tu equipo
2. Conferencia Visual FoxPro España 2003 PortalFox.com
Información Breve sobre Fernando
(2 milisegundos)
MCSD, MCSE+Internet (W2K), MCDBA, MCT, SQL
Server MVP
Articulista de SQL-Server Magazine y SQL-Server
Profesional.
Mi web-sites http://www.callsql.com y
http://www.solidqualitylearning.com
Mi libro. Escrito junto a Carlos E. Rojas
Principal Mentor en Solid Quality Learning
3. Conferencia Visual FoxPro España 2003 PortalFox.com
Información Breve sobre Miguel
(1 milisegundo)
SQL Server MVP
Articulista en MSDN
Webmaster de http://www.portalsql.com
El libro que más me gusta
4. Conferencia Visual FoxPro España 2003 PortalFox.com
¿Que debe esperar de las UDF’s?
Las UDFs son flexibles, eficientes, versátiles,
pero …no están demasiado bien documentadas.
Debe conocer cuando y como usarlas.
La siguiente versión de Sql-Server deberá
extender enormemente la funcionalidad de las
UDF’s, así que debe empezar con ellas a.s.a.p.
Obtendrá beneficios conociendo que pasa en los
escenarios que las use (espera a ver algunas
trazas de Profiler)
Quisiéramos enseñaros un montón de ejemplos y
un montón más On-Line
5. Conferencia Visual FoxPro España 2003 PortalFox.com
¿Que debería aprender en esta sesión?
Por qué las UDFs son una funcionalidad
importante en la programación
Como crear UDFs:
Definidas por el usuario
UDFs del sistema
Como ejecuta SQL-Server las UDF’s
Como convertir vistas y procedimientos
almacenados en UDF’s
Como usar algunas funciones indocumentadas
del sistema
Como querer a las UDF’s un poquito más cada
dia
6. Conferencia Visual FoxPro España 2003 PortalFox.com
Agenda
Introducción a las funciones definidas por el
usuario (UDF)
UDF Ventajas y limitaciones
Comentarios sobre funciones no deterministas
Añadiendo funcionalidad A T-SQL con UDF
escalares
Redefiniendo vistas como UDF de tabla en línea.
Convirtiendo procedimientos almacenados en
Funciones de valores de tabla de múltiples
instrucciones
UDFs en las definiciones de integridad
Referencial.
7. Conferencia Visual FoxPro España 2003 PortalFox.com
Introducción a las UDF’s
Tipos:
Funciones Escalares
De tabla de valores en línea
De tabla de valores de múltiples instrucciones.
Proporcionadas por el sistema
Oficialmente soportadas.
Algunas funciones más (útiles)
Usando plantillas del Analizador de Consultas
para crear UDFS
Usando el Analizador para detectar el uso de
funciones
8. Conferencia Visual FoxPro España 2003 PortalFox.com
Ventajas de las UDF’s
Pueden generalmente ser usadas en cualquier
lugar de una consulta
Extienden la funcionalidad de T-SQL.
Son compiladas, como los procedimientos
almacenados, ¡Ejecución más rápida!
La creación y el uso son similares a los
procedimientos almacenados.
9. Conferencia Visual FoxPro España 2003 PortalFox.com
Limitaciones de las UDF’s
Algunas funciones no deterministas no están
permitidas dentro de UDF’s.
Devuelven un solo valor.
No pueden modificar datos ….. directamente.
Comparten los 32 niveles de recursión con
triggers y procedimientos almacenados.
12. Conferencia Visual FoxPro España 2003 PortalFox.com
Funciones no deterministas, que no
pueden usarse dentro de UDF’s (I)
Funciones no deterministas, no permitidas en UDFs:
CURRENT_TIMESTAMP, GETDATE,
GetUTCDate, @@DBTS
IDENTITY, NEWID
TEXTPTR
@@MAX_CONNECTIONS
Ninguna de las funciones estadísticas del sistema
están permitidas
Todas las otras funciones del sistema están
permitidas menos… veamos la siguiente diapositiva.
13. Conferencia Visual FoxPro España 2003 PortalFox.com
Funciones no deterministas, que no
pueden usarse dentro de UDF’s (II)
CAST es determinista excepto convirtiendo
fechas.
Convert es determinista, excepto convirtiendo
fechas sin un estilo de conversión implícito.
CHECKSUM es determinista, excepto
CHECKSUM(*)
IsDate es no determinista, en su lugar use
Convert con un estilo como 0,100,9 o 109.
RAND es no determinista excepto que se
especifique un valor de semilla.
14. Conferencia Visual FoxPro España 2003 PortalFox.com
¿Cuándo es una UDF Determinista?
Todas las funciones, propias o definidas por el
usuario referenciadas son deterministas.
La función se ha definido con WITH
SCHEMABINDING
No ejecuta procedimientos almacenados
extendidos.
No hay que olvidar que según BOL puedes usar
funciones nativas SQL dentro de una UDF
15. Conferencia Visual FoxPro España 2003 PortalFox.com
Extender la funcionalidad T-SQL con
UDF’s
Las funciones escalares son exactamente
funciones.
Las puedes usar en cualquier lugar que SQL
espere una expresión
Las UDF’s son funciones multi-comando similares
a los procedimientos almacenados.
Las UDF’s aceptan parámetros de entrada (Hasta
2100 pese a que los BOL dicen 1024).
Las UDF’s no usan parámetros tipo OUPUT.
Las UDF’s devuelven cualquier valor (excepto
BLOB’s)
16. Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplo de función escalar FV
(Valor Futuro)
CREATE FUNCTION dbo.fn_FV
(@rate float, @nper int, @pmt money,
@pv money = 0.0, @type bit = 0)
RETURNS money
AS BEGIN
DECLARE @fv money
IF @rate = 0 SET @fv = @pv + @pmt * @nper
ELSE SET @fv = @pv * POWER(1 + @rate,
@nper) + @pmt *
(((POWER(1 + @rate, @nper + @type) -
1) / @rate) – @type)
RETURN (-@fv)
END
17. Conferencia Visual FoxPro España 2003 PortalFox.com
UDF’s escalares indocumentadas
¿Dónde encontrarlas?
$SQLInstallDir$InstallReplsys.sql
$SQLInstallDir$InstallProcsyst.sql
Algunos ejemplos de uso
fn_chariswhitespace
fn_replquotename
fn_replmakestringliteral
fn_mssharedversion
Hay muchas definidas para el uso interno de la
replicación. No he encontrado un uso práctico de
ellas, pero su estructura es muy interesante.
18. Conferencia Visual FoxPro España 2003 PortalFox.com
Limitaciones y algunos trucos para
UDF’s escalares
Como obtener números aleatorios de una UDF.
Como usar fechas en una UDF.
Recursividad en una UDF escalar.
Como modificar datos dentro de una UDF.
VEAMOS TODO ESTO MÁS EN DETALLE
19. Conferencia Visual FoxPro España 2003 PortalFox.com
Como obtener valores aleatorios en
una UDF
RAND no está permitido en una UDF.
Podemos tomar información de hora de
sysprocesses (last_batch).
Solo es significativo para conexiones de usuarios.
Podemos usar cuando se lanzan procesos del
sistema (como el LAZY WRITER).
No es excesivamente buen enfoque.
Se puede completar todo esto con funciones
trigonométricas como PI
Se puede usar OPENQUERY para hacer una
‘auto’ llamada y estará todo permitido….
INCLUSO RAND
20. Conferencia Visual FoxPro España 2003 PortalFox.com
Como usar Fechas en UDF’s
Las funciones relacionadas con fechas no están
permitidas en las UDF’s.
Podemos usar la información de la hora desde
sysprocesses como antes, pero no es una
información segura.
También podemos usar OPENQUERY u
OPENROWSET para llamar a Sql. Entonces todo
está permitido, incluso GETDATE
¿Por qué no se permiten las funciones de fecha
dentro de las UDF’s.
Quizá alguien de MS las odie..
21. Conferencia Visual FoxPro España 2003 PortalFox.com
Recursividad en las UDF’s
Nada nos impide usarla ….. Pero deberíamos
intentar otra via.
Está limitada a 32 niveles de recursión.
Puede ser usada para navegar en árboles
binarios.
Son una alternativa válida a procedimientos
almacenados recursivos que devuelven datos.
Ejemplo : El árbol de empleados
22. Conferencia Visual FoxPro España 2003 PortalFox.com
¿Cómo modificar datos desde una
UDF?
No se puede …… por definición.
Pero si puedes usar objetos ADO desde VB o
Foxpro para conectar a SQL-SERVER y modificar
datos…..
Podrás usar lo mismo desde las UDF’s mediante
los procedimientos sp_OAxxx .
Sin embargo si no es imprescindible yo usaría
siempre procedimientos almacenados para
modificar datos.
Pero es posible… Veámos un ejemplo.
23. Conferencia Visual FoxPro España 2003 PortalFox.com
¿Insertar datos con OPENQUERY?
OPENQUERY está diseñado para devolver datos
de cualquier proveedor OLE-DB.
Pero actualmente ejecuta secuencias de
instrucciones.
Veamos que hace…
24. Conferencia Visual FoxPro España 2003 PortalFox.com
Usos avanzados de UDF’s escalares
Usar variable de tipo tabla en UDF’s (Listado 6)
Usar y devolver XML (Listado 7)
Consideraciones de rendimiento.
Trazando UDF’s escalares con profiler
(analizador).
25. Conferencia Visual FoxPro España 2003 PortalFox.com
Redefiniendo vistas como UDF’s de
tabla en línea
Son como las vistas….casi.
Trabajan como las vistas.
Tienen las mismas limitaciones que las vistas… y
unas pocas más.
Pero : ¡Aceptan parámetros de entrada!
26. Conferencia Visual FoxPro España 2003 PortalFox.com
Redefiniendo vistas como UDF’s de
tabla en línea (continuación)
Sin embargo:
Deben ser definidas como un solo comando
SELECT.
Nunca son ‘ejecutadas’.
Son insensibles a cambios de estructura.
PERO: no pueden tener índices y no puedes
declarar triggers sobre ellas.
27. Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplo de UDF’s de tabla en línea.
-- Devuelve los pedidos de un día determinado
CREATE FUNCTION dbo.GetOrdersFromDay
(@date as smalldatetime)
RETURNS TABLE
AS
RETURN (SELECT *
FROM Orders
WHERE DATEDIFF(day, OrderDate, @date) = 0)
GO
SELECT *
FROM dbo.GetOrdersFromDay('2002-09-14')
28. Conferencia Visual FoxPro España 2003 PortalFox.com
UDF de tabla en línea documentada.
::fn_trace_gettable(@filename,
@numfiles)
Devuelve información de traza en formato tabla.
@filename es el directorio físico de la traza
@numfiles es el número de renovación (default son
todos)
SELECT *
FROM ::fn_trace_gettable(
'c:my_trace.trc',
default)
29. Conferencia Visual FoxPro España 2003 PortalFox.com
Y una UDF del sistema no
documentada
::fn_dblog(@start, @end)
Lee el log de transacciones
@start es el Log Sequence Number (LSN)
@end es el último LSN
Se usa (null,null) para leerlo todo
Se cuidadoso con el formato de @start y @end
SELECT TOP 10
[Current LSN], Operation
FROM ::fn_dblog(NULL, NULL)
ORDER BY [Current LSN] DESC
30. Conferencia Visual FoxPro España 2003 PortalFox.com
Limitaciones y algunos trucos en las
UDF’s de tabla en línea.
Usar ORDER BY dentro de una UDF (Listado 8)
Joins entre UDF’s con otras UDF’s y otras tablas.
(listado 9)
Modificar datos desde una UDF (Listado 10)
¿Cómo usa SQL-SERVER estas funciones?
Intentar detectarlas en el analizador (profiler)
Intentar detectarlas en el plan de ejecución.
31. Conferencia Visual FoxPro España 2003 PortalFox.com
Convirtiendo SP’s en UDF’s
multicomando.
Las UDF’s multicomando
Son como los procedimientos almacenados.. casi.
Están compilados como los procedimientos
almacenados.
Tienen las mismas limitaciones que los
procedimientos almacenados.
Pero.. Pueden ser usadas en la cláusula FROM
de cualquier secuencia de comandos.
32. Conferencia Visual FoxPro España 2003 PortalFox.com
Convertir SP’s en UDF’s
multicomando (continuación)
¿Por qué $#%£! debería convertir mis
procedimientos almacenados?
Es muy fácil convertir procedimientos
almacenados en funciones.
Son tan rápidas como los procedimientos
almacenados.
Aunque, no pueden usar parámetros de salida
(OUTPUT)
Aunque, no pueden modificar datos …
directamente.
Esto es por lo que LAS QUIERO
33. Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplos de creación de UDFs
multicomando.
CREATE FUNCTION dbo.tv_GetOrdersFromDay
(@date as smalldatetime)
RETURNS @list TABLE (OrderID int, OrderDate
datetime)
AS
BEGIN
INSERT @List
SELECT OrderID, OrderDate
FROM Orders
WHERE DATEDIFF(day, OrderDate, @date) = 0
RETURN
END
34. Conferencia Visual FoxPro España 2003 PortalFox.com
Algunas UDF’s multicomando más
complejas.
MakeList(@ParamArray, @Separator)
Convierte una cadena de strings en una
tabla con un solo campo con cada item
separado por @separator en una fila.
(Listado 11)
OrderDetailsComplete(@ID, @Key)
Muestra un listado de pedidos con información
completa y descriptiva, con cada primary key para
unir con otras tablas( Listado 12)
La lista se producirá para cada :
Order (@Key = 'ORD') Product (@Key = 'PRO')
Customer (@Key = 'CUS') Category (@Key = 'CAT')
Full List (@Key NOT IN ('ORD', 'PRO', 'CUS', 'CAT'))
35. Conferencia Visual FoxPro España 2003 PortalFox.com
Limitaciones y trucos con las
UDF’s multicomando
Solo puedes devolver un conjunto de resultados
Uniendo UDF’s de tabla en línea, con UDF’s
multicomando u otras Tablas.
No puedes modificar los datos dentro de una
UDF… directamente.
¿Cómo usa SQL-SERVER estas funciones?
Intentar detectarlas en el analizador (profiler)
Intentar detectarlas en el plan de ejecución.
36. Conferencia Visual FoxPro España 2003 PortalFox.com
Creando UDF’s del sistema
Deben ser creadas en master.
SQL-SERVER debe estar configurado para
permitir actualizaciones en las tablas del sistema.
El propietario debe ser system_function_schema
Y ya está!!!
Son muy útiles para convertir procedimientos
almacenados del sistema en UDF’s
Si quieres usar esos procedimientos almacenados
en cláusulas FROM
Y el procedimiento almacenado tiene un código
válido para una UDF.
37. Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplo. Convirtiendo sp_lock en
fn_lock.
Fn_lock te puede proporcionar más funcionalidad
que sp_lock:
Buscando procesos bloqueados.
Buscando bloqueos que afectan a algunos
objetos.
Mostrando los bloqueos que afecta a una
conexión.
Mostrando bloqueos que afectan al mismo
recurso.
Mira el código.
Por ejemplo :
SELECT *
FROM ::fn_lock()
WHERE Status = 'WAIT‘
38. Conferencia Visual FoxPro España 2003 PortalFox.com
Ejemplo: Obteniendo información de
grupos y usuarios de Windows
fn_getntgroupmembers te informa de los
miembros de un grupo de usuarios de windows
gn_getntgroups Te informa de los grupos a los
que pertenece un usuario.
Veamos el código:
Por ejemplo:
SELECT *
FROM
::fn_getntgroups(‘MyDomainMyUse
r')
39. Conferencia Visual FoxPro España 2003 PortalFox.com
Las UDF’s en las restricciones
Usar UDFs escalares en definiciones DEFAULT
Usar UDFs escalares en restricciones CHECK
Usar UDFs escalares en campos PRIMARY KEY
Usar UDFs escalares en columnas calculadas
“UDFs Provide a New Identity” (SQL Server
Magazine, March 2001):
http://www.sqlmag.com/Articles/Index.cfm?Arti
cleID=16354
Mira el código.
ALTER TABLE IDTest
ADD CONSTRAINT def_IDTest
DEFAULT (dbo.fn_GetNewID(OBJECT_ID('IDTest'))) FOR
ID
40. Conferencia Visual FoxPro España 2003 PortalFox.com
Recursos y referencias
Microsoft SQL Server 2000 by Example:
http://www.SqlServerByExample.com
SQL Server Magazine: http://www.sqlmag.com
Professional Association of SQL Server:
http://www.sqlpass.org
Newsgroups: news://msnews.microsoft.com
Swynk: http://www.swynk.com
CallSQL: http://www.callsql.com
www.SolidQualityLearning.com
PortalSQL.COM : http://www.portalsql.com
Microsoft SQL Server site:
http://www.microsoft.com/sql
41. Conferencia Visual FoxPro España 2003 PortalFox.com
Gracias!!!!!!!!!!!!!
¿Preguntas?
Contacte con nosotros en
fernan@solidqualitylearning.com y
webmaster@portalsql.com
42. Conferencia Visual FoxPro España 2003 PortalFox.com
¡Gracias!
Acuérdese de rellenar la hoja de evaluación