2010-01-21 14 views
5

Estoy investigando los procedimientos almacenados en este momento.[MySQL]: Procedimientos almacenados y sentencias de selección

De acuerdo con el artículo this (página 8) en la sección de la página web dev MySQL ...

lo general, no es normal para poner instrucciones SELECT en procedimientos almacenados , esto es para ilustración. Decidí que algún procedimiento debería seleccionar de nuestra tabla, de modo que cuando llame al procedimiento sea obvio que está funcionando.

¿Por qué es eso?

¿Está utilizando procedimientos almacenados para simplificar las declaraciones de selección complicadas y no las "mejores prácticas"?

¿Cuáles son algunas situaciones específicas en las que es beneficioso usar un procedimiento almacenado? ¿Ejemplo?

Respuesta

3

Los procedimientos generalmente almacenados están destinados a un procesamiento complejo en la base de datos. Hay debates furiosos sobre sus beneficios. Nunca vi que los SELECT en un procedimiento almacenado fueran algo malo, pero tampoco esperaría que todas y cada una de las sentencias SQL que se escriben entren en un procedimiento almacenado. Debe reservarse para aquellos procesos que involucren múltiples declaraciones y deberán realizarse repetidamente.

Jeff tiene una diatriba sobre ellos here.

Para responder a su pregunta directa sobre ejemplos específicos, he encontrado que los evito debido a la cuestión de la portabilidad. Intento hacer todo el lado de mi aplicación de procesamiento. Al mismo tiempo, no tengo que preocuparme por el ancho de banda de la red en mi aplicación, por lo que cada situación es diferente.

+0

que estaba bajo la impresión de que de procedimiento almacenado donde más portátil que una consulta de aplicación conducido. En la medida en que pueda separar su lógica de consulta de la aplicación. –

+0

Pero están escritos en el propio lenguaje del DBMS. Los procedimientos almacenados de SQL Server están escritos en T-SQL y Oracle en PL/SQL, etc. No puede mover la base de datos de una plataforma a la siguiente. Para algunas organizaciones que no es un gran problema, pero para otros ... –

+0

definitivamente cierto ... La portabilidad de un sistema de BD a otro es arriesgado. El pdf que he vinculado describe algunas de las características/sintaxis específicas de mysql (así como varias otras convenciones) que debe evitar para mantener problemas de compatibilidad en bases de datos no basadas en mysql. PERO, si no me equivoco, los procedimientos almacenados facilitan la portabilidad de un idioma al siguiente. –

3

Una situación específica en la que es beneficioso utilizar Procedimientos almacenados/Rutinas es que puede proporcionar la comprobación de errores en parámetros similares a las funciones en el paradigma OO. Se da mayor

Un ejemplo simple 'encapsulación':

CREATE PROCEDURE select_table(IN @id INT) 
BEGIN 
    IF @id < O THEN 
    -- ERROR! do something here 
    ELSEIF 
    SELECT * from TABLE WHERE id = @id; 
    END IF 
END 
+0

observado. Definitivamente una característica muy poderosa. –

Cuestiones relacionadas