investigacion pl pgsql

8
PL/pgSQL La programación del lado de servidor Los bloques PL/SQL son unidades de código que se envían al servidor para que sean procesadas conjuntamente, obviamente esto es mejor para el rendimiento del sistema que si se envían las sentencias SQL separadamente una a una. Es decir, cuando se requiere la ejecución de un bloque PL/SQL, este es enviado al servidor PL/SQL donde se ejecuta el código PL/SQL y las sentencias SQL son enviadas al servidor Oracle, como el servidor PL/SQL reside en el servidor Oracle, el código se ejecuta eficientemente. ¿Qué es PL/pgSQL ? PL/pgSQL es un lenguaje procedural cargable que agrupa instrucciones de computación y una serie de consultas dentro del servidor de base de datos. Una de sus ventajas es que evita sobrecargas en la comunicación cliente servidor. PL/pgSQL también es conocido por usar todos los tipos de datos, columnas, operadores y funciones de SQL. Una característica de PL/pgSQL es que reutiliza los planes de consultas más importantes a lo largo del tiempo de vida de la conexión a la base de datos. ESTRUCTURA DE UN PROGRAMA PL/pgSQL PL/pgSQL es un lenguaje estructurado de bloques. El texto completo de una definición de función debe ser un bloque. Un bloque se define como: Una sección de pequeños lineamientos en un bloque también se los conoce como subbloques. Estos subbloques también se los utiliza como agrupaciones lógicas. En la sección de declaración se inicializa variables con sus valores por defecto cuando el bloque es introducido. Como se muestra en el siguiente ejemplo.

Upload: marcocuenca

Post on 13-Sep-2015

213 views

Category:

Documents


0 download

DESCRIPTION

Es un documento que analiza los bloques y declaraciones en una base de datos PL/pgSQL

TRANSCRIPT

  • PL/pgSQL

    La programacin del lado de servidor

    Los bloques PL/SQL son unidades de cdigo que se envan al servidor para que

    sean procesadas conjuntamente, obviamente esto es mejor para el rendimiento

    del sistema que si se envan las sentencias SQL separadamente una a una. Es

    decir, cuando se requiere la ejecucin de un bloque PL/SQL, este es enviado al

    servidor PL/SQL donde se ejecuta el cdigo PL/SQL y las sentencias SQL son

    enviadas al servidor Oracle, como el servidor PL/SQL reside en el servidor Oracle,

    el cdigo se ejecuta eficientemente.

    Qu es PL/pgSQL ?

    PL/pgSQL es un lenguaje procedural cargable que agrupa instrucciones de

    computacin y una serie de consultas dentro del servidor de base de datos. Una

    de sus ventajas es que evita sobrecargas en la comunicacin cliente servidor.

    PL/pgSQL tambin es conocido por usar todos los tipos de datos, columnas,

    operadores y funciones de SQL.

    Una caracterstica de PL/pgSQL es que reutiliza los planes de consultas ms

    importantes a lo largo del tiempo de vida de la conexin a la base de datos.

    ESTRUCTURA DE UN PROGRAMA PL/pgSQL

    PL/pgSQL es un lenguaje estructurado de bloques. El texto completo de una definicin de funcin debe ser un bloque. Un bloque se define como:

    Una seccin de pequeos lineamientos en un bloque

    tambin se los conoce como subbloques. Estos

    subbloques tambin se los utiliza como agrupaciones

    lgicas.

    En la seccin de declaracin se inicializa variables con

    sus valores por defecto cuando el bloque es introducido. Como se muestra en el

    siguiente ejemplo.

  • Se tienen conceptos que hay que conocer como un estamento bsico que es

    asignacin. Una asignacin de un valor a una variable o campo de fila/registro se

    escribe: identificador := expresin;

    Un detalle importante a mencionar es que si el tipo de dato de la expresin no

    coincide con el tipo de dato de la variable, el valor resultante ser implcitamente

    convertido por el intrprete PL/psSQL con la ayuda de los parmetros output

    function e input function.

    Ejemplos:

    Si usamos el comando SELECT significa que se encuentran mltiples columnas

    pero solo una fila. Este comando es asignado a una variable tipo fila, tipo registro

    o variables escalares.

    En esta expresin despus de destino puede ir una variable registro, fila y campos

    registro/fila. Cabe resaltar aqu que si queremos crear una tabla dentro de una

    funcin PL/pgSQL hay que usar la sintaxis CREATE TABLE AS SELECT.

    El parmetro RETURN ms lo que se escribe despus de esta palabra sirve para

    retornar desde una funcin PL/pgSQL. Si queremos retornar un valor compuesto

    (una fila), debemos escribir una variable registro o fila despus de la palabra

    RETURN. La estructura de este parmetro seria as:

    Una lnea en PL/SQL contiene grupos de caracteres conocidos como UNIDADES

    LEXICAS, que pueden ser clasificadas como:

    Considerar la sintaxis del lenguaje PL/pgSQL es saber cules son los detalles

    lxicos que se usan en un programa de base de datos. Cada estamento y

    declaracin debe ir terminado por un punto y coma. Los identificadores por defecto

    sern convertidos a minsculas. Para escribir un identificador en maysculas debe

    ir con comillas dobles. Para poner un comentario se usa simplemente el smbolo /*

    al inicio y */ al final.

  • MANEJO DE BLOQUES EN PL/pgSQL Y DECLARACIONES

    Se debe mencionar un aspecto del manejo de bloques que son las declaraciones.

    La seccin de declaraciones del bloque sirve para ubicar ah todas las variables,

    filas y registros.

    A continuacin la declaracin de variables:

    Hay palabras reservadas que cumplen una tarea en el editor de base de datos.

    Por ejemplo tenemos la palabra DEFAULT que sirve para especificar el valor

    asignado a la variable, la palabra CONSTANT no permite la asignacin de otros

    valores a la variable y la palabra NOT NULL significa que las variables deben

    poseer un valor por defecto no nulo.

    Es comn que se utilicen Alias para los parmetros de la funcin. En el siguiente

    ejemplo notamos que los parmetros usan los identificadores $1 Y $2.

  • TIPOS DE DATOS EN PL/pgSQL

    En la familia de PL/SQL se hallan tipos de datos como:

    Dentro de las variables de tipo compuesto se encuentra la variable de fila o row-

    type-variable. Esta variable hace posible que el resultado de una consulta

    SELECT o FOR se almacene en una fila completa. Para que esto se d la

    columna de dicha consulta debe ser del mismo tipo que la variable. La estructura

    debe ser as: variablefila.campo.

    En la sintaxis de este parmetro se debe escribir de la siguiente forma:

    %ROWTYPE. En vista de que se est actuando sobre filas completas de tablas, el

    identificador o alias que es $n tambin ser una variable tipo fila. La estructura del

    identificador seria: $1.nombrecampo.

    Solo los atributos de una tabla especificados por el usuario pueden ser accesibles

    en una variable de tipo fila. En un campo de tipo fila, el tamao del campo de la

    tabla as como su tipo de dato es el mismo que usa el tipo fila.

    El atributo %TIPE permite declarar variables con el mismo tipo de dato usados en

    otros campos de la tabla. Por ejemplo si usted tiene un tipo de dato user_id en su

    tabla usuarios. Para declarar una variable con el mismo tipo de dato que uso en su

    tabla usuarios, tendra que escribir lo siguiente:

  • Condiciones

    Las sentencias IF le permiten ejecutar comandos cuando se dan ciertas condiciones. PL/pgSQL tiene cinco formas de IF: IF ... THEN

    IF ... THEN ... ELSE

    IF ... THEN ... ELSE IF

    IF ... THEN ... ELSIF ... THEN ... ELSE

    IF ... THEN ... ELSEIF ... THEN ... ELSE

    IF-THEN IF expresin-lgica THEN

    sentencias

    END IF;

    Las sentencias IF-THEN son las formas ms simples de IF. Las sentencias entre THEN y END IF sern ejecutadas si la condicin es verdadera. De otra manera, sern ignoradas. Ejemplo: IF v_id_usuario 0 THEN UPDATE usuarios SET email = v_email WHERE id_usuario= v_id_usuario;

    END IF;

    IF-THEN-ELSE IF expresin-lgica THEN

    sentencias

    ELSE

    sentencias

    END IF;

    Las sentencias IF-THEN-ELSE aaden funcionalidad a IF-THEN permitindole especificar un conjunto de sentencias alternativo que debe ejecutarse si la condicin produce un valor de falso. Ejemplo: IF parentid IS NULL OR parentid =

    THEN

    RETURN fullname;

    ELSE

    RETURN hp_true_filename(parentid) || / || fullname;

    END IF;

    IF v_cuenta> 0 THEN INSERT INTO usuarios_cuenta(count) VALUES (v_cuenta);

    RETURN t;

    ELSE

    RETURN f;

    END IF;

    IF-THEN-ELSE IF

    Las sentencias IF pueden anidarse, como se muestra en el siguiente ejemplo: IF demo_renglon.sexo = m THEN

    pretty_sex := hombre;

  • ELSE

    IF demo_renglon.sexo = f THEN

    pretty_sex := mujer;

    END IF;

    END IF;

    Cuando se usa esta forma, realmente se est anidando la sentencia IF dentro de la parte ELSE de la sentencia IF. As, requiere una sentencia END IF para cada IF anidado y una para el padre IF-ELSE. IF-THEN-ELSIF-ELSE IF expresin-lgica THEN

    sentencias

    [ ELSIF expresin-lgica THEN

    sentencias

    [ ELSIF expresin-lgica THEN

    sentencias

    ...]]

    [ ELSE

    sentencias ]

    END IF;

    IF-THEN-ELSIF-ELSE

    Proporciona un mtodo ms conveniente para revisar varias alternativas en una sentencia. Formalmente es equivalente a los comandos anidados

    IF-THEN-ELSE-IF-THEN, pero solo se necesita un END IF. Ejemplo: IF numero = 0 THEN

    resultado := cero;

    ELSIF numero > 0 THEN resultado := positivo;

    ELSIF numero < 0 THEN resultado := negativo;

    ELSE

    -- hmm, la nica otra posibilidad que el nmero sea nulo

    resultad := NULL;

    END IF;

    Triggers o disparadores

    Durante la ejecucin de una aplicacin de base de datos, hay ocasiones que se

    requiere realizar una o ms acciones de forma automtica, si se produce un evento

    en especfico. Es decir, que la primera accin provoca la ejecucin de las siguientes

    acciones. Los denominados Triggers o disparadores son el mecanismo de

    activacin, que posee SQL para entregar esta capacidad.

    Definicin.-

    Un Trigger es una orden que el sistema ejecuta de manera automtica como

    efecto secundario de alguna modificacin de la base de datos. Entonces los

  • Triggers siguen en orden la secuencia: evento->condicin->accin. Se ejecutan

    mediante los comandos INSERT, DELETE y UPDATE.

    Para disear un mecanismo Trigger hay que cumplir algunos requisitos:

    1. Procedimiento almacenado: Se debe crear la base de datos y las

    relaciones, antes de definir el Trigger.

    2. Especificar condiciones para ejecutar el Trigger: Se debe definir

    un evento que causa la comprobacin del Trigger y una condicin que

    se debe cumplir para ejecutar el Trigger.

    3. Especificar las acciones: Se debe precisar qu acciones se van a

    realizar cuando se ejecute el Trigger.

    La base de datos almacena Trigger como si fuesen datos normales, por lo que son

    persistentes y accesibles para todas las operaciones de la base de datos. Una vez

    se almacena un Trigger en la base de datos, el sistema de base de datos asume la

    responsabilidad de ejecutarlo cada vez que ocurra el evento especificado y se

    satisfaga la condicin correspondiente.

    Creacin de un disparo

    1. Un Trigger se crea con la sentencia CREATE TRIGGER.

    2. Despus de que se crea, el Trigger se encuentra a la espera de que se

    produzca el evento de activacin.

    3. Cuando el evento se produce desencadena una accin.

    Forma general:

    (1)CREATE TRIGGER nombreTrigger

    (2)BEFORE|AFTER|INSTEAD OF AlgnEvento ON nombreTabla

    (3)WHEN (condicin)

    (3)Action

    Variables especiales

    Existen algunas palabras reservadas, que estn disponibles para ser utilizadas por

    Triggers. Algunas de estas variables especiales disponibles son las siguientes:

    NEW: Variable que contiene la nueva fila de la tabla para las

    operaciones INSERT/UPDATE.

    OLD: Variable que contiene la antigua fila de la tabla para las

    operaciones UPDATE/DELETE.

  • TG_NAME: Variable que contiene el nombre del Trigger que est usando la

    funcin actualmente.

    TG_RELID: identificador de objeto de la tabla que ha activado el Trigger.

    TG_TABLE_NAME: nombre de la tabla que ha activado el Trigger.