martes, 19 de julio de 2016

PROCEDIMIENTOS ALMACENADOS

                    

  
DEFINICIÓN
Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro.
La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.

       Sintaxis
ü  Create Procedure Y Create Function
CREATE PROCEDURE sp_name ([parameter[,...]])
    [characteristic ...] routine_body
 
CREATE FUNCTION sp_name ([parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body
 
parameter:
    [ IN | OUT | INOUT ] param_name type
 
type:
    Any valid MySQL data type
 
characteristic:
    LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
  | COMMENT 'string'
 
routine_body:
    procedimientos almacenados o comandos SQL válidos

ü  Alter Procedure Y Alter Function
ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
 
characteristic:
    { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
  | COMMENT 'string'

ü  Drop Procedure Y Drop Function
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

ü  SHOW CREATE PROCEDURE y SHOW CREATE FUNCTION
SHOW CREATE {PROCEDURE | FUNCTION} sp_name

ü  SHOW PROCEDURE STATUS y SHOW FUNCTION STATUS
SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']

ü  La sentencia CALL
CALL sp_name([parameter[,...]])

El comando CALL invoca un procedimiento definido préviamente con CREATE PROCEDURE.

CALL puede pasar valores al llamador usando parámetros declarados como OUT o INOUT . También “retorna” el número de registros afectados, que con un programa cliente puede obtenerse a nivel SQL llamando la función ROW_COUNT() y desde C llamando la función de la API C mysql_affected_rows().

ü  Sentencia compuesta BEGIN ... END
[etiqueta_inicio:] BEGIN
    [lista_sentencias]
END [etiqueta_fin]

La sintaxis BEGIN ... END se utiliza para escribir sentencias compuestas que pueden aparecer en el interior de procedimientos almacenados y triggers.

ü  Sentencia DECLARE
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement

handler_type:
    CONTINUE
  | EXIT
  | UNDO

condition_value:
    SQLSTATE [VALUE] sqlstate_value
  | condition_name
  | SQLWARNING
  | NOT FOUND
  | SQLEXCEPTION
  | mysql_error_code



                 Administracion de Procedimientos (Creación, modificación, elijación)

      Creacion:
CREATE PROCEDURE total_factura (@id_factura INT)
AS
BEGIN
SELECT SUM(UNIDADES*PRECIO) FROM RENGLON
WHERE RENGLON.IDFACTURA = @id_factura;
END;

      Modificacion:
ALTER PROCEDURE modificar_cliente 
   (@id_cliente INT, @nombre_cliente
  VARCHAR (20), @apellido_cliente       VARCHAR (20))
WITH ENCRYPTION
AS
UPDATE CLIENTE
   SET NOMBRE=@nombre_cliente,APELLIDO=@apellido_cliente
   WHERE IDCLIENTE=@id_cliente;

      Eliminación:
DROP { PROC | PROCEDURE } { [ schema_name. ] procedure } [ ,...n ]  DROP PROCEDURE nombre_procedimiento
Ejemplo.
drop procedure pa_libros_autor;


               Ejemplos
mysql> delimiter //
mysql> CREATE FUNCTION hello (s CHAR (20)) RETURNS CHAR (50)
        -> RETURN CONCAT ('Hello, ‘, s, ‘!’);
      -> //
        Query OK, 0 rows affected (0.00 sec)
        mysql> delimiter ;
        mysql> SELECT hello('world');
        +----------------+
        | hello('world') |
        +----------------+
        | Hello, world! |
        +----------------+
        1 row in set (0.00 sec)
Si el comando RETURN en un procedimiento almacenado retorna un valor con un tipo distinto al especificado en la cláusula RETURNS de la función, el valor de retorno se coherciona al tipo apropiado. Por ejemplo, si una función retorna un valor ENUM o SET, pero el comando RETURN retorna un entero, el valor retornado por la función es la cadena para el miembro de ENUM correspondiente de un conjunto de miembros SET.







EN ESTE LINK PUEDE DESCARGAR LA DIAPOSITIVA


RESUMEN
Los procedimientos almacenados son un conjunto de instrucciones SQL más una serie de estructuras de control que nos permiten dotar de cierta lógica al procedimiento. Estos procedimientos están guardados en el servidor y pueden ser accedidos a través de llamadas.Para crear un procedimiento, SQL nos ofrece la directiva CREATE PROCEDURE. Para llamar a un procedimiento lo hacemos mediante la instrucción CALL.

SUMMARY
Stored procedures are a set of SQL statements over a number of control structures that allow us to provide a certain logic to the procedure. These procedures are stored on the server and can be accessed through calls.To create a procedure, SQL offers the CREATE PROCEDURE directive. To call a procedure we do using the CALL instruction.

RECOMENDACIONES
La seguridad es muy importante, por eso la gran mayoria de las empresas que cuentan con un sistema optan por trabajar con procedimientos almacenados ya que brinda un mayor respaldo y seguridad en los datos.

CONCLUSIONES 
Un procedimiento es un subprograma que ejecuta una acción específica y que no devuelve ningún valor. Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código.

BIBLIGRAFÍA O LINKOGRAFÍA














No hay comentarios:

Publicar un comentario