2011-09-03 13 views

Respuesta

33

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!

10

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 ...

0

Las otras respuestas han insinuado esto, pero me gustaría enumerar los pros y los contras de manera explícita:

procedimientos almacenados

PROS:

  1. Cada consulta se procesa más rápidamente que una consulta directa, porque el servidor los precompila.
  2. Cada consulta solo debe escribirse una vez. Se puede ejecutar tantas veces como sea necesario, incluso en diferentes sesiones y diferentes conexiones.
  3. 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

  1. requieren el conocimiento de cualquier lenguaje de programación utiliza el servidor de base de datos.
  2. A veces puede requerir permisos especiales para escribirlos o llamarlos.

sentencias preparadas

PROS

  1. rutinas almacenadas igual, son rápidos porque las consultas son pre-compilados.

CONS

  1. necesitan ser re-escrito con cada conexión o sesión.
  2. 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.

Cuestiones relacionadas