Tips.cl

PostgreSQL

Ejemplos de PL/pgSQL

by MigueliTUX on Apr.05, 2009, under PostgreSQL

Buscar un cliente y retornar si existe o no

CREATE OR REPLACE FUNCTION buscar_cliente (varchar)
RETURNS
bool AS
DECLARE
rut_buscar alias for $1;
registro clientes%ROWTYPE;
/* Notese que aqui definimos la variable registro del tipo FILA de clientes
indicando la tabla, el simbolo % y luego la palabra reservada ROWTYPE
*/
BEGIN
SELECT INTO registro * FROM clientes
WHERE rut_cliente = rut_buscar;
IF FOUND THEN
RETURN true;
END IF;
RETURN false;
END;
LANGUAGE ‘plpgsql’;

LLAMADA SELECT buscar_cliente(’12000111-2′);

Buscar un producto y actualiza su precio segun porcentaje

CREATE OR REPLACE FUNCTION actualizar_producto (varchar, real)
RETURNS
bool AS
DECLARE
producto ALIAS FOR $1;
porcentaje ALIAS FOR $2;
registro productos%ROWTYPE;
BEGIN
SELECT INTO registro * FROM productos
WHERE id_producto = producto;
IF FOUND THEN
UPDATE productos SET
precio_venta = precio_venta + (precio_venta * porcentaje)
WHERE id_categoria = categoria;
RETURN true;
END IF;
RETURN false;
END;
‘ LANGUAGE
‘plpgsql’;

LLAMADA SELECT actualizar_producto(’PRO-0540′,0.03)

Suma 2 valores

CREATE OR REPLACE FUNCTION suma (real, real)
RETURNS real AS
DECLARE
valor_1 ALIAS FOR $1;
valor_2 ALIAS FOR $2;
total
real;
BEGIN
total := valor_1 + valor_2;
RETURN total;
RETURN;
END;
‘ LANGUAGE
‘plpgsql’;

LLAMADA SELECT suma(3,4)

3 Comentarios :, más...

SENTENCIAS DE CONTROL PARA POSTGRES

by MigueliTUX on Apr.05, 2009, under PostgreSQL

  • SENTENCIA DE CICLO LOOP :
  • Esta sentencia nos permite efectuar un ciclo, su estructura básica es :

    …resto de la funcion…
    LOOP

    …sentencias a ejecutar en el ciclo…
    END LOOP
    …resto de la funcion…
  • SENTENCIA DE SALIDA EXIT :
  • Cuando usamos un ciclo LOOP, es necesario darle una salida para que este mismo termine, la sentencia EXIT nos permite finalizar el LOOP y continuar en la sentencia siguente a la salida de éste, generalmente, EXIT está acompañado con la sentencia IF, por ejemplo

    LOOP
    …resto de la funcion…
    contador := contador + 1;

    IF contador >= 10 THEN
    EXIT; — salida del loop cuando sea mayor o igual que 10
    END IF;
    END LOOP
    …resto de la funcion…
  • SENTENCIAS IF, ELSE :
  • Podemos efectuar operaciones de comparación con las sentencias IF, ELSE, los operadores de comparación son los siguientes :

    < menor que …
    > mayor que …
    <> distinto a …
    <= menor o igual que …
    >= mayor o igual que …
    = igual que …
    OR o …
    AND y …

    Ejemplo :

    …resto de la funcion…
    IF >= 10 or THEN
    RETURN true;

    ELSE
    RETURN false;
    END IF;
    …resto de la funcion…

  • SENTENCIA DE CICLO FOR :

    Existen dos tipos de ciclos FOR, el primero tiene que ver claramente con los ciclos numéricos comunes, es decir, lo que comunmente se usa para efectuar repeticiones, y por otra parte, tenemos un ciclo FOR que nos permite recorrer tablas y procesar sus datos, esta segunda está ligada a sentencias SQL, veamos entonces como se utiliza la sentencia FOR

    CASO 1 : SENTENCIA FOR DE PROCESO CICLICO NUMERICO

  • FOR <variable> IN <inicio>..<fin> LOOP
    … SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR …
    END LOOP;

    o bien puede usar el FOR de forma inversa

    FOR <variable> REVERSE <fin>..<inicio> LOOP
    … SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR …
    END LOOP;

    Ejemplo :

    …resto de la funcion…
    FOR inc IN 1..10 LOOP
    factorial := factorial * inc;
    END LOOP;
    RETURN factorial;
    …resto de la funcion…

    CASO 2: SENTENCIA FOR APLICADA A PROCESOS DE REGISTROS SQL

    FOR <registro o fila> IN <sentencia SELECT SQL> LOOP
    … SENTENCIAS A EJECUTAR DENTRO DEL CICLO FOR …
    END LOOP;

    Ejemplo :

    …resto de la funcion…
    DECLARE
    registro RECORD;
    BEGIN
    FOR registro IN SELECT * FROM productos LOOP
    stock := registro.sock_actual + 100;
    … otras sentencias …
    END LOOP;
    …resto de la funcion…

    Note que para utilizar esta sentencia FOR debemos declarar una variable de tipo RECORD o registro. RECORD es una palabra reservada para estos casos, y no posee una estructura definida pues no ha sido asignada a ninguna tabla, este tipo de dato nos permite recorrer la tabla de productos y obtener sus valores por medio de esta variable.

  • SENTENCIA DE CICLO CONDICIONAL WHILE

    La sentencia WHILE se ejecuta de forma muy similar a otros lenguajes de programación, su estructura es la siguiente :

  • WHILE <condicion> LOOP
    … SENTENCIAS A EJECUTAR DENTRO DEL CICLO WHILE …
    END LOOP;

    Ejemplo :

    …resto de la funcion…
    WHILE inc <= 10 LOOP
    factorial := factorial * inc;
    END LOOP;
    RETURN factorial;
    …resto de la funcion…

    Este codigo funciona igual al descrito en el ejemplo del ciclo FOR.

    4 Comentarios :, más...

    RETORNANDO EL UN VALOR COMO FUNCION

    by MigueliTUX on Apr.05, 2009, under PostgreSQL

    una vez procesados nuestros valores debemos retornar algún valor (pues ese es la esencia de la función), este retorno de valores también se realiza dentro de la sección BEGIN de la función, pero utilizando la siguiente forma básica :

    …resto de la funcion…
    RETURN <variable>;
    …resto de la funcion…
    Ejemplo completo de la función SUMA :FUNCTION suma ( real , real )
    RETURNS
    real AS
    DECLARE

    numero_1 alias for $1;
    numero_2
    alias for $2;
    valor_total
    real;
    BEGIN

    valor_total := numero_1 + numero_2;
    RETURN valor_total;
    END;
    LANGUAGE ‘plpgsql’;
    2 Comentarios :, más...

    ASIGNACION DE LAS SENTENCIAS DE PL/pgSQL

    by MigueliTUX on Apr.05, 2009, under PostgreSQL

    Las asignaciones de valores se realizan de la misma forma que en PASCAL, es decir, utilizando := como operador de asignación y punto y coma al final de la línea, ejemplo :

    FUNCTION suma ( real , real )
    RETURNS
    real AS
    DECLARE

    numero_1 alias for $1;
    numero_2
    alias for $2;
    valor_total
    real;
    BEGIN

    valor_total := numero_1 + numero_2;
    numero_1 := numero_1 * numero_2;
    …resto de la funcion…
    3 Comentarios :, más...

    Tipos de Parametros usados por PostgreSQL

    by MigueliTUX on Apr.05, 2009, under PostgreSQL

    Tipos  de Parametros usados por PostgreSQL: INTEGER, DATE, TIME, VARCHAR, CHAR, TIMESTAMP, REAL, TEXT y muchos otros, e inclusive tipos definidos por el usuario por medio de la instrucción CREATE TYPE.

    DECLARE
    contador integer = 0;
    cadena
    varchar;
    hoy
    date;
    bandera
    bool;
    suma
    real;
    Déjanos tu comentario :, más...

    Buscas algun tips?

    Busca aquí:

    contactate con nosotos contacto@tips.cl

    Visita nuestras Web amigas!

    Web Amigas...