SECUENCIA
Crea un objeto capaz de darnos números
consecutivos únicos.
CREATE
SEQUENCE secuencia
INCREMENT BY n
START WITH n
{CYCLE | NOCYCLE}
{CACHE N | NOCACHE}
{ORDER | NOORDER};
En realidad es un generador de identificadores
únicos que no bloquea transacciones.
Es muy útil para generar primary keys.
EJEMPLO: crea una secuencia de nombre ID,
que se utilizara para la clave primaria de tabla ALUMNO
CREATE SEQUENCE ID
INCREMENT BY 1 // se incrementara en 1
START WITH 1 // se iniciara en 1
NOMAXVALUE // sin valor máximo o tope
NOCYCLE // no
cycle, no es un ciclo
NOCACHE ; // no
cache, para no perder números
Si no nos gusta
perder números usamos NOCACHE.
INCREMENT BY 1 NOCACHE;
Si nos interesa la
velocidad:
INCREMENT BY 1 CACHE 20;
Así obtenemos el
siguiente valor:
NEXTVAL
-------------> Siguiente numero en la secuencia
CURRVAL
-------------> Ultimo numero generado
También podemos
obtener el valor actual:
MODIFICAR SECUENCIA:
Se
modifica secuencia creada cambiando el incremento de 1 a 20 y valor máximo a
999999
alter
sequence ID
increment by 20
maxvalue 999999
nocache
nocycle;
DONDE
SE PUEDE USAR UNA SECUENCIA:
- Clausula VALUES de la instrucción INSERT
- Clausula SET de la instrucción UPDATE
- Clausula SELECT de la instrucción SELECT
DONDE NO SE PUEDE USAR:
- Clausulas DISTINCT, GROUP BY, ORDER BY, WHERE de la instrucción SELECT
- Clausula VALUES de la instrucción INSERT
- Clausula SET de la instrucción UPDATE
- Clausula SELECT de la instrucción SELECT
DONDE NO SE PUEDE USAR:
- Clausulas DISTINCT, GROUP BY, ORDER BY, WHERE de la instrucción SELECT
- Valor por defecto de una columna
PARA
ELIMINAR UNA SECUENCIA UTILIZAMOS EL COMANDO DROP:
- DROP
SEQUENCE ID;
INDICES
Los índices se usan para mejorar el
rendimiento de las operaciones sobre una tabla.
En general mejoran el rendimiento las SELECT y
empeoran (mínimamente) el rendimiento de los INSERT
y los DELETE.
Una vez creados no es necesario nada
más, Oracle la usa cuando es posible
En Oracle existen tres tipos de índices:
1)Table Index:
CREATE
[UNIQUE|BITMAP] INDEX [esquema.]index_name
ON [esquema.]table_name [tbl_alias]
(col [ASC | DESC]) index_clause
index_attribs
2)Bitmap Join Index:
CREATE
[UNIQUE|BITMAP] INDEX [esquema.]index_name
ON [esquema.]table_name [tbl_alias]
(col_expression [ASC | DESC])
FROM [esquema.]table_name
[tbl_alias]
3)Cluster Index:
CREATE
[UNIQUE|BITMAP] INDEX [esquema.]index_name
ON CLUSTER [esquema.]cluster_name
index_attribs
las index_clauses
posibles son:
LOCAL STORE
IN (tablespace)
LOCAL STORE
IN (tablespace)
(PARTITION [partition
[LOGGING|NOLOGGING]
[TABLESPACE {tablespace|DEFAULT}]
[PCTFREE int]
[PCTUSED int]
[INITRANS int]
[STORE IN {tablespace_name|DEFAULT]
[SUBPARTITION [subpartition [TABLESPACE
tablespace]]]])
LOCAL
(PARTITION [partition
[LOGGING|NOLOGGING]
[TABLESPACE {tablespace|DEFAULT}]
[PCTFREE int]
[PCTUSED int]
[INITRANS int]
[STORE IN {tablespace_name|DEFAULT]
[SUBPARTITION [subpartition [TABLESPACE
tablespace]]]])
GLOBAL
PARTITION BY RANGE (col_list)
( PARTITION partition VALUES LESS THAN
(value_list)
[LOGGING|NOLOGGING]
[TABLESPACE {tablespace|DEFAULT}]
[PCTFREE int]
[PCTUSED int]
[INITRANS int]
INDEXTYPE IS
indextype [PARALLEL int|NOPARALLEL] [PARAMETERS ('ODCI_Params')]
{Esto es solo para table index, no para bitmap join
Index}
Y además
index_attribs puede ser cualquier combinación de los siguientes:
NOSORT|SORT
REVERSE
COMPRESS int
NOCOMPRESS
COMPUTE
STATISTICS
[NO]LOGGING
ONLINE
TABLESPACE
{tablespace|DEFAULT}
PCTFREE int
PCTUSED int
INITRANS int
MAXTRANS int
STORAGE storage_clause
PARALLEL
parallel_clause
Si usamos la opcion PARALLEL esta debe
estar al final.
create index es una de las pocas
sentencias que pueden usar nologging option.
create index requiere un segmento
temporal si no hay espacio en memoria suficiente.
Crear indices basados en funciones
require que query_rewrite_enabled este a true y query_rewrite_integrity este a
trusted.
Un ejemplo de
indices basados en funciones para busquedas en mayusculas:
SINONIMOS
Crea un sinónimo para algún objeto de
la base de datos.
FOR [esquema.]objeto [@dblink]
Con la opción 'PUBLIC' se crea un sinónimo
público accesible a todos los usuarios, siempre que tengan los privilegios
adecuados para el mismo.
Sirve para no tener que usar la
notación 'esquema.objeto' para referirse a un objeto que no es propiedad de
usuario.
Crea un nombre abreviado a la vista
PROGRAMADOR.T_PEDIDOS:
CREATE PUBLIC SYNONYM T_PEDIDOS
FOR PROGRAMADOR.T_PEDIDOS;
No es necesario recompilarlos cuando se
redefinen las tablas, de hecho puedes existir sin que exista el objeto al que referencian.
El acceso es un poco más eficiente
cuando se accede por sinónimos públicos.
Cuando en una sentencia no citamos el
nombre del esquema, Oracle resuelve los nombres en el siguiente orden:
·
usuario actual
·
private synonym
·
public synonym
También podemos usarlo para cambiar el
objeto que usamos sin tener que cambiar la programación.
Así cambiamos la
tabla:
CREATE PUBLIC SYNONYM T_PEDIDOS FOR
PROGRAMADOR.T_PEDIDOS_PRUEBA;
Borrar un sinónimo:
DROP SYNONYM T_PEDIDOS;