Saltar al contenido

¿Cuáles son las diferencias entre “Procedimientos almacenados” y “Funciones almacenadas”?

Después de buscar en diversos repositorios y páginas al concluir dimos con la solución que te compartiremos pronto.

Solución:

Oficialmente, PostgreSQL solo tiene “funciones”. Las funciones de activación a veces se denominan “procedimientos de activación”, pero ese uso no tiene un significado distinto. Internamente, las funciones a veces se denominan procedimientos, como en el catálogo del sistema. pg_proc. Eso es un remanente de PostQUEL. Cualquier característica que algunas personas (posiblemente con experiencia en diferentes sistemas de bases de datos) puedan asociar con los procedimientos, como su relevancia para evitar inyecciones de SQL o el uso de parámetros de salida, también se aplican a las funciones tal como existen en PostgreSQL.

Ahora, cuando las personas en la comunidad de PostgreSQL hablan de “procedimientos almacenados” o “procedimientos almacenados reales”, sin embargo, a menudo se refieren a una característica hipotética de un objeto similar a una función que puede iniciar y detener transacciones en su cuerpo, algo que las funciones actuales no pueden. hacer. El uso del término “procedimiento almacenado” en este contexto parece ser por analogía con otros productos de bases de datos. Consulte este hilo de la lista de correo para obtener una idea vaga.

En la práctica, sin embargo, esta distinción de función versus procedimiento en términos de sus capacidades de control de transacciones no se acepta universalmente, y ciertamente muchos programadores sin sesgo de base de datos tomarán una interpretación similar a Pascal de un procedimiento como una función sin valor de retorno. (El estándar SQL parece tomar un término medio, en el sentido de que un procedimiento por defecto tiene un comportamiento de transacción diferente al de una función, pero esto se puede ajustar por objeto). Entonces, en cualquier caso, y especialmente cuando se miran preguntas en Stack Exchange con un muy mixed audiencia, debe evitar asumir demasiado y usar términos más claros o definir las propiedades que espera.

En términos de DDL, Postgres no tiene objetos de procedimiento, solo funciones. Las funciones de Postgres pueden devolver valores o void por lo que asumen los roles de funciones y procedimientos en otros RDBMS. La palabra “procedimiento” en el create trigger se refiere a una función.

En términos de la documentación de Postgres, ‘procedimiento’ también es un sinónimo del objeto de la base de datos denominado función, por ejemplo: “Se crea un procedimiento de activación con el comando CREAR FUNCIÓN”.

Los ‘procedimientos’ de activación tienen reglas particulares: deben declararse como una función sin argumentos y un tipo de activación de retorno. Ejemplo aquí.

Los términos “procedimiento almacenado” y “función almacenada” se usan indistintamente en PostgreSQL y generalmente se entiende que significan lo mismo. Otras bases de datos pueden diferenciar entre un procedimiento y una función (al igual que VB diferencia entre subrutinas y funciones).

Siempre que una función en PostgreSQL devuelva algo parecido a una tabla, puede usar la salida de esa función como si fuera una tabla estándar. El CREATE TRIGGER la sintaxis es un poco confusa, pero sospecho que puede haber estado en su lugar antes de que se finalizara el estándar ANSI. Solo tengo una copia de SQL: 2003, por lo que no puedo hacer mucho más que especular por qué la nomenclatura es rara.

Versión TL; DR: con PostgreSQL “procedimiento” es equivalente a “función”.

Si sostienes algún reparo y forma de acrecentar nuestro post eres capaz de escribir una crónica y con placer lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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