Está en la página 1de 11

TUTORIAL DE ORACLE

Introduccin a sistemas ORACLE:



Sesiones SQL*Plus
Para hacer la conexin a SQL*Plus, es necesario conectarse via telnet a altair.usb.ve. Una vez indicado el
login (de la forma ci3391xx) y el correspondiente password, se debe entrar al manejador PL/SQL,
tecleando:
$ sqlplus loginname
A continuacin se pedir el password para el acceso al manejador (no necesariamente igual al password
para altair). Una vez tecleado el password, aparecer el prompt de PL/SQL:
SQL>
Otra forma de entrar a PL/SQL es tecleando desde la linea de comandos de UNIX:
$ sqlplus loginname/password

Cmo cambiar el password?
Una vez que se est trabajando con el manejador, es posible cambiar el password, con el comando:
SQL> alter user loginname identified by newPassword;
donde loginname indica el login usado en el manejador PL/SQL y newPassword es la nueva clave a usar.

Salir de SQL*Plus
Para salir de SQL*Plus basta con teclear en la linea de comandos de ORACLE:
SQL> quit;
Creacin de esquemas

En SQL*Plus es posible usar todos los comandos bsicos de SQL con algunas restricciones de sintaxis.
Para crear una tabla, debe teclearse en la linea de comandos:
CREATE TABLE nombretabla (
{nombre_col tipo [DEFAULT expr] [rest_columna] ...
|rest_tabla}
[,{nombre_col tipo [DEFAULT expr] [rest_columna] ...
|rest_tabla}] ...
);
Donde nombretabla representa el nombre que se le dara a la relacin que se est creando; nombre_col
es el nombre de un atributo, y tipo indica el tipo de datos del mismo; DEFAULT expr representa el valor
por defecto de un atributo (el valor que se asigna cuando no se especifican datos de entrada para ese
atributo); rest_columna son las restricciones a nivel de atributo que se pueden colocar; y rest_tabla las
restricciones a nivel de la relacin (por ejemplo, si la clave est constituida por un solo atributo, se puede
indicar como restriccin a nivel de columna, en cambio, si es compuesta, se indica como restriccin a
nivel de tabla).
Un ejemplo lo tenemos con:
SQL> CREATE TABLE empleado (
2> ci NUMBER(8) CONSTRAINT pk_empleado PRIMARY KEY,
3> nombre VARCHAR2(20) NOT NULL
4> CONSTRAINT may CHECK (nombre=UPPER(nombre)),
5> cargo VARCHAR2(9),
6> jefe NUMBER CONSTRAINT fk_jefe REFERENCES empleado(ci),
7> ingreso DATE,
8> sueldo NUMBER(10,2),
9> dpto NUMBER(2) NOT NULL
10> CONSTRAINT fk_dpto REFERENCES depto(nro)
11> );
Note que mientras no se cierra la sentencia completa de SQL (con punto y coma) aparece un prompt con
el nmero de linea que se esta escribiendo. La sentencia solo se ejecuta luego de escribir el punto y coma
y presionar [ENTER].
Note adems que los comandos en SQL no son case sensitive, por lo cual no habra diferencia entre una
tabla empleado y una tabla EMPLEADO.
La sentencia anterior crea una relacin empleado, con las siguientes caractersticas:
cedula: Entero de longitud 8, clave primaria;
nombre: Cadena de caracteres de hasta 20 caracteres, no puede contener nulos, y todas las letras deben
ser mayusculas;
cargo: Cadena de caracteres de hasta 9 caracteres, sin restricciones;
jefe: Nmero de cdula de identidad del jefe, es clave fornea de la misma relacin en el atributo ci;
ingreso: Fecha en la cual comenz a trabajar en la empresa;
sueldo: Nmero en punto flotante, de hasta diez dgitos, incluyendo dos decimales, que indica el sueldo
mensual del empleado;
dpto: Nmero del departamento para el cual trabaja el empleado, es clave fornea del atributo nro, de la
relacin depto.
Tipos de datos
Tipo Descripcin
CHAR(n) Cadena de caracteres de longitud n. Una vez que se declara, se reserva espacio para n
caracteres, aun cuando no se usen todos.
VARCHAR2(n) Cadena de caracteres de longitud n. Se define un mximo de n caracteres, pero solo se
usa el espacio correspondiente a los caracteres ocupados
VARCHAR(n) Exactamente lo mismo que VARCHAR2(n)
NUMBER(p,s) Nmero en punto flotante, de p dgitos, de los cuales s son decimales. El parmetro s
puede ser omitido, con lo cual se considerar que su valor es 0. El valor por defecto para p es 38.
DATE Fecha comprendida entre Enero 1, 4712 aC y Diciembre 31, 4712 dC.
Insercin de tuplas
Para insertar tuplas en una relacin se usa la instruccin INSERT de SQL:
SQL> INSERT INTO tabla VALUES (valor1, valor2, . . ., valorN);
Por ejemplo, para insertar una nueva tupla en la relacin empleado, basta con escribir:
SQL> INSERT INTO empleado VALUES (
2 12325432, 'Juen Jose', 'Gil', 125000.00
3 );
Para la insercin de fechas, debe especificarse el formato en que se est intorduciendo la fecha, usando
para ello:
TO_DATE ("string de fecha", "formato")
por ejemplo, si se quisiera ingresar en la relacin empleado anterior, un atributo con la fecha de
nacimiento, deberia agregarse la misma, de la siguiente manera:
SQL> INSERT INTO empleado VALUES (
2 12325432, 'Juen Jose', 'Gil',
3 125000.00, TO_DATE ('15-02-72', 'DD-MM-YY')
4 );
Si se quisiera ademas, agregar la hora de nacimiento, deberia usarse:
SQL> INSERT INTO empleado VALUES (
2 12325432, 'Juen Jose', 'Gil', 125000.00,
3 TO_DATE ('15-02-72 15:23', 'DD-MM-YY HH24:MI')
4 );
A continuacin se presenta una tabla con algunos de los formatos mas usados:
Formato Descripcin
HH, HH12 Hora en el formato tradicional 1-12
HH24 Hora en el formato de 24 horas (0-23)
MI Minutos (0-59)
DD Dia del mes (1-31 con restricciones)
D Dia de la semana (0=domingo)
MM Mes en formato numerico (1-12)
MON Nombre del mes abreviado a tres caracteres, en ingls (JAN=Enero)
MONTH Nombre del mes en ingls. En caso de ser un nombre corto, se rellena con espacios en blanco
hasta nueve caracteres (MARCH=marzo, JANUARY=enero, . . .)
YY Ao en formato de dos dgitos (se asume 19xx)
YYYY Ao en formato de 4 dgitos.
Eliminando tablas
Para eliminar una tabla determinada, se usa la instruccin DROP TABLE, de la siguiente manera:
SQL> DROP TABLE nombretabla;
Con lo cual se elimina la tabla nombretabla del sistema.
Un caso especial se presenta si la relacin a ser eliminada est referenciada por claves forneas en
otra(s) relacin(es). En este caso, se debe hacer la llamada de la siguiente manera:
SQL> DROP TABLE nombretabla CASCADE CONSTRAINTS;
De esta manera se eliminarn todas las tuplas en otras relaciones que referencien a la clave primaria de
la relacin a ser eliminada. Si no se incluye el parmetro CASCADE CONSTRAINTS y existe alguna
referencia a una tupla que se eliminar, ORACLE retornar un mensaje de error y no eliminar la relacin.
creacion de scripts en oracle

La creacin de relaciones e insercin de valores en las mismas suele ser un proceso bastante tedioso,
especialmente cuando se transcriben errores en las instrucciones. Para simplificar esto, es posible crear
Scripts que permiten crear, modificar y eliminar relaciones, as como insertar, eliminar y buscar tuplas.
Un script no es mas que un archivo de texto, con instrucciones de SQL separadas por punto y coma.
Dichos archivos deben tener permiso de lectura para el usuario (100), y para ejecutar su contenido se
debe usar la instruccin START, de la siguiente manera:
SQL> START scriptname
SQL> @ scriptname //forma abreviada

Oracle Bulk Loader

-Creacin del archivo de control
-Usando un archivo de datos separado
-Representacin de fechas
-Manejo de valores nulos
-Cargando los datos
-Creacin del archivo de control

Hay dos formas de usar los archivos de control.
A. Datos cargados desde el archivo de control
Probablemente el tipo de archivo de control mas sencillo es como el siguiente, donde los datos a ser
cargados se encuentran al final del archivo de control. Las letras maysculas son opcionales.
LOAD DATA
INFILE *
INTO TABLE test
FIELDS TERMINATED BY ','
(num,name)
BEGINDATA
1,foo
2, bar
3,baz
4,glorp
5,snarf
El proposito de este archivo es cargar datos en una relacin llamada test, la cual tiene dos atributos: num
y name,de tipo NUMBER y CHAR(10), respectivamente. El significado de cada una de las lneas (en el
orden que aparecen) es:
LOAD DATA se requiere esta lnea al principio del archivo de control.
INFILE * indica que los datos aparecern en el mismo archivo, y no en uno separado, en cuyo caso el
nombre del archivo reemplazara a *.
La insercin se efectuar en la relacin llamada test. La tabla que recibir los datos debe existir en la
base de datos. Mas an, la tabla debe estar vaca. De no cumplirse esto ltimo, debe usarse "APPEND
INTO TABLE test" en lugar de "INTO TABLE test".
El separador de valores de diferentes atributos ser una coma.
BEGIN DATA indica que en las lneas siguientes aparecern las tuplas a ser insertadas.
La primera tupla tiene num=1 y name='foo'
Los nombres de las columnas a ser insertadas aparecen entre parntesis, y separados por coma.
Observacin: Un error comn es asumir que los espacios en blanco son ignorados en el archivo de carga,
tal como sucede en casi todos los lenguajes de programacin. Este error podra producir resultados
inesperados al momento de efectuar consultas sobre los datos insertados.
Notese que en las segunda tupla insertada aparece un espacio en blanco entre la coma y el nombre bar.
Esto producir como resultado que se almacene la tupla (2, ' bar') en lugar de la tupla (2, 'bar'), por locual,
al hacer una consulta donde nombre='bar', nunca se obtendra dicha tupla.
B. Datos cargados desde un archivo separado
Se pueden colocar los datos a ser cargados en un archivo distinto al archivo de control. He aqu un
ejemplo sencillo:
LOAD DATA
INFILE 'test.txt'
APPEND INTO TABLE test
FIELDS TERMINATED BY ','
(num,name)
A continuacin, el significado de cada una de las lneas:
LOAD DATA: se requiere esta lnea al principio del archivo de control.
INFILE test.txt indica que los datos aparecern en el archivo test.txt.
Los datos en test.txt ser aadidos al final de la relacin test. De no aparecer la palabra APPEND, la
relacin test debe estar vaca.
En el archivo de datos, se usar la coma como separador de atributos.
Los nombres de las columnas aparecen entre parntesis, y separados por coma.
El contenido del archivo de datos test.txt es:
1,foo
2, bar
3,baz
4,glorp
5,snarf
Representacin de fechas
El tipo de datos DATE es representado en un formato que brinda considerable flexibilidad. Primero, debe
declararse la tabla con un atributo de tipo DATE. He aqu un ejemplo sencillo:
CREATE TABLE Foo (
i NUMBER,
d DATE
);
Ahora, en el archivo de control, al describir los atributos de la tabla a ser cargada, puede acompaarse
cada nombre de atributo con su tipo. An cuando esto puede hacerse para todos los atributos, en el
siguiente ejemplo se har solo para el atributo de fecha (d).
En el ejemplo tenemos, seguido del indicador de tipo DATE, una mscara de fecha que describe el
formato que va a tener la fecha en los datos de entrada. La mscara de fecha es una cadena de
caracteres, encerrada con comillas dobles, que debe seguir las siguientes convenciones:
Las secuencias de letras que comiencen con d, m o y, denotan campos en los datos que deben ser
interpretados como dias, meses y aos, respectivamente. Como casi todo en SQL, se permiten letras
maysculas.
Todos los dems caracteres son tratados literalmente, y deben aparecer en los datos, si fueron colocados
en la mscara.
Los campos usados representan longitud maxima para los valores correspondientes.
He aqu un ejemplo de un archivo de carga:
LOAD DATA
INFILE *
INTO TABLE Foo
FIELDS TERMINATED BY ','
(i,d DATE "dd-mm-yyyy")
BEGINDATA
1,01-02-1234
2,3-4-1997
Notese que, en la segunda tupla de datos, se tiene un campo de longitud menor a la indicada en la
mscara. El separador - le indica al programa que los campos dia y mes para la segunda tupla son mas
cortos.
Manejo de valores nulos
Para la insercin de valores nulos, debe dejarse vaco el espacio correspondiente al valor. Por ejemplo, si
quisieramos hacer la carga en una tabla empleado de los siguientes datos:
(12234765,'Freedy Arias',30-10-1997,120000.00)
(14236879,'Jose Montenegro',12-08-1997,75535.00)
(12234765,'Pedro Perez',NULL,100000,00)
(12234765,'Carolina Rodriguez',30-10-1997,98000.00)
se tendra que usar el siguiente archivo de control:
LOAD DATA
INFILE *
INTO TABLE empleado
FIELDS TERMINATED BY ','
(ci,nombre,ult_vacaciones DATE "dd-mm-yyyy",sueldo)
BEGINDATA
12234765,Freedy Arias,30-10-1997,120000.00
14236879,Jose Montenegro,12-08-1997,75535.00
12234765,Pedro Perez,,100000,00)
12234765,Carolina Rodriguez,30-10-1997,98000.00
Uso del Loader para la carga de datos
sqlload es un comando a nivel de UNIX, igual que sqlplus. La forma de una lnea de comandos es:
sqlload userid=<yourName>/<yourPasswd> control=<ctlFile> log=<logFile>
La sintaxis de los parmetros no es la usual en UNIX. Se debe colocar la palabra userid con un signo de
igual, el login (de sqlplus), un slash, y el password de sqlplus. Si se omite el parmetro userid, el sistema
preguntar por el login y el password.
A continuacin debe indicarse el nombre del archivo de control. Por ltimo se debe indicar el nombre de
otro archivo, el archivo de log, en el cual sqlload coloca cierta informacin de utilidad acerca de lo que
hizo, incluyendo una descripcin de los erores que hubieran ocurrido durante la ejecucin. Por ejemplo, si
el usuario CURSO00, con password prof%01 quisiera cargar los datos que se indican en carga.ctrl y
obtener el resultado en carga.log, debera usar:
sqlload userid=CURSO00/prof%01 control=carga.ctrl log=carga.log
Creacin de vistas de oracle

Una vista es una tabla logica, que muestra una parte de la base de datos. Las vistas permiten "almacenar"
de manera logica los resultados de los queries.
La sintaxis para crear una vista es la siguiente:
CREATE [OR REPLACE] VIEW name [(alias1, alias2, . . . , aliasN)]
AS subquery
El uso de OR REPLACE permite sobreescribir una vista existente. Si se omite, y la vista ya existe, se
producir, un error. El subquery representa un query escrito en SQL, a partir del cual se obtendr el
contenido de la vista. Los aliases opcionales, permiten asignarle nombres a las columnas de la vista. Si se
omiten, las columnas tendrn el mismo nombre que en las tablas originales (de donde se obtuvieron).
A continuacin se presenta un ejemplo de creacin de una vista
SQL> CREATE VIEW ComputerScience (employ_name, annual_salary)
1> AS SELECT ename, sal*12
2> FROM employee
3> WHERE dpt_name = 'Computer Science'
4> ;
Esta vista mostrar el salario anual de todos los empleados del departamento de Computer Science.
Si se modifica la informacin de alguna de las tablas base referenciadas por la vista, y luego se ejecuta un
query sobre la misma, la informacin que se obtendr ser la nueva. Es decir, la informacin no se
almacena en la vista, sino que se carga dinamicamente al momento de efectuar alguna consulta.
Si se desea eliminar (borrar) una vista, se usa la instruccin:
SQL> DROP VIEW name;
Bloques de instrucciones PL/SQL

A continuacin se muestra como es la estructura general de los bloques de instrucciones de PL/SQL que
se usarn mas adelante en la creacin de procedimientos, funciones y triggers.
PL/SQL (Procedural Language/SQL) es una extensin de SQL, que agrega ciertas construcciones propias
de lenguajes procedimentales, obteniendose como resultado un lenguaje estructural mas poderoso que
SQL. La unidad de programacin utilizada por PL/SQL es el bloque. Todos los programas de PL/SQL
estn conformados por bloques. Tipicamente, cada bloque lleva a cabo una accin lgica en el programa.
Un bloque tendr siempre la siguiente estructura:
DECLARE
//Seccin declarativa: variables, tipos, y subprogramas
//de uso local
BEGIN
//Seccin ejecutable: las instrucciones procedimentales, y de SQL
//aparecen aqu. Es la unica seccin obligatoria en el bloque.
EXCEPTION
//Seccin de manejo de excepciones. Las rutinas de manejo de errores
//aparecen aqui
END;
Solo se requiere que aparezca la seccin ejecutable. Lo demas es opcional. Las unicas instrucciones SQL
permitidas en un bloque PL/SQL son INSERT, UPDATE, DELETE y SELECT, ademas de algunas
instrucciones para manipulacin de datos, e instrucciones para control de transacciones. Otras
instrucciones de SQL como DROP, CREATE o ALTER no son permitidas. Se permite el uso de
comentarios estilo C (/* . . .*/). PL/SQL no es case sensitive por lo que no hay distincin entre nombres
con mayusculas y minusculas.
En la seccin de declaraciones, se indican las variables que sern usadas dentro del bloque y sus tipos.
Por ejemplo:
DECLARE
myBeer VARCHAR(20);
price NUMBER(6,2);
En algunos casos, es posible que se desee que el tipo de una variable coincida con el tipo usado para
una columna de una tabla determinada, en esos casos se puede usar la construccin:
DECLARE
myBeer Beers.name%TYPE;
Con lo cual se logra que la variable myBeer tenga el mismo tipo que la columna name de la tabla Beers.
Tambien es posible inicializar las variables, mediante el operador :=. Ademas, mediante el uso del mismo
operador es posible hacer asignaciones en el cuerpo del programa. Por ejemplo:
DECLARE
price NUMBER := 300;
BEGIN
price := price + 150;
END;
.
run
La ejecucin de este bloque no tendr ningun efecto, ya que no se estn haciendo cambios sobre la base
de datos.
Ademas es posible usar sentencias condicionales y ciclos dentro de los bloques de PL/SQL. Una
sentencia condicional tipica es de la forma:
IF (condicion)
THEN (lista de acciones)
ELSE (lista de acciones)
END IF;
Si se desea, se puede hacer el uso de varios casos de condicin, mediante el uso de:
IF . . . THEN . . .
ELSIF . . . THEN . . .
ELSIF . . . THEN . . .
.
.
.
ELSE . . .
END IF;
En ambos casos, la clausula ELSE es opcional.
Si se desea crear un lazo, se puede usar la instruccin:
LOOP
lista_de_instrucciones
END LOOP;
Al menos alguna de las instrucciones debe ser:
EXIT WHEN condicion;
De esta manera, el lazo terminar cuando la condicin sea verdadera. Adems es posible utilizar la
instruccin:
WHILE (condicion) LOOP
lista_de_instrucciones
END LOOP;
De esta forma, el ciclo solo se inicia si la condicion es verdadera en principio. Es posible que el programa
nunca entre en el ciclo. Usando la instruccin LOOP se garantizaba que siempre se ejecutara el cuerpo
del ciclo al menos una vez. Por ltimo, es posible usar ciclos que se ejecuten un numero predeterminado
de veces, mediante el uso de la instruccin:
FOR i IN a..b LOOP
lista_de_instrucciones
END LOOP;
En este caso i es una variable de uso local, por lo que no es necesario que sea declarada, y puede ser
usada dentro del lazo, mientras que a y b son constantes.

Procedimientos almacenados

Un procedimiento almacenado es un conjunto de instrucciones en PL/SQL, que pueden ser llamado
usando el nombre que se le haya asignado.
La sintaxis para crear un procedimiento es la siguiente:
CREATE [OR REPLACE] PROCEDURE name [(param [IN|OUT|IN OUT|] datatype) . . .]
[IS|AS] pl/sql_subprogram
El uso de OR REPLACE permite sobreescribir un procedimiento existente. Si se omite, y el procedimiento
ya existe, se producir un error. Los modificadores IN, OUT, IN OUT indican si el parametro es de
entrada, salida o ambos.
A continuacin se presenta un ejemplo de creacin de un procedimiento:
SQL> CREATE PROCEDURE credit (acc_no IN NUMBER, amount IN NUMBER)
1> AS BEGIN
2> UPDATE accounts
3> SET balance = balance + amount
4> WHERE account_id = acc_no;
5> END;
Este procedimiento actualizar la(s) tupla(s) con numero de cuenta igual al parmetro acc_no con un
incremento de amount en el balance de dicha cuenta.
Si se desea eliminar (borrar) un procedimiento almacenado, se usa la instruccin:
SQL> DROP PROCEDURE name;
Funciones en oracle

Una funcin es un conjunto de instrucciones en PL/SQL, que pueden ser llamados usando el nombre con
que se le haya creado. Se diferencian de los procedimientos, en que las funciones retornan un valor al
ambiende desde donde fueron llamadas.
La sintaxis para crear una funcin es la siguiente:
CREATE [OR REPLACE] FUNCTION name [(param [IN] datatype) . . .]
RETURN datatype
[IS|AS] pl/sql_subprogram
El uso de OR REPLACE permite sobreescribir una funcin existente. Si se omite, y la funcin ya existe, se
producir, un error. El unico modificador permitido para los parmetros es IN, y si se omite, se tomar por
defecto. Es decir, solo se permiten parmetros de entrada.
A continuacin se presenta un ejemplo de creacin de una funcin:
SQL> CREATE FUNCTION get_bal (acc_no IN NUMBER)
1> RETURN NUMBER
2> IS
3> acc_bal NUMBER(11,2); /* declaracin de una variable */
4> BEGIN
5> SELECT balance
6> INTO acc_bal /* asignacin */
7> FROM accounts
8> WHERE account_id = acc_no;
9> RETURN(acc_bal);
10> END
La funcin get_bal retorna el balance de una cuenta dada.
Si se desea eliminar (borrar) una funcin, se usa la instruccin:
SQL> DROP FUNCTION name;
Triggers

Un trigger es un bloque PL/SQL asociado a una tabla, que se ejecuta cuando una determinada instruccin
en SQL se va a ejecutar sobre dicha tabla.
La sintaxis para crear un trigger es la siguiente:
CREATE [OR REPLACE] TRIGGER
{BEFORE|AFTER} {DELETE|INSERT|UPDATE [OF col1, col2, . . ., colN]
[OR {DELETE|INSERT|UPDATE [OF col1, col2, . . ., colN]. . .]}
ON table
[REFERENCING OLD AS oldname, NEW as newname]
[FOR EACH ROW [WHEN (condition)]]
pl/sql_block
El uso de OR REPLACE permite sobreescribir un trigger existente. Si se omite, y el trigger existe, se
producir, un error.
El modificador FOR EACH ROW indica que el trigger se disparar cada vez que se desee hacer
operaciones sobre una fila de la tabla. Si se acompaa del modificador WHEN, se establece una
restriccin; el trigger solo actuar, sobre las filas que satisfagan la restriccin.
A continuacin se presenta un ejemplo de creacin de un trigger:
SQL> CREATE TRIGGER salary_check
1> BEFORE
2> INSERT OR UPDATE OF sal, job
3> ON employee
4> FOR EACH ROW
5> WHEN (new.job <> 'PRESIDENT')
6> DECLARE
7> minsal NUMBER
8> maxsal NUMBER
9> BEGIN
10> /* Se obtienen los valores minimo y maximo para el salario de */
11> /* un cargo determinado, usando la tabla sal_guide */
12> SELECT minsal, maxsal
13> INTO minsal, maxsal
14> FROM sal_guide
15> WHERE job = :new.job
16> /* Si el salario del empleado a insertar/modificar esta por */
17> /* debajo del minimo, o por encima del maximo, se genera */
19> /* un error. */
20> IF (:new.sal < minsal OR :new.sal > maxsal)
21> THEN raise_application_error(-20601, 'Salary '||:new.sal||
22> ' out of range for job '||:new.job||' for employee '||
23> :new.ename);
24> END IF;
25 > END;
Este trigger impide que se agregue o modifique un empleado con el sueldo mayor o menor que los
valores maximo y minimo respectivamente para su cargo. Se agrega la restriccin de que el trigger no se
dispararn si el cargo es PRESIDENTE.
Si se desea eliminar (borrar) un trigger, se usa la instruccin:
SQL> DROP TRIGGER name;

También podría gustarte