4 Diapositivas MC Edgar

71
  Algunas Palabras Claves Y  Algunas Palabras Claves Y Ejemplos Para El Manejo Ejemplos Para El Manejo De PostgreSQL De PostgreSQL” (UN BREVE REPASO) M.C. Edgar Rangel Lugo Derechos Reservados(c) 2013. Edgar Rangel Lugo. México. ** La imagen de fondo fue extraída de captura de pantalla del software de la Herramienta pgAdmin III que instala PostgreSQL, quien tiene los derechos reservados.

Transcript of 4 Diapositivas MC Edgar

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 1/71

 

“ Algunas Palabras Claves Y Algunas Palabras Claves YEjemplos Para El ManejoEjemplos Para El Manejo

De PostgreSQLDe PostgreSQL”(UN BREVE REPASO)

M.C. Edgar Rangel LugoDerechos Reservados(c) 2013. Edgar Rangel Lugo. México.

** La imagen de fondo fue extraída de captura de pantalla del software de laHerramienta pgAdmin III que instala PostgreSQL, quien tiene los derechos reservados.

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 2/71

 

Destacan Dos Lenguajes: 

DDL – Definición

DML – Manipulación

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 3/71

 

DDL – Definición

 CREATE - Crear 

DROP - Borrar ALTER - Modificar 

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 4/71

 

DDL – DefiniciónCREATE

DATABASE CREATE DATABASE nombre

WITH OWNER = usuarioENCODING = 'LATIN9'CONNECTION LIMIT = -1 ;

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 5/71

 

DDL – DefiniciónCREATE TABLE 

CREATE TABLE nombre_tabla (  nombre_campo1 tipo_datos restricción,. . .nombre_campoN tipo_datos restricción

. . .) INHERITS (nombre_tabla_base) ;

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 6/71

 

DDL – Definición

DROP DATABASEdrop database nombre_de_la_BD ;

DROP TABLE

drop table nombre de la Tabla ;

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 7/71

 

DDL – Definición

  ALTER DATABASEALTER DATABASE nombre OWNER TO usuario ;

ALTER DATABASE nombre RENAME TO nuevo_nombre ;

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 8/71

 

DDL – Definición  ALTER TABLE

DROP alter table productos drop existencias ;

ADD  alter table productos add

existencias integer check (existencias>=0);

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 9/71

 

DML – Manipulación

INSERT – Agregar (Insertar )

UPDATE – Modificar (Actualizar )DELETE – Borrar (Eliminar )

SELECT – Listar (Seleccionar )

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 10/71

 

DML – ManipulaciónINSERTInsert into tabla (campos)

values (valores) ;

Insert into tabla1 (campos)

select campos from tabla2 ;Insert into tabla1

select * from tabla2 ;

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 11/71

 

DML – ManipulaciónUPDATE

  Update nombre_tablaSet campo1 = valor1 , … ,campoN = valorN

Where (Condición) ; 

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 12/71

 

DML – ManipulaciónDELETE

 Delete From nombre_tablaWhere (Condición) ;

 

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 13/71

 

DML – Manipulación 

SELECTSelect campos From tablas

Where (condición) ;

Select campos From tablas

Where (condiciones)Group By camposHaving (condición)

Order By campos Asc/Desc;

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 14/71

 

DML – Manipulación 

SELECT

Select campos into variablesFrom tablas ;

Select funcion_almac (parametros) ;

Select func_almac () into variable ;

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 15/71

 

Algunos Tipos Válidos Para

Create, Insert, Alter, … quedestacan son:  text date

timetz datetimenumeric [ (p, s) ] serialdouble precision bigserial

varchar [ (n) ] integer boolean bigintreal xml

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 16/71

 

Algunas Restricciones Para

Create, Alter, … quedestacan son:CHECK (condición) =CHECK (nombre_campo operador  valor)

UNIQUE (nombre_campo1, ..., nombre_campoN)NOT NULL NULLPRIMARY KEY UNIQUEREFERENCES nombre_tabla (PK_de_tabla_ext)

FOREIGN KEY (campo1, camposN)REFERENCES tabla_ext (campo_ext1, campo_ext2)REFERENCES tabla_ext

ON DELETE CASCADEON UPDATE CASCADE

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 17/71

 

Algunos Operadores Para

Condiciones quedestacan son: 

Aritméticos: + - ^ * /

Lógicos: and or not

Relacionales: >= <= > < <>= between like

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 18/71

 

CLASES ,

OBJETOS ,MÉTODOS Y

EVENTOS(Utilizando  PostgreSQL 8.4.4 / 9.0)

M.C. Edgar Rangel LugoDerechos Reservados(c) 2013. Edgar Rangel Lugo. México.

** La imagen ha sido extraída de la captura de pantallaDel programa de instalación de PostgreSQL empaquetadoPor EnterpriseDB, quien tiene los derechos reservados.

CLASES

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 19/71

 

CLASES - SE DECLARAN UTILIZANDO

“TYPE”.

Sintaxis :

CREATE  TYPE nombre_tipo AS (  atributo_1 tipo,

.... atributoN tipo

) ;  Ejemplo: 

CREATE  TYPE alumnos  AS (

matricula varchar(50),nombre varchar(50),carrera varchar(50)

) ;

OBJETOS

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 20/71

 

OBJETOS - SE DECLARAN CAMPOS DENTRO DE UNA TABLA CUYO

TIPO ES UN “TYPE”.Sintaxis :

CREATE  TABLE nombre_tabla

(campo_1 tipo_definido(TYPE),.... ,campoN tipo_definido(TYPE)

) ;

Ejemplo:

CREATE  TABLE  escuela (clave serial primary key, -- es un campoestudiantes alumnos, -- es un objetoprofesores maestros -- es un objeto

) ;

MÉTODOS

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 21/71

 

MÉTODOS -  SE DECLARAN UTILIZANDO FUNCTION . 

Sintaxis :

CREATE  FUNCTION nombre_funcion (parametros)RETURNS tipo AS  $$ 

DECLARE-- variables : nombre_variable tipo ;

BEGIN-- sentencias SQL y de programacion

RETURN variable_del_tipo ;END ;$$  LANGUAGE  plpgsql ;

NOTA:

 LOS parámetros SE INTEGRAN POR :

variable Tipo, .....

SEPARADOS POR COMA.

MÉTODOS

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 22/71

 

MÉTODOS -  SE DECLARAN UTILIZANDO FUNCTION . 

Ejemplo :

CREATE  FUNCTION civa (saldo numeric, iva integer )

RETURNS numeric AS  $$ DECLARE

  myiva numeric := 0;BEGIN  myiva := (saldo * iva) / 100;RETURN  myiva;END ;$$  LANGUAGE  plpgsql ;

ALGUNAS SENTENCIAS QUE PUEDEN

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 23/71

 

ALGUNAS SENTENCIAS QUE PUEDENUSARSE DENTRO DE CÓDIGO PL/SQL 

ASIGNACIÓN

variable := valor ;

SENTENCIAS

RAISE NOTICE 'Texto %' , variable

NULL, NOT FOUND, RETURN,

CONDICIONES

IF (CONDICION) THENNULL ;

ELSENULL;

END IF;

OTRAS SENTENCIAS QUE PUEDEN

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 24/71

 

OTRAS SENTENCIAS QUE PUEDENUSARSE DENTRO DE CÓDIGO PL/SQL 

CICLOS

  FOR variable (CONSULTA - RANGO)LOOP

NULL;

END LOOP; WHILE (CONDICION)LOOP

NULL;END LOOP;

 Y TODO COMANDO DEL SQL

SELECT , INSERT INTO, UPDATE, DROP,CREATE, DELETE, .....

Y TAMBIÉN PUEDEN USARSE

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 25/71

 

 Y TAMBIÉN PUEDEN USARSELOS OPERADORES

ARITMÉTICOS

+ , - , * , /

RELACIONALES

> , < , >= , = , <=,<> , != , between , like

LÓGICOS

and or not

Y LOS TIPOS O VALORES QUE PUEDEN

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 26/71

 

 Y LOS TIPOS O VALORES QUE PUEDENUSARSE EN LA SENTENCIA “RETURN”

SE PUEDE REGRESAR:

- UNA VARIABLE- UN VALOR- NULL

Y SI ES UNA FUNCIÓN QUE UTILICEUN TRIGGER :

- NULL -- SI ES TRIGGER UPDATEOR DELETE

- OLD -- SI TRIGGER ES BEFORE

- NEW -- SI TRIGGER ES AFTER 

EVENTOS - SE COMBINAN DOS ELEMENTOS:1) EL USO DE FUNCTION CUYO TIPO DE RETORNO ES UN TRIGGER Y

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 27/71

 

1) EL USO DE FUNCTION CUYO TIPO DE RETORNO ES UN TRIGGER . Y2) SE IMPLEMENTAN UTILIZANDO LA SIGUIENTE SINTAXIS:

  PASO 1CREATE  OR REPLACE   FUNCTION 

nombre (parametros) RETURNS  TRIGG ER  AS  $$ DECLARE

  -- variables : nombre_variable tipo ;BEGIN

  -- sentencias SQL y de programación

RETURN  Tipo_Trigger   ; -- NEW , OLD, NULL END ;

  $$  LANGUAGE  plpgsql ;PASO 2

CREATE TRIGGER nombre_del_disparador 

MODIFICADOR   SENTENCIA  ON tabla  FOR EACH ROW EXECUTE PROCEDUREnombre_function ( parametros); 

NOTA: Donde:MODIFICADOR 

 puede ser  BEFORE  o

 AFTER.Y SENTENCIA

puede ser DROP ,INSERT,DELETE,

UPDATE, ......

NOTA: LOS parámetros SE INTEGRAN POR :

variable Tipo, .....SEPARADOS POR COMA.

NOTA: Para SENTENCIA o MODIFICADOR :BEFORE o DELETE o UPDATE, se recomienda

el uso de OLD o NULL .

EJEMPLO DE EVENTOS - TRIGGERS

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 28/71

 

EJEMPLO DE EVENTOS TRIGGERS 

CREATE  OR REPLACE   FUNCTION  listar () RETURNS TRIGG ER  AS  $$ 

DECLAREfilas clientes%ROWTYPE ;actual clientes%ROWTYPE ;

BEGINFOR actual IN select * from clientes

LOOPRAISE NOTICE ' % ' , actual ;END LOOP;

RETURN  OLD  ;END ;

  $$  LANGUAGE  plpgsql ;CREATE TRIGGER trigger_lista  BEFORE   DELETE  ON clientes  FOR EACH ROW EXECUTE PROCEDURE listar () ;

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 29/71

 

“Ejemplos Para PostgreSQLEjemplos Para PostgreSQL”By

M.C. Edgar Rangel Lugo

Derechos Reservados(c) 2013. Edgar Rangel Lugo. México.

** Las imágenes de Chuchita y Cholillo son obras registradas por el autor de este documento.

Por fin !!! Ya VienenLos Ejemplos

Oh “My God”

Primero Lo Primero:

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 30/71

 

Primero, Lo Primero:

CURSO PostgreSQL 8.4

...........................................

Para Entrar ....................

1.- Entrar a pgAdmin y hacer doble click sobrePostgreSQL 8.4 (localhost:5432)

2.- Teclear clave de acceso que se dio durante lainstalación (Por Ejemplo: 12345678)

Luego :

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 31/71

 

Luego :

Crear BD

................

1.- Botón derecho sobre databases

2.- Click en opción : New Database...3.- Se escribe nombre a la BD, se selecciona un

dueño (usuario), y se ajustan el resto de losparámetros y privilegios

4.- Se pulsa botón OK

Después :

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 32/71

 

Crear Tablas.......................

1.- Click sobre el nombre de la base de datos

2.- Se pulsa sobre signo + para expandir la estructura3.- Se hace doble click sobre Schemas y luego doble click

sobre public4.- Luego, botón derecho sobre Tables

5.- Y CLick sobre New Table...

6.- Se escribe nombre a la tabla y se selecciona un dueño (usuario)7.- En pestaña columns se pulsa botón add

7.1.- Se escribe nombre del campo y se selecciona un tipo de datos7.2.- Se escribe valor por default7.3.- Se indica si se desea Not Null (marcando la casilla de verificación)7.4.- Se pulsa botón OK

7.5.- Si desea otro campo, ir al paso 78.- Luego, en la pestaña constrains, se selecciona Primary Key y

se pulsa botón add8.1.- En pestaña columns, se selecciona el campo que sera clave primaria y

se pulsa botón add8.2.- Se pulsa OK a la ventana o dialogo

9.- Se pulsa OK en ventana principal

Finalmente :

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 33/71

 

 OTRA MANERA:

-- USANDO COMANDO CREATE ....

1.- Se pulsa sobre boton de barra de herramientasSQL (Execute arbitrary SQL query)

  2.- En la pestaña SQL Editor se escribe: 

create table datos_personales (

domicilio varchar(50) null,telefono numeric);

 

OTRO EJEMPLO: Crear una tabla “productos”

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 34/71

 

OTRO EJEMPLO: Crear una tabla productosusando Restricciones o“constraints”

CREATE TABLE productos (  codigo_barras bigint PRIMARY KEY NOT NULL,

descripcion varchar(40) NOT NULL,precio numeric (8, 2) NOT NULL CHECK (precio>0),costo numeric (8, 2) NOT NULL CHECK (costo>0),exist integer NULL CHECK (exist >= 0)

);

Ahora sí , “Que VenganLos Ejemplos”

Herencia

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 35/71

 

................Suponiendo que proveedores y clientes tienen los mismoscampos como datos personales, solo se crea la tabla con

algunos datos y el resto se hereda:

create table datos_personales (domicilio varchar(50) null, telefono numeric );

  create table proveedores (clave_pro integer PRIMARY KEY,razon_social varchar(50) NOT NULL

) INHERITS (datos_personales);

  create table clientes (clave_cli integer PRIMARY KEY,nombre varchar(50) NOT NULL,saldo float NOT NULL ) INHERITS (datos_personales);

 

Recordando ...

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 36/71

 

........................Funciones o Propiedades de un Campos (Constraints):

clave integer PRIMARY KEY 

id integer UNIQUE

descripcion NULL

precio numeric CHECK(precio>0)

  costo numeric UNIQUENOT NULL CHECK(costo<precio AND costo>0)

UNIQUE (precio, costo) -- ERROR deben ser integer 

 

Recordando ...

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 37/71

 

.........................Para El Manejo de LLaves (KEYS)

 

CREATE TABLE A (Aid integer PRIMARY KEY,

...

...

) ;CREATE TABLE B (

Bid integer PRIMARY KEY,Aid integer REFERENCES A (Aid),

Aid integer REFERENCES A ON DELETE CASCADE,......

) ;

Recordando ...

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 38/71

 

.........................Y Los Tipos De Datos

 

datetimeinterval

integer bigint

smallint

decimalnumeric

realdouble precision

serial

bigserialmoney

byteabit(n)

booleanfloat

char(n)

textcharacter(n)varchar(n)varying(n)

"char"

xml

Recordando ...

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 39/71

 

.........................Y Los Operadores

andor 

not+-

* /^

<>

>=<==<>

!=betweenlike

Vengan LosEjemplos

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 40/71

 

Ejemplos,Pues !!!

  Para agregar hora (time) y fecha (date)

puede utilizar el formato:

(date) (time)insert into ventas values( '20-01-2009', '12:30' );

Para Modificar y Eliminar Usando Fechas:

DELETE FROM ventas WHERE fecha='22-02-2010';

UPDATE ventas SET fecha='22-02-2010' , hora='13:30:25'

WHERE fecha = '20-01-2009';

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 41/71

 

 Y PARA LOS TIPOS ENUMERADOS :

Create TYPE mybinario AS ENUM ('F', 'V');

Create table BINARIOS (clave SERIAL primary key,

datos mybinario default 'V');

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 42/71

 

 Y PARA LOS ARREGLOS :

Create table AAA (datos integer [3] [3]

);

insert into AAA values( '{ {0,0,0},{1,1,1},{2,2,2} }' );

 Y PARA CLASES y OBJETOS :

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 43/71

 

  Las clases serían en este caso los create type .. AS,es decir, el tipo definido por el usuario que pueden ser equivalentes o similares a unas tablas.....

Y los objetos serian entonces, los campos de una tabla cuyotipo de datos no es uno primitivo, sino mas bien es de tipodefinido por el usuario...

-- clases

  CREATE TYPE alumnos AS ( matricula varchar(20),nombre varchar(50), carrera varchar(45),semestre varchar(5) ) ;

  CREATE TYPE maestros  AS ( cedula varchar(20),nombre varchar(50), carrera varchar(45),

semestre varchar(5) ) ; 

CREATE TABLE escuela ( clave serial primary key,estudiante alumnos, -- objetoprofes maestros  -- objeto

) ;

-- Para agregar y consultar se hace :

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 44/71

 

  insert into escuela (estudiante, profes)values (

('675849', 'cholillo' , 'informatica','5a') ,('342450', 'chuchita', 'agronomia' ,7b' ));

select * from escuela;

select (profes).nombre,(estudiante).nombre from escuela ;

-- Para eliminar o actualizar se puede usar:

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 45/71

 

UPDATE escuelaSET profes = ROW('valor1', … , 'valorN' )

WHERE (Condición) ;

UPDATE escuelaSET (profes).nombre = 'valor_dato'

WHERE (Condición) ;

Stored Procedureso Funciones

 Y Venga La

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 46/71

 

o Funciones

CREATE FUNCTION mostrar()RETURNS numeric AS $$

DECLAREnum numeric := 0;

BEGIN

RAISE NOTICE 'Num= %', num;select sum(saldo) into num from clientes;if not found then

RAISE NOTICE 'No se encontro';else

RAISE NOTICE 'Ok';end if;RETURN num;

END;

$$ LANGUAGE plpgsql;

Implementación !!!

-- En consola,

se invocaría así:select mostrar() ;

Permite mostrar el saldo detodos los clientes

Stored Procedures o Funciones

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 47/71

 

CREATE OR REPLACE FUNCTION ok()RETURNS numeric AS $$

DECLAREnum numeric := 0;

BEGIN  insert into clientes(nombre, saldo) values('chuchita', 2350.50);

insert into clientes(nombre, saldo) values('cholillo', 800);select mostrar() into num;return num;

END;$$ LANGUAGE plpgsql;

-- En consola,se invocaría así:

select ok ( ) ;

Inserta dos clientes y regresala suma de todos los saldos

Stored Procedures o FuncionesCREATE function mayor (a numeric b numeric)

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 48/71

 

CREATE function mayor (a numeric, b numeric)returns numeric as $$

DECLARE

c numeric := 0;BEGIN

if (a > b ) thenc:= a;

elseif (a = b) thenc:= -1;

elsec:=b;

end if;end if;return c;

END;

$$ LANGUAGE plpgsql;

-- En consola,se invocaría así:

select mayor(5, 6) ;select mayor(5, 5) ;

Regresa el número mayor entre a y b. Si son iguales,

Regresa -1

Stored Procedures o Funciones

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 49/71

 

CREATE function correr () returns text as $$DECLAREp numeric := 0;q numeric := 0;r numeric := 0;a varchar(50) ;

b varchar(50) ;BEGINselect nombre, saldo into a, p from clientes where nombre='chuchita';select nombre, saldo into b, q from clientes where nombre='cholillo';

select mayor (p, q) into r;

return 'chuchita vs. Cholillo: ' || a || ' > ' || b || ' ? : ' || r;END;$$ LANGUAGE plpgsql;

-- En consola, se invocaría así:

select correr ( ) ;Consulta nombre y saldo de dos

Clientes y Regresa Texto Indicando

Cual es el cliente con saldo mayor 

 Y Para Los TRIGGERSSe deben hacer funciones que regresen tipo trigger:

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 50/71

 

q g p gg

CREATE OR REPLACE FUNCTION visualizar()RETURNS TRIGGER AS $$

DECLARE filas clientes%ROWTYPE ;i clientes%ROWTYPE ;

BEGIN  -- muestra registros antes de agregar 

for i IN select * from clientesLOOP

RAISE NOTICE ' %', i;END LOOP;RAISE NOTICE ' Correcto' ;

-- obligatorio, porque sino, No agrega el dato nuevo,-- cuando se use UPDATE puede regresar RETURN NULL;

  RETURN NEW ;END;$$ LANGUAGE plpgsql;

-- Cuando sea invocada por algún Trigger, Mostrará

los clientes antes o despuésDe la operación, según se

Indique en el Trigger 

TRIGGERS

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 51/71

 

CREATE TRIGGER mostrar_trigger BEFORE INSERT ON clientes

FOR EACH ROW EXECUTE PROCEDURE visualizar();CREATE TRIGGER mostrar_trigger2

AFTER INSERT ON clientesFOR EACH ROW EXECUTE PROCEDURE visualizar();

-- En el primer caso, se mostrará el listado de clientes antes de

Agregar una tupla en dicha tabla. Y en el segundo caso, semostrará el listado de clientes después de haber agregado

Una tupla en la tabla clientes.

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 52/71

 

“Ejercicios Para PostgreSQLEjercicios Para PostgreSQL”

By

M.C. Edgar Rangel LugoDerechos Reservados(c) 2013. Edgar Rangel Lugo. México.

** Las imágenes de Chuchita y Cholillo son obras registradas por el autor de este documento.

Oye, ¿ “A poco” esosFueron los ejemplos ?

Pues según, perosi no te gustaron, ay

Te van estos ejercicios

EJERCICIO # 1: Crear tablas e insertar datos.Se muestra como crear tres tablas usando restricciones e insertar datos.

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 53/71

 

create table datos ( clave serial primary key,nombre varchar(50), edad integer check(edad>5),domicilio varchar(60) );

create table clientes ( cla_cli serial primary key,rfc varchar(50), saldo integer check(saldo>0)

) inherits (datos) ;

create table empleados ( clave_emp serial primary key,turno varchar(30), dias_trab integer check(dias_trab>=0)

) inherits (datos);

insert into datos(nombre, edad, domicilio)values('fausto lopez', 41, 'conocido');

insert into clientes (nombre, edad, domicilio, rfc, saldo)values('pancho lopez', 23, 'desconocido', '????', 1500.50 );

insert into clientes (nombre, edad, domicilio, rfc, saldo)

values('chuchita', 25, 'coyuca', '????', 2000 );

EJERCICIO # 2: Implementando UnProcedimiento Almacenado:

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 54/71

 

CREATE FUNCTION civa (saldo numeric, iva integer)

RETURNS numeric AS $$DECLARE

myiva numeric := 0;BEGIN

myiva := (saldo * iva) / 100;

RETURN myiva;END ;$$ LANGUAGE plpgsql ;

-- Utilizando El Procedimiento Almacenado :

SELECT civa (1500, 50) , civa (1500, 16) ;

SELECT nombre, saldo, civa(saldo, 15) from clientes;

select nombre, civa(edad, 15) from datos;

- Calcula el porcentaje de un

número, que en este caso, elporcentaje del Saldo.Caso práctico: El iva.

EJERCICIO # 3: Implementando OtroProcedimiento Almacenado:

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 55/71

 

  CREATE FUNCTION esonoes (edad integer)RETURNS text AS $$

DECLAREcadena text ;BEGIN

cadena := 'No Se detecto';IF (edad >=18 ) THEN

cadena := 'Mayor de Edad';

ELSEcadena := 'Menor de Edad';

END IF;RETURN cadena;

END ;$$ LANGUAGE plpgsql ;

-- Utilizando El Procedimiento Almacenado :

insert into datos(nombre, edad, domicilio) values('pepito',16,'X'); 

select nombre, esonoes(edad) from datos order by nombre desc;

- Se indica la edad de laPersona (datos_personales), y

La función informa si esMayor o menor de edad.

EJERCICIO # 4: Crear TIPOS e insertar datos.Se crean dos tipos y luego una tabla con dos campos de TYPE. Después se insertandatos en la tabla y se muestra como dentro de un campo aparecen varios valores.

CREATE TYPE l AS (

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 56/71

 

CREATE TYPE alumnos AS (matricula varchar(50), nombre varchar(50),carrera varchar(50) ) ;

CREATE TYPE maestros AS (cedula varchar(50), nombre varchar(50),grado_academico varchar(50) ) ;

CREATE TABLE escuela (clave serial primary key, -- es un campoestudiantes alumnos, -- es un objetoprofesores maestros -- es un objeto

) ;insert into escuela (estudiantes, profesores) values( ('2010990', 'agripino','biologia' ) , ('02934', 'jirafales', 'ing.') );

insert into escuela (estudiantes, profesores) values( ('5670977', 'fandila','contaduria' ) , ('02934', 'jirafales', 'ing.') );insert into escuela (estudiantes, profesores) values( ('11120909', 'chuchita','contaduria' ) , ('12934', 'juan lopez', 'dr.') );insert into escuela (estudiantes, profesores) values( ('789000', 'cholillo','biologia' ) , ('12934', 'juan lopez', 'dr.') );

select * from escuela ;

EJERCICIO # 5: Listando Datos Con TIPOS .Partiendo del ejemplo anterior, se muestra como listar tablas concampos de TYPE.

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 57/71

 

p

select (estudiantes).nombre, (estudiantes).carrera ,(profesores).nombre from escuela

where (profesores).nombre like '%ales%' ;

-- TAREA: CHECAR SI ESTO NO TIENE ERROR: select (estudiantes).nombre, (estudiantes).carrera

from escuela where (profesores).nombre = 'jirafales';

select (profesores).nombre, (profesores).grado_academicofrom escuela where (estudiantes).nombre = 'agripino';

select (profesores).nombre, (profesores).grado_academicofrom escuela where (estudiantes).nombre = 'chuchita';

select (estudiantes).nombre, (estudiantes).carrerafrom escuela where (profesores).nombre = 'juan lopez';

EJERCICIO # 6: Otro Ejemplo De TIPOSSe crea un TYPE y una tabla con dicho tipo y se insertando datos.

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 58/71

 

CREATE TYPE proveedores AS (cla_pro integer, nombre varchar(50),

domicilio varchar(50), telefono varchar(50) ) ;CREATE TABLE productos (

clave serial primary key, codigo_barras numeric not null,descripcion varchar(50), costo numeric check(costo>0),

precio numeric check(precio>0), existencias integer default '0',proveedor proveedores ) ;

insert into productos (codigo_barras, descripcion, costo, precio, existencias,proveedor ) values (203948 , 'fab' , 4, 10.50, 10, (111, 'Blanca Nieves', 'suc.indep.', '01-747-1234565'));

insert into productos (codigo_barras, descripcion, costo, precio, existencias,proveedor ) values (345679 , 'aceite' , 8, 20.50, 5, (112, 'oleico', 'reforma', '01-722-222333'));

insert into productos (codigo_barras, descripcion, costo, precio, existencias,proveedor ) values (203948 , 'rufles' , 1, 5, 4, (211, 'sabritas', 'c. brazil # 21', '01-

55-59234565'));

EJERCICIO # 7: Otro Procedimiento AlmacenadoCREATE FUNCTION es o no bajo (existencias integer)

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 59/71

 

CREATE FUNCTION es_o_no_bajo (existencias integer)RETURNS text AS $$

DECLARE

cadena text ;BEGIN

cadena := 'Se desconoce estado';IF (existencias>5) THEN

cadena:= 'Perfecto';

ELSEcadena:= 'Bajo en Existencias';

END IF;RETURN cadena ;END ;

$$ LANGUAGE plpgsql ;

select descripcion, existencias,es_o_no_bajo(existencias) from productos;

 

- Partiendo del ejemplo

anterior, se implementauna función para saber si un producto está bajo

en existencias.

EJERCICIO # 8: Usando TRIGGERSCREATE OR REPLACE FUNCTION listar ()

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 60/71

 

CREATE OR REPLACE FUNCTION listar ()RETURNS TRIGGER AS $$

DECLARE

filas clientes%ROWTYPE ;actual clientes%ROWTYPE ;

BEGINFOR actual IN select * from clientesLOOP

RAISE NOTICE ' % ' , actual ;END LOOP;

RETURN OLD ;END ;$$ LANGUAGE plpgsql ;

CREATE TRIGGER trigger_listaBEFORE DELETE ON clientes

FOR EACH ROW EXECUTE PROCEDURE listar () ;

 – Permite Listar losClientes antes de ser 

Eliminados de la

base de datos.

EJERCICIO # 9: Otro Ejemplo Similar Create or replace function listar() returns trigger as $$

declare

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 61/71

 

declarefilas productos%rowtype;actual productos%rowtype;

beginraise notice ' Producto Exis Status ' ;

for actual in select * from productosloopraise notice ' % % % ', actual.descripcion ,

actual.existencias , es_o_no_bajo(actual.existencias) ;end loop;

return OLD ;end;

$$ language plpgsql;

create trigger trigger_listabefore delete on productos

for each row execute procedure listar(); 

delete from productos where descripcion like '%ru%';

delete from productos;

 – Permite Listar losproductos antes de ser 

Eliminados de la

base de datos.

EJERCICIO # 10: Otro “Ejemplito”Crear función que permita mostrar ganancias a c/u de los productos

create function

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 62/71

 

create functionganancias (costo numeric, precio numeric)

returns numeric as $$declareganancia numeric:=0;

beginganancia:= precio-costo;

return ganancia;end;$$ language plpgsql;

select descripcion,precio, costo,

ganancias(costo, precio)from productos ;

 – Indicando el costo yPreciola funciónRegresa la resta, que

Refiere a las gananciasPara ese producto.

EJERCICIO # 11: Otro “Ejercicito”Crear tabla llamada respaldo cuya estructura sea la misma que productos. Y crear trigger que respalde todos los productos en la tabla respaldo antes de insertar datos en productos

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 63/71

 

Create table respaldo ( clave serial primary key,codigo_barras numeric not null, descripcion varchar(50),

costo numeric check(costo>0),precio numeric check(precio>0),existencias integer default '0', proveedor proveedores );

CREATE OR REPLACE FUNCTION respaldar () RETURNS TRIGGER AS $$BEGIN

delete from respaldo;INSERT INTO respaldo select * from productos ;

RETURN NEW ;END ;$$ LANGUAGE plpgsql ;

CREATE TRIGGER mytrigger3BEFORE INSERT ON productosFOR EACH ROW EXECUTE PROCEDURE respaldar () ;

insert into productos(codigo_barras, descripcion, costo, precio, existencias,proveedor) values (12905, 'cafe legal', 7.50, 18.30, 10, (1234, 'nestle', 'ninguno','01-34-567-89') ); select * from respaldo; select * from productos;

MÁS EJERCICIOS DE TAREA

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 64/71

 

Hacer un trigger que permita respaldar los datos en una tabla llamada backup

antes de eliminar productos

Hacer trigger que despuésde actualizar datos en productos,

muestre un listado de losvalores que tenían los registros

antes de su actualización

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 65/71

 

Oye, ¿ Y esto que vienePara qué ?

Pues “quien sabe”,De que le entiendan los

Estudiantes delM.C. Edgar Rangel Lugo

ADICIONALESADICIONALES

OTRA PRÁCTICAOTRA PRÁCTICA

create table proveedores (

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 66/71

 

create table proveedores (id_proveedor numeric primary key,

nombre text, domicilio text, telefono numeric);

create table productos (codigo numeric primary key,

id_proveedor numeric, descripcion text,precio numeric, costo numeric,existencias numeric,foreign key (id_proveedor) references proveedores(id_proveedor) on delete cascade on update cascade);

create table respaldo (codigo numeric primary key,id_proveedor numeric, descripcion text, precio numeric,costo numeric, existencias numeric);

-- ------------------------------------------------------------------------------- ESTE EJEMPLO ELIMINA TODO DE RESPALDO Y LO VUELVE A COPIAR-- -----------------------------------------------------------------------------

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 67/71

 

create or replace function respaldando () returns trigger as $$

declare-- Solo si se desea mostrarlos antes del respaldo-- actual productos%ROWTYPE ;

begin-- Solo si se desea mostrarlos antes del respaldo-- for actual in select * from productos

-- loop-- raise notice '% % %', actual.codigo , actual.id_proveedor,actual.descripcion ;

-- end loop;delete from respaldo ;insert into respaldo select * from productos ;return OLD ;

end ;$$ language plpgsql ;

create trigger respaldo4 before delete on proveedoresfor each row execute procedure respaldando () ;

-- -------------------------------------------------------------------------------- OTRO EJEMPLO QUE NO ELIMINA LO QUE HAY EN RESPALDO, SOLO COPIA LO NUEVO

-- QUE SE HA ELIMINADO EN CASCADA ...

-- ------------------------------------------------------------------------------

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 68/71

 

create or replace function respaldando () returns trigger as $$declare

actual productos%ROWTYPE ;begin-- Solo si se desea mostrarlos antes del respaldofor actual in select * from productos

where id_proveedor = OLD.id_proveedor loop

raise notice '% % %', actual.codigo ,actual.id_proveedor, actual.descripcion ;end loop;

-- delete from respaldo ;insert into respaldo select * from productos

where id_proveedor = OLD.id_proveedor ;return OLD ;

end ;$$ language plpgsql ;

create trigger respaldo5 before delete on proveedoresfor each row execute procedure respaldando () ;

insert into proveedores (id_proveedor, nombre, domicilio, telefono)values (01, 'Lala','-',7671010011) ;insert into proveedores (id_proveedor, nombre, domicilio, telefono)

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 69/71

 

values (02, 'Alpura','-',7671010022) ;insert into proveedores (id_proveedor, nombre, domicilio, telefono)

values (03, 'Sabritas','-',7671010023) ;insert into proveedores (id_proveedor, nombre, domicilio, telefono)values (04, 'Coca-Cola','-',7671010111) ;insert into proveedores (id_proveedor, nombre, domicilio, telefono)values (05, 'Bimbo','-',7671010010) ;

insert into productos (codigo, id_proveedor, descripcion, precio, costo,existencias ) values (0001, 01 , 'Flan', 10 , 7 , 5) ;

insert into productos (codigo, id_proveedor, descripcion, precio, costo,existencias ) values (0002, 01 , 'Leche', 15 , 11 , 5) ;

insert into productos (codigo, id_proveedor, descripcion, precio, costo,existencias ) values (0003, 05 , 'Donitas', 10 , 7 , 5) ;

insert into productos (codigo, id_proveedor, descripcion, precio, costo,existencias ) values (0004, 05 , 'Pan Integral', 12 , 8 , 5) ;

create or replace functionganancia (precio numeric, costo numeric) returns numeric as $$

declarei 1 i 0

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 70/71

 

ganancia1 numeric := 0 ;begin

ganancia1 = precio - costo ;return ganancia1 ;end;$$ language plpgsql ;

create view v_existencias as select id_proveedor, codigo, descripcion,existencias from productos order by id_proveedor ; create view v_ganancias as select id_proveedor, codigo, descripcion, precio,costo, ganancia (precio,costo) from productos order by id_proveedor ;

select * from v_existencias ;

select * from v_ganancias ;

delete from proveedores where id_proveedor = 5 ;

delete from proveedores where id_proveedor = 5 ; -- Para el Caso 2

7/16/2019 4 Diapositivas MC Edgar

http://slidepdf.com/reader/full/4-diapositivas-mc-edgar 71/71

 

“FinFin”

Por fin !!! Creí queEsto ya no acababa

Pues yo ni sentí Pasar el tiempo