El Manejador de Bases de Datos Relacionales ORACLE

Página creada Vicente Garcea
 
SEGUIR LEYENDO
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 , que permite conectar al usuario  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 ).
• sqlplus /, que permite conectar al usuario  con
    contraseña  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  IDENTIFIED BY ;

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 [.] (
     [DEFAULT ] [NULL | NOT NULL]
   {,   [DEFAULT ] []}
   {, }
);

donde:

•    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.
•    es el nombre con el que se designará la tabla.
•    es el nombre con el que se designará a cada una de las columnas
•    representa uno de los tipos de datos admitidos por ORACLE.
•    es una expresión que debe evaluar
•    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 [.] [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  puede entonces tener las siguientes formas:

•   CONSTRAINT  PRIMARY KEY ([,])
•   CONSTRAINT  UNIQUE ([,])
•   CONSTRAINT  FOREIGN KEY ([,])
                                 REFERENCES 
•   CONSTRAINT  CHECK ()

Donde:

•    es el nombre con el que se designará al “constraint” en el esquema
    donde se crea la tabla que lo incluye.
•    es el nombre de una columna de la tabla en la que se define el
    “constraint”
•    es el nombre de una tabla definida en el esquema donde existe la tabla que
    incluye el “constraint”.
•    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  se recomienda
    designar el “constraint” con el nombre PK_.
• Para asociar un “constraint” de unicidad relacionado con una clave alterna de la tabla
    , se recomienda designar el “constraint” con el nombre AK_. 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  que referencia a
    una tabla  se recomienda designar el “constraint” con el nombre
    FK___. Si existen múltiples claves foráneas en la tabla
     que referencias a la tabla  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             de una tabla , se sugiere utilizar
    DOM___ 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  se
    sugiere utilizar EXP___R como nombre del
    “constraint”. En este nombre  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  ADD ( [,]);

                                              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  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 .

•   ALTER TABLE  DROP CONSTRAINT  [CASCADE];

Eliminará de la tabla  la restricción . 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
También puede leer