p2_secuencias

5
Taller de Bases de Datos Secuencias Una secuencia es un objeto de b ase de datos que permite generar valores numéricos enteros. Es posible crear secuencias y posteriormente utilizarlas para generar números. - Puede generar automáticamente una secuencia de números. - Es un objeto compartido - Puede ser utilizado para crear valores de una llave primaria - Remplaza aplicaciones de código Sintaxis PostgreSQL CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table.column | NONE } ] Donde: sequence Es el nombre de la secuencia o generador. INCREMENT BY n Especifica el intervalo entre números de la secuencia, donde n es un entero (Si se omite esta clausula, la secuencia se incrementará en 1). START WITH n Especifica el primer número de la secuencia a ser generado, donde n es un entero (Si se omite esta clausula, la secuencia iniciará en 1). MAXVALUE n Especifica el valor máximo que una secuencia puede generar NOMAXVALUE Especifica un valor máximo de 10^27 para secuencias ascendentes, y -1 para una secuencia descendente (Default) MINVALUE n Especifica el valor mínimo de una secuencia NOMINVALUE Especifica un valor mínimo de 1 para seceuncias ascendentes y -(10^27) para secuencias desendentes.

Upload: tono-perez

Post on 16-Jul-2015

114 views

Category:

Documents


0 download

TRANSCRIPT

5/14/2018 P2_Secuencias - slidepdf.com

http://slidepdf.com/reader/full/p2secuencias 1/5

Taller de Bases de Datos

Secuencias

Una secuencia es un objeto de base de datos que permite generar valores numéricos enteros.Es posible crear secuencias y posteriormente utilizarlas para generar números.

- Puede generar automáticamente una secuencia de números.- Es un objeto compartido- Puede ser utilizado para crear valores de una llave primaria- Remplaza aplicaciones de código

Sintaxis

PostgreSQL

CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ][ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ][ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]

[ OWNED BY { table.column | NONE } ]

Donde:

sequence

Es el nombre de la secuencia o generador.

INCREMENT BY nEspecifica el intervalo entre números de la secuencia, donde n es un entero(Si se omite esta clausula, la secuencia se incrementará en 1).

START WITH nEspecifica el primer número de la secuencia a ser generado, donde n es un entero(Si se omite esta clausula, la secuencia iniciará en 1).

MAXVALUE n

Especifica el valor máximo que una secuencia puede generar

NOMAXVALUEEspecifica un valor máximo de 10^27 para secuencias ascendentes, y -1 para unasecuencia descendente (Default)

MINVALUE nEspecifica el valor mínimo de una secuencia

NOMINVALUEEspecifica un valor mínimo de 1 para seceuncias ascendentes y -(10^27) para

secuencias desendentes.

5/14/2018 P2_Secuencias - slidepdf.com

http://slidepdf.com/reader/full/p2secuencias 2/5

Taller de Bases de Datos

CYCLE/ NOCYCLEEspecifica su una secuencia continuara en su valor inicial tras alcanzar el límite de

números que puede generar.

CACHE/NO CACHEEspecifica cuantos valores prealocará el servidor en memoria.

Ejemplo PostgreSQL:

CREATE SEQUENCE dept_deptid_seqINCREMENT BY 10START 120MAXVALUE 9999NO MINVALUE

CACHE 1NO CYCLE;

Consulta: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html 

Uso de Secuencias

Tras crear una secuencia, esta puede generar valores secuenciales para su uso en tablas. Parareferenciar, manipular los valores de una secuencia existen:

En PostgreSQL:

NEXTVAL Siguiente valor de la secuencia.CURRVAL Último valor entregado por NEXTVAL (Valor actual de la secuencia)LASTVAL Último valor entregado por NEXTVAL (Solo dentro de la sesión actual)SETVAL Coloca un valor a la secuencia y define su comportamiento.

PostgreSQL los implementa mediante funciones que regresan valores enteros a las que sedebe especificar la secuencia como parámetro (excepto lastval).

Ejemplos:

currval('dept_deptid_seq')lastval()nextval('dept_deptid_seq')

Adicionalmente PostgreSQL provee una función que permite redefinir el valor de unasecuencia, así como su comportamiento, mediante varios parámetros:

setval('sequence', bigint, boolean);

5/14/2018 P2_Secuencias - slidepdf.com

http://slidepdf.com/reader/full/p2secuencias 3/5

Taller de Bases de Datos

Donde:

sequenceEs la secuencia a redefinir.

bigintEs el nuevo currval para sequence

booleanSi true especifica que nextval incrementará primero el valor de la secuencia antesde regresarlo y viceversa si es false.

Ejemplo:

SELECT setval('foo', 42, true); Nextval regresará 43

SELECT setval('foo', 42, false); Nextval regresará 42

Las secuencias pueden utilizarse como:

  Valores para una columna en alguna selección.

SELECT nextval('employees_seq');

  Valores en una inserción.

INSERT INTO order_items (order_id, line_item_id, product_id)

VALUES (nextval('orders_seq'), 1, 2359);

INSERT INTO order_items (order_id, line_item_id, product_id)VALUES (currval('orders_seq'), 2, 3290);

  Valores para una actualización

UPDATE order_items SET order_id=nextval('orders_seq') WHERE order_id=13;

Consulta: http://www.postgresql.org/docs/8.4/static/functions-sequence.html 

 ALTER SEQUENCE

ALTER SEQUENCE permite cambiar la definición de una secuencia.

Sintaxis

ALTER SEQUENCE name [ INCREMENT [ BY ] increment ][ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ][ START [ WITH ] start ][ RESTART [ [ WITH ] restart ] ][ CACHE cache ] [ [ NO ] CYCLE ]

5/14/2018 P2_Secuencias - slidepdf.com

http://slidepdf.com/reader/full/p2secuencias 4/5

Taller de Bases de Datos

[ OWNED BY { table.column | NONE } ]ALTER SEQUENCE name OWNER TO new_ownerALTER SEQUENCE name RENAME TO new_nameALTER SEQUENCE name SET SCHEMA new_schema

Ejemplo PostgreSQL:

ALTER SEQUENCE customers_seqMAXVALUE 1500NO MINVALUECYCLEINCREMENT 5;

Consulta: http://www.postgresql.org/docs/8.4/static/sql-altersequence.html 

Secuencias como expresión DEFAULT

En PostgreSQL es posible especificar nextval como valor por defecto de una columna, es decircomo expresión para la sentencia DEFAULT ya sea al crear o alterar una tabla.

Ejemplo PostgreSQL:

CREATE TABLE distributors (did integer PRIMARY KEY DEFAULT nextval('serial'),name varchar(40) NOT NULL

);

Práctica

Genere y guarde en un archivo llamado P2_Secuencias_NombreApellido las instruccionesutilizadas en cada una de los siguientes pasos para lo realizado en el manejador PostgreSQL.

1.  Cree Secuencias con los siguientes parámetros:

(CREATE SEQUENCE)

Nombre Incremento Inicio Max Min Cyclico Caché

DEPARTMENTS_SEQ 15 28 199900 1 Si No

DEPT_TABLE_SEQ 17 40 110000 1 Si No

EMPLOYEES_SEQ 12 20 999999999 1 No Si

LOCATIONS_SEQ 110 330 199000 1 No Si

5/14/2018 P2_Secuencias - slidepdf.com

http://slidepdf.com/reader/full/p2secuencias 5/5

Taller de Bases de Datos

2. Inserte al menos dos tuplas en las siguientes tablas y asigne como id el siguiente valor de

la secuencia indicada.

Tabla id Secuencia

DEPARTMENTS DEPARTMENT_ID DEPARTMENTS_SEQ 

EMPLOYEES EMPLOYEE_ID EMPLOYEES_SEQ LOCATIONS LOCATION_ID LOCATIONS_SEQ 

3. Elimine la secuencia DEPT_TABLE_SEQ 

4. Realice las acciones necesarias para que las secuencias sirvan como valor por defecto de

las tablas asociadas.

5. Inserte una tupla en las tablas, sin especificar la columna ID y verifique que se asigne el

valor especificado en el default.

6. Modifique las secuencias para que se ajusten a los siguientes parámetros

(ALTER SEQUENCE)

Nombre Incremento Inicio Max Min Cyclico Cache

DEPARTMENTS_SEQ 10 280 9990 1 No No

DEPT_TABLE_SEQ 10 400 1000 1 No No

EMPLOYEES_SEQ 1 207 999999999 1 No No

LOCATIONS_SEQ 100 3300 9900 1 No No

7. Solicite revisión por parte del profesor.