¿Cuál es la diferencia entre los procedimientos almacenados y las declaraciones preparadas ... y cuál es mejor y por qué ... !! Intentaba googlearlo pero no tengo ningún artículo mejor ...DIferencia entre los procedimientos almacenados y las declaraciones preparadas ..?
Respuesta
Los procedimientos almacenados son una secuencia de instrucciones en lenguaje PL/SQL. Es un lenguaje de programación implementado por algunos DBMS, que le permite almacenar secuencias de consultas frecuentemente aplicadas a su modelo y compartir la carga de procesamiento con la capa de aplicación.
Las declaraciones preparadas son consultas escritas con marcadores de posición en lugar de valores reales. Usted escribe la consulta y el DBMS la compila una sola vez, y luego solo pasa los valores para colocarlos en los marcadores de posición. La ventaja de utilizar sentencias preparadas es que mejora considerablemente el rendimiento y protege sus aplicaciones de la inyección de SQL.
La diferencia es que no puede almacenar declaraciones preparadas. Debe "prepararlos" cada vez que necesite ejecutar uno. Los procedimientos almacenados, por otro lado, se pueden almacenar, asociar a un esquema, pero se necesita saber PL/SQL para escribirlos.
Debe comprobar si su DBMS los admite.
Ambas son herramientas muy útiles, es posible que desee combinar.
Espero que esta breve explicación sea útil para usted!
Un procedimiento almacenado se almacena en el DB, dependiendo de qué DB (Oracle, MS SQL Server etc.) se compile y se prepare potencialmente optimizado cuando lo crea en el servidor ...
Una declaración preparada es una declaración que el servidor analiza y el servidor crea un plan de ejecución listo para ejecutarse cada vez que ejecuta la instrucción ... por lo general tiene sentido cuando una instrucción se ejecuta más de una vez ... dependiendo del servidor de base de datos (Oracle etc.) e incluso a veces las opciones de configuración estas "preparaciones" son específicas de la sesión o "globales" ...
No hay " apuesta ter "cuando compara estos dos ya que tienen sus casos de uso específicos ...
Las otras respuestas han insinuado esto, pero me gustaría enumerar los pros y los contras de manera explícita:
procedimientos almacenados
PROS:
- Cada consulta se procesa más rápidamente que una consulta directa, porque el servidor los precompila.
- Cada consulta solo debe escribirse una vez. Se puede ejecutar tantas veces como sea necesario, incluso en diferentes sesiones y diferentes conexiones.
- Permite que las consultas incluyan construcciones de programación (como bucles, declaraciones condicionales y manejo de errores) que son imposibles o difíciles de escribir solo en SQL.
CONS
- requieren el conocimiento de cualquier lenguaje de programación utiliza el servidor de base de datos.
- A veces puede requerir permisos especiales para escribirlos o llamarlos.
sentencias preparadas
PROS
- rutinas almacenadas igual, son rápidos porque las consultas son pre-compilados.
CONS
- necesitan ser re-escrito con cada conexión o sesión.
- Para valer la sobrecarga, cada instrucción preparada debe ejecutarse más de una vez (como en un bucle). Si una consulta se ejecuta solo una vez, se requiere más sobrecarga para la preparación de la declaración preparada de la que obtiene, ya que el servidor necesita compilar el SQL de todos modos, pero también debe hacer la declaración preparada.
Por mi dinero, iría con los procedimientos almacenados todo el tiempo, ya que solo necesitan escribirse una vez. Después de eso, cada llamada al procedimiento lleva al tiempo guardado, ya sea que esté en una nueva conexión o no, y si está llamando al procedimiento en un bucle o no. El único inconveniente es que necesita pasar algún tiempo aprendiendo el lenguaje de programación. Si no tuviera permisos para escribir procedimientos almacenados, usaría una declaración preparada, pero solo si tuviera que hacer repetidamente la misma consulta varias veces en la misma sesión.
Esta es la conclusión a la que he llegado después de varios meses de investigación sobre las diferencias entre estos dos constructos. Si alguien puede corregir las malas generalizaciones que estoy haciendo, valdrá la pena cualquier pérdida de reputación.
- 1. ¿Deben desasignarse las declaraciones preparadas cuando se usan dentro de procedimientos almacenados?
- 2. ¿Los procedimientos almacenados bloquean las tablas/filas?
- 3. Procedimientos almacenados y funciones
- 4. mysql declaraciones preparadas permanentemente
- 5. ¿Cómo funcionan las declaraciones preparadas?
- 6. ¿Los procedimientos almacenados de SQL distinguen entre mayúsculas y minúsculas?
- 7. Declaraciones preparadas y controladores JDBC
- 8. WebMatrix y procedimientos almacenados
- 9. ¿Las declaraciones preparadas ralentizan notablemente el programa?
- 10. [MySQL]: Procedimientos almacenados y sentencias de selección
- 11. Procedimientos almacenados y pruebas unitarias
- 12. ¿Las declaraciones preparadas evitarán los ataques de inyección sql?
- 13. Declaraciones preparadas en VB.NET
- 14. Spring NamedParameterJDBCTemplate reutilización de las declaraciones preparadas
- 15. Funciones vs procedimientos almacenados
- 16. Recursividad en declaraciones preparadas
- 17. diferencia entre las declaraciones const en C++
- 18. Cierre de declaraciones preparadas
- 19. PDO, Mysql y declaraciones preparadas nativas
- 20. Declaraciones y transacciones preparadas de MySQL
- 21. Procedimientos almacenados Ingeniería inversa
- 22. ¿El SQL formado dinámicamente en los procedimientos almacenados niega el propósito mismo de los procedimientos almacenados?
- 23. declaraciones preparadas de mysqli y mysqli_real_escape_string
- 24. Diferencia entre las declaraciones de devolución y ruptura
- 25. Versiones de procedimientos almacenados
- 26. encontrar todas las tablas no referenciadas en los procedimientos almacenados
- 27. declaraciones preparadas sqlite - cómo depurar
- 28. ¿Cuándo * no * usar declaraciones preparadas?
- 29. Patrones para procedimientos almacenados?
- 30. Declaraciones preparadas de PHP PDO