You are on page 1of 9

Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro.

1
CI3315 Enero-Abril 2002 Oracle y SQL

El Manejador de Bases de Datos Relacionales ORACLE


Como la segunda empresa vendedora de software a nivel mundial, ORACLE provee una
plataforma completa para desarrollar aplicaciones que utilicen el recurso dato. Algunas de
las herramientas que provee son las siguientes:
• Un servidor de datos llamado ORACLE que permite almacenar y manipular datos de
diferente índile (imágenes, sonidos, texto, caracteres, números, etc.). Hoy en día la
última versión del servidor de datos es la 9i. Nosotros utilizaremos la versión 8i y
específicamente la versión 8.1.6 para el sistema de operación Linux.
• Un entorno de edición en línea que incorpora un intérprete de SQL, llamado SQL*PLUS.
• Un lenguaje procedimental que permite utilizar estructuras de control y variables para
elaborar programas que accedan a la base de datos donde se pueda utilizar comandos
SQL, conocido como PL/SQL (Procedural Language for SQL). Este lenguaje es
reconocido y procesado también por SQL*PLUS.
• Una serie de bibliotecas para la programación utilizando otros lenguajes. Esta biblioteca
conocida como OCI (Oracle Call Interfaces) fue la solución inicial al problema de
desarrollar sistemas cliente/servidor. Hoy en día ORACLE provee una biblioteca
propietaria de funciones para realizar comunicación con servidores de datos utilizando
Java, la cual es conocida como JDBC (Java Database Connection).
• Una serie de pre-procesadores (pre-compiladores) de SQL embebido, que constituyó la
primera solución al problema de desarrollar programas para bases de datos. Existieron
pre-compiladores que aceptaban instrucciones en un lenguaje de programación particular
de tercera generación (en el caso de ORACLE los lenguajes ofrecidos era ADA, PL/I,
COBOL, FORTRAN y C) junto con instrucciones del lenguaje SQL. Estas herramientas
eran conocidas como Pro*ADA, Pro*PL/I, Pro*COBOL, Pro*Fortran y Pro*C.
• Extensiones específicas al intérprete del lenguaje SQL para soportar nuevas
tecnologías. En este apartado vale la pena destacar SQLJ como un lenguaje que admite
el uso simultáneo del lenguaje Java y de SQL.
• Todo un grupo de herramientas basadas en lenguajes de cuarta generación y tecnología
CASE destinadas a asistir a los diseñadores y programadores en la tarea de desarrollar
grandes aplicaciones. Las versiones actuales de estas herramientas se conocen como
ORACLE/Designer y ORACLE/Developer.
• Toda una serie de herramientas destinadas a ayudar al administrador de la base de
datos en sus tareas cotidianas. En este apartado la herramienta más importante es OEM
(Oracle Enterprise Manager).

De todas estas herramientas, en el taller del curso se hará uso del servidor de datos y del
entorno de edición y procesamiento SQL*PLUS.

ACCEDIENDO A LOS SERVICIOS DE SQL*PLUS

En un entorno en el que los computadores utilizados no poseen específicamente ní el DBMS ni


clientes específicos para acceder al DBMS se deberá acceder directamente al servidor en el

Página 1 de 9
Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro. 1
CI3315 Enero-Abril 2002 Oracle y SQL

que se ejecutan los procesos del DBMS. En nuestro caso particular, para hacer la conexión a
SQL*Plus será necesario conectarse al servidor de bases de datos (sholem.ldc.usb.ve).

ORACLE permite asociar a cada usuario una cuenta diferente a que éste utiliza para acceder
a los servicios del sistema de operación, aún cuando dependiendo de las políticas de
administración de la base de datos se puede configurar el DBMS para que se utilicen sólo las
cuentas del sistema de operación (autenticación basada en el sistema de operación). En
nuestro caso particular Ud. poseerá una cuenta de usuario distinta a la cuenta que Ud. posee
para acceder a los servicios del Laboratorio Docente.

Para establecer una sesión con SQL*PLUS se ejecuta el programa sqlplus. Entre sus formas
de invocación, el programa admite las siguientes:
• sqlplus, que accede al programa para solicitar servicios al DBMS. Al ejecutar este
comando se le pedirá el nombre del usuario que desea conectarse y su contraseña.
• sqlplus <loginname>, que permite conectar al usuario <loginname> a SQL*PLUS, para así
acceder a los servicios del DBMS. Al ejecutar este comando se le pedirá la contraseña
del usuario ORACLE (aquella cuyo nombre de usuario es <loginname>).
• sqlplus <loginname>/<password>, que permite conectar al usuario <loginname> con
contraseña <password> a SQL*PLUS, para así acceder a los servicios del DBMS.

Si la conexión ha sido exitosa se podrá observar el mensaje del intérprete de SQL

SQL>

Si la conexión no ha sido exitosa se indicará el error respectivo. En caso de conexiones


fallidas por errores en el nombre del usuario o en la contraseña, el programa solicitará tres
veces la entrada de esta información y luego abortará.

¿Cómo cambiar la contraseña de un usuario?

Todo usuario que posee una cuenta en ORACLE que no se gestiona a través de los servicios
de seguridad del sistema de operación puede cambiar su contraseña. El comando del lenguaje
de control de datos que permite realizar esta operación es

ALTER USER <loginname> IDENTIFIED BY <newPassword>;

Ud. podrá ejecutar esta operación desde la línea de comandos de SQL*PLUS.

¿Cómo salir de SQL*Plus?

El comando QUIT de SQL*PLUS permite finalizar la sesión activa en el intérprete de SQL.


En tal sentido

SQL> quit;

Página 2 de 9
Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro. 1
CI3315 Enero-Abril 2002 Oracle y SQL

le permitirá salir del intérprete de SQL y regresar al intérprete de comandos del sistema
de operación.
¿Qué puede hacerse con SQL*Plus?

SQL*PLUS puede ser utilizado para ejecutar cualquier comando del lenguaje de definición,
manipulación o control de datos de SQL. La versión que Ud. utilizará la permitirá ejecutar
cualquier instrucción definida en el estándar SQL2 (las que utilizaremos en este curso) más
todas aquellas operaciones específicas de PL/SQL.

Adicionalmente SQL*PLUS ofrece una serie de facilidades para la edición de comandos. En


el manual en línea de SQL*PLUS que Ud. conseguirá en la página del curso podrá aprender
como aprender y explotar todas las facilidades que ofrece la herramienta.

El Lenguaje Estructurado de Consultas SQL

Los sistemas manejadores de bases de datos que implementan el modelo de datos relacional
efectúan operaciones de creación de estructuras, consulta, inserción, eliminación y control
de datos utilizando un lenguaje llamado SQL ( Lenguaje Estructurado de Consultas –
“Structured Query Language” -). Este lenguaje se basa en dos de los formalismos que se han
descrito para especificar operaciones del modelo relacional (álgebra relacional y cálculo
relacional de tuplas).

SQL, como lenguaje de programación, posee diferentes dialectos o variaciones. Sin embargo
existen dos grandes estándares a los que se ciñen los manejadores de bases de datos. Estos
estándares son:
• ANSI SQL, que fue propuesto por el Instituto de estándares nacionales americanos
(ANSI).
• Una actualización del estándar ANSI SQL propuesto en 1992 y conocido como SQL-92 o
SQL2.

Con la evolución del modelo relacional para manejar características propias del paradigma de
orientación por objeto (conocido como enfoque post-relacional u objeto-relacional), así como
para la descripción de condiciones dinámicas que rigen la evolución de los datos y el
almacenamiento de programas; hoy en día existe un esfuerzo de consolidación y adopción de
un nuevo estándar conocido como SQL3. Sin embargo, las herramientas comerciales ofrecen
algunas de las características novedosas incluidas en este estándar.

Página 3 de 9
Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro. 1
CI3315 Enero-Abril 2002 Oracle y SQL

La Implementación del Lenguaje de Definición de Datos de SQL en


ORACLE

Desde un punto de vista netamente relacional, ORACLE implementa una versión de SQL
totalmente compatible con el estándar ANSI SQL, pero agrega algunas características
propias de otros estándares como SQL2 e inclusive SQL3. En realidad el DBMS posee
características propias de otros modelos de datos (en particular del modelo objeto-
relacional o post-relacional) que no se discuten en este curso.

Entre los diferentes tipos de objetos que ORACLE permite definir y manipular son:
• Tablas: Implementan el concepto de relación del modelo relacional. Toda tabla está
conformada por una serie de columnas (implementan el concepto de atributo). Cada
columna posee un nombre, un tipo de datos y dependiendo del tipo de datos una longitud.
Dos diferencias fundamentales entre el modelo relacional y la implantación de éste en
ORACLE son:
o Si no se definen restricciones de integridad de identidad, en una tabla pueden
existir filas (tuplas) con los mismos valores para todas sus columnas.
o A pesar de que físicamente se establece un orden entre las tuplas, a nivel lógico el
usuario no es capaz de determinar tal orden.

• Vistas: Constituyen una especie de “tablas virtuales”, es decir tablas que no existen
físicamente sino que son generadas automáticamente cuando se accede a ellas. Una vista
puede ser definida a través de una operación de consulta sobre una o más tablas o vistas
de la base de datos.

• “Constraints”: Constituyen el mecanismo primordial para especificar ciertas reglas que


deben cumplir los datos almacenados en la base de datos. En un sentido amplio, esta
construcción está relacionada con aquellas restricciones de integridad derivadas del
esquema relacional que se implanta en el DBMS. Por lo tanto, esta construcción puede ser
utilizada para definir restricciones de integridad de identidad, restricciones de
integridad referencial, restricciones de dominio en las columnas de una tabla o inclusive
ciertas restricciones explícitas. Esta construcción se basa en asociar una expresión
declarativa que siempre deberá ser cierta en el contexto de la tabla donde se define.

• Sinónimos: Permiten definir referencias directas a un objeto de la base de datos. A


través de los sinónimos se puede permitir el acceso público a un determinado objeto u
ocultar el nombre real del objeto. Un usuario puede crear sinónimos que sólo son visibles
por él, o hacer que el sinónimo sea de uso público (pueda ser utilizado por otros usuarios
de la base de datos).

• Unidades de Programa: ORACLE provee cuatro grandes tipos de unidades de programas:


las funciones, los procedimientos almacenados (“stored procedures”), los “triggers” y los

Página 4 de 9
Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro. 1
CI3315 Enero-Abril 2002 Oracle y SQL

paquetes (“packages”). Toda unidad de programa puede ser escrita utilizando SQL y
PL/SQL (constituye la forma más común).

Tanto las funciones y los procedimientos suelen utilizarse como parte de la definición de
un esquema relacional para implementar restricciones de integridad, reglas del negocio o
políticas determinadas a ser garantizadas por la base de datos.

Los “triggers” son un tipo especial de procedimientos almacenados que se aplican en una
o más tablas, siguiendo la teoría de reglas ECA (reglas Event-Condition-Action) propias
de un paradigma de modelado de bases de datos conocido como Bases de Datos Activas.
En tal sentido, y adicionalmente a la especificación de las acciones a realizar, un
“trigger” indica:
• El evento a partir del cuál automáticamente se ejecutará la acción indicada. Los
eventos que pueden ser especificados pueden resultan de la composición de un tipo
de operación (inserción de una fila, modificación de una fila o eliminación de una fila)
y un instante de tiempo (previo a la ejecución de la operación que se solicita,
posterior a la operación que se solicita o en lugar de la operación que se solicita).
• La condición que establece cuando se aplicarán la acciones indicada en el “trigger”.

Por otra parte, los “packages” proveen un mecanismo sencillo para encapsular y
almacenar un grupo de operaciones (funciones y stored procedures) que se encuentran
relacionados. En tal sentido pueden ser considerados como construcciones que permiten
definir, de alguna forma, la noción de tipos abstractos de datos en la implantación del
modelo relacional que hace ORACLE.

• Enlaces: Son construcciones que permiten asignar nombres a bases de datos diferentes
con el fin de proveer la inter-operabilidad entre éstas. Este tipo construcciones se
utilizan en los diferentes enfoques de inter-operación de bases de datos (bases de datos
federadas, bases de datos distribuidas, etc.) y se escapan de los objetivos de este
curso.

Para el primer taller nos ocuparemos de los objetos básicos para almacenar datos (tablas) y
de las restricciones definibles a través de objetos CONSTRAINT. Los comandos que provee
ORACLE para realizar estas operaciones son:
• CREATE TABLE
• DROP TABLE
• ALTER TABLE

Dado que los “constraints” son objetos que dependen estrictamente de la existencia de una
tabla, no existe un comando específico que crear o eliminar un “constraint”, sino que estos
comandos deben formar parte de lo que se indica en un comando CREATE TABLE o ALTER
TABLE.

A continuación se explicará brevemente el comando CREATE TABLE, DROP TABLE y la


forma de agregar “constraints” durante la creación de una tabla o posterior a la creación de
Página 5 de 9
Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro. 1
CI3315 Enero-Abril 2002 Oracle y SQL

la misma utilizando el comando ALTER TABLE. Ud. deberá consultar el manual de referencia
de SQL para estudiar todas las potencialidades del comando ALTER TABLE.

EL COMANDO CREATE TABLE

Este comando permite crear una tabla en la base de datos. Una forma particular del comando
CREATE TABLE para una tabla basada en el modelo relacional, y que se crea sin requerir de
datos ya existentes en otras tablas es:

CREATE TABLE [<schema>.]<table_name> (


<column_name> <datatype> [DEFAULT <expr>] [NULL | NOT NULL]
{, <column_name> <datatype> [DEFAULT <expr>] [<NULL | NOT NULL>]}
{, <table_constraint>}
);

donde:

• <schema> es el nombre de un usuario de la base de datos. Si no se coloca este


identificador se supondrá que la tabla será del usuario que residirá en el esquema
asociado al usuario que la está creando.
• <table_name> es el nombre con el que se designará la tabla.
• <column_name> es el nombre con el que se designará a cada una de las columnas
• <datatype> representa uno de los tipos de datos admitidos por ORACLE.
• <expr> es una expresión que debe evaluar
• <table_constraint> es la especificación de un “constraint” a ser definido sobre las
columnas de la tabla.

La forma presentada es una de las posibles formas de ordenar la declaración de columnas y


restricciones en la que:
• Primero se describe cada una de las columnas de la tabla con su tipo de datos, su valor
por defecto (utilizando la cláusula DEFAULT) y si la columna admite o no el valor NULL.
• Luego se indican las restricciones de integridad asociada a la tabla utilizando las
estructuras de “constraints“ que se verán posteriormente.

La forma del comando CREATE TABLE permite diferenciar las estructuras de las
restricciones implícitas y hacer más sencilla la lectura del comando. Sin embargo, en el
manual de referencia de SQL Ud. podrá encontrar todas las variaciones sintácticas de este
comando.

EL COMANDO DROP TABLE

Este comando permite eliminar una tabla (borrar las filas e inclusive eliminar la estructura)
de la base de datos. La forma general de este comando es

DROP TABLE [<schema>.]<table_name> [CASCADE CONSTRAINTS];


Página 6 de 9
Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro. 1
CI3315 Enero-Abril 2002 Oracle y SQL

Si se utiliza la opción CASCADE CONSTRAINTS, se eliminarán todas aquellas restricciones


de integridad referencial definidas en otras tablas de la base de datos que referencien a la
tabla que se está eliminando.

DEFINICIÓN DE CONSTRAINTS

ORACLE permite definir los siguientes tipos de “constraints” :


• NOT NULL. Cuando esta declaración se agrega en la especificación de una columna se
indica que ninguna fila de la tabla puede ser tal que el valor para dicha columna sea
NULL. La opción por defecto en ORACLE es la de suponer que toda columna admite el
valor NULL, sin embargo puede indicarse explícitamente (para hacer más legible un
“script”) el hecho de que la columna admita el valor NULL.
• UNIQUE. Cuando esta declaración se agrega a una o más columnas de una tabla se indica
que, en ningún momento, podrán existir dos filas en la tabla que tengan el mismo valor
para las columnas que se están indicando como únicas en el “constraint”.
• PRIMARY KEY. Cuando esta declaración se agrega a una o más columnas de una tabla se
indica que estas columnas constituyen la clave primaria de la tabla.
• FOREIGN KEY. Cuando esta declaración se agrega a una o más columnas de una tabla se
indica que estas columnas constituyen una clave foránea de la tabla hacia alguna tabla de
la base de datos.
• CHECK. Cuando esta declaración se agrega a una tabla se indica que no se admitirá
ninguna fila en la tabla que no cumpla con una condición lógica establecida por el
“constraint”.

De acuerdo con la forma de especificación del comando CREATE TABLE dada anteriormente,
la cláusula <table_constraint> puede entonces tener las siguientes formas:

• CONSTRAINT <constraint_name> PRIMARY KEY (<column_name>[,<column_name>])


• CONSTRAINT <constraint_name> UNIQUE (<column_name>[,<column_name>])
• CONSTRAINT <constraint_name> FOREIGN KEY (<column_name>[,<column_name>])
REFERENCES <table_name>
• CONSTRAINT <constraint_name> CHECK (<condition>)

Donde:

• <constraint_name> es el nombre con el que se designará al “constraint” en el esquema


donde se crea la tabla que lo incluye.
• <column_name> es el nombre de una columna de la tabla en la que se define el
“constraint”
• <table_name> es el nombre de una tabla definida en el esquema donde existe la tabla que
incluye el “constraint”.
• <condition> es una expresión lógica de SQL.

Página 7 de 9
Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro. 1
CI3315 Enero-Abril 2002 Oracle y SQL

En el manual de referencia de SQL Ud. podrá encontrar información sobre las reglas de
formación de expresiones lógicas de SQL.

Un punto importantísimo a destacar es el de garantizar que los nombres de los “constraints”


sean nemónicos. Toda vez que un “constraint” sea violado, el DBMS generará un mensaje de
error indicando el “constraint” que ha fallado. Asignar nombres nemónicos permitirá hacer la
depuración de programas y la carga de datos mucho más sencilla, además de garantizar una
perfecta cohesión entre el esquema de implantación y la documentación del esquema lógico.
Es así como se sugiere utilizar el siguiente estándar de nomenclatura:
• Para restricciones de no-nulidad se recomienda no crear “constraints” sino declarar la
no-nulidad al momento de creación de la tabla y para cada columna. Esto se debe al hecho
de que el módulo de chequeo de integridad de ORACLE no utiliza el nombre de la
restricción de integridad para indicar que el valor de una columna en una fila deba ser
nulo si se indica lo contrario.
• Para asociar un “constraint” de clave primaria a una tabla <table_name> se recomienda
designar el “constraint” con el nombre PK_<table_name>.
• Para asociar un “constraint” de unicidad relacionado con una clave alterna de la tabla
<table_name>, se recomienda designar el “constraint” con el nombre AK_<table_name>. Si
existen varias claves alternas podrá agregársele al nombre del “constraint” un indicador
que permita diferenciar cada una de estas claves alternas.
• Para asociar un “constraint” de clave foránea a una tabla <table_name1> que referencia a
una tabla <table_name2> se recomienda designar el “constraint” con el nombre
FK_<table_name1>__<table_name2>. Si existen múltiples claves foráneas en la tabla
<table_name1> que referencias a la tabla <table_name2> entonces será necesario colocar
algún indicador que permita diferenciar cada uno de los “contraints”. Un posible nombre a
utilizar será el nombre de la interrelación (y en rol en caso de interrelaciones recursivas)
del esquema conceptual a partir de la cual se generó la clave foránea que define el
“constraint”.
• Para asociar un “constraint” que represente una restricción de dominio sobre una
columna <column_name> de una tabla <table_name>, se sugiere utilizar
DOM_<table_name>__<column_name> como nombre del “constraint”.
• Para asociar un “constraint” que represente una restricción explícita, que puede ser
descrita a través de una restricción de tipo CHECK, de una tabla <table_name> se
sugiere utilizar EXP_<table_name>__R<constraint_number> como nombre del
“constraint”. En este nombre <constraint_number> representará el número de restricción
explícita asociado en la documentación del esquema relacional que se implanta.

Los “constraints” pueden ser agregados a una tabla previamente creada, o eliminados de una
tabla existente. Para tal fin se pueden utilizar dos variaciones del comando ALTER TABLE,
cuya sintaxis a continuación se indica:

• ALTER TABLE <table_name> ADD (<table_constraint> [,<table_constraint>]);

Página 8 de 9
Sistemas de Bases de Datos I - Taller Prof. Nunzio N. Savino V. Tema Nro. 1
CI3315 Enero-Abril 2002 Oracle y SQL

Permitirá agregar una o más “constraints” a la tabla <table_name> existente en la base de


datos. Cada uno de los “constraints” que se añaden a la tabla seguirán las convenciones
sintácticas de la cláusula <table_constraint>.

• ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name> [CASCADE];

Eliminará de la tabla <table_name> la restricción <constraint_name>. Si se utiliza la cláusula


CASCADE, la eliminación del “constraint” tendrá como efecto eliminar cualquier otro
“constraint” que esté relacionado con el “constraint” que se elimina. Por ejemplo, si se elimina
un “constraint” de clave primario de una tabla A bajo modalidad “constraint” entonces se
eliminarán los “constraints” de clave foránea que referencien a A.

SOBRE LÍMITES

ORACLE impone los siguientes límites en lo que respecta a los objetos descritos en esta
sección:
• La longitud de cualquier identificador (nombre de tabla, nombre de columna, nombre de
“constraints”, entre otros) se limita a un máximo de 30 caracteres.
• El número máximo de columnas que puede tener una tabla es de 1000.
• El número máximo de columnas que pueden constituir una clave primaria, una clave
alterna o una clave foránea es de 16.

UN EJEMPLO DE CREACIÓN DE TABLAS

A continuación se presenta un ejemplo de un comando de creación de tablas

CREATE TABLE EMPLEADO (


NUMERO NUMBER(3) NOT NULL,
CI NUMBER(8) NOT NULL,
NOMBRE VARCHAR2(20) NOT NULL,
CARGO VARCHAR2(9) NOT NULL,
JEFE NUMBER(3) NULL,
INGRESO DATE NULL,
SUELDO NUMBER(10,2) NOT NULL,
NUMERO_DEPTO NUMBER(2) NOT NULL,
CONSTRAINT PK_EMPLEADO PRIMARY KEY (NUMERO),
CONSTRAINT AK_EMPLEADO UNIQUE (CI),
CONSTRAINT FK_EMPLEADO__EMPLEADO FOREIGN KEY (JEFE)
REFERENCES EMPLEADO,
CONSTRAINT FK_EMPLEADO__DEPTO FOREIGN KEY (NUMERO_DEPTO)
REFERENCES DEPTO,
CONSTRAINT DOM_EMPLEADO__SUELDO
CHECK (SUELDO > 0),
CONSTRAINT DOM_EMPLEADO__NOMBRE
CHECK (NOMBRE= NLS_UPPER(NOMBRE))
);

Página 9 de 9

You might also like