Introducción A Sistemas ORACLE

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 13

Introducción a sistemas ORACLE:

Sesiones SQL*Plus
Para hacer la conexión 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 continuación 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

¿Cómo 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;

[previous][next]

Introducción a sistemas ORACLE:


Creación de esquemas
En SQL*Plus es posible usar todos los comandos básicos 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 relación
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 relación (por ejemplo, si la clave está
constituida por un solo atributo, se puede indicar como restricción a
nivel de columna, en cambio, si es compuesta, se indica como
restricción 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 número de linea que se esta
escribiendo. La sentencia solo se ejecuta luego de escribir el punto y
coma y presionar [ENTER].
Note además 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 relación empleado, con las siguientes
características:
 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: Número de cédula de identidad del jefe, es clave foránea de la misma relación en el atributo
ci;

 ingreso: Fecha en la cual comenzó a trabajar en la empresa;

 sueldo: Número en punto flotante, de hasta diez dígitos, incluyendo dos decimales, que indica el
sueldo mensual del empleado;

 dpto: Número del departamento para el cual trabaja el empleado, es clave foránea del atributo nro,
de la relación depto.

Tipos de datos
Tipo Descripción
Cadena de caracteres de longitud n. Una vez que se declara, se reserva espacio para n
CHAR(n)
caracteres, aun cuando no se usen todos.
Cadena de caracteres de longitud n. Se define un máximo de n caracteres, pero solo se usa
VARCHAR2(n)
el espacio correspondiente a los caracteres ocupados
VARCHAR(n) Exactamente lo mismo que VARCHAR2(n)
Número en punto flotante, de p dígitos, de los cuales s son decimales. El parámetro s
NUMBER(p,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.

[previous][next]

Introducción a sistemas ORACLE:


Inserción de tuplas
Para insertar tuplas en una relación se usa la instrucción INSERT de
SQL:
SQL> INSERT INTO tabla VALUES (valor1, valor2, . . ., valorN);
Por ejemplo, para insertar una nueva tupla en la relación empleado,
basta con escribir:
SQL> INSERT INTO empleado VALUES (
2 12325432, 'Juen Jose', 'Gil', 125000.00
3 );
Para la inserción 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 relación 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 continuación se presenta una tabla con algunos de los formatos mas
usados:
Formato Descripción
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 inglés (JAN=Enero)
Nombre del mes en inglés. En caso de ser un nombre corto, se rellena con espacios en blanco
MONTH
hasta nueve caracteres (MARCH=marzo, JANUARY=enero, . . .)
YY Año en formato de dos dígitos (se asume 19xx)
YYYY Año en formato de 4 dígitos.

[previous][next]

Introducción a sistemas ORACLE:


Eliminando tablas
Para eliminar una tabla determinada, se usa la instrucción 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 relación a ser eliminada está
referenciada por claves foráneas en otra(s) relación(es). En este caso,
se debe hacer la llamada de la siguiente manera:
SQL> DROP TABLE nombretabla CASCADE CONSTRAINTS;
De esta manera se eliminarán todas las tuplas en otras relaciones que
referencien a la clave primaria de la relación a ser eliminada. Si no se
incluye el parámetro CASCADE CONSTRAINTS y existe alguna referencia a
una tupla que se eliminará, ORACLE retornará un mensaje de error y
no eliminará la relación.
[previous][next]

Introducción a sistemas ORACLE:


Scripts
La creación de relaciones e inserción 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 instrucción START, de la siguiente manera:
SQL> START scriptname

SQL> @ scriptname //forma abreviada

[previous][next]
Oracle Bulk Loader
Indice
1. Creación del archivo de control

2. Usando un archivo de datos separado

3. Representación de fechas

4. Manejo de valores nulos

5. Cargando los datos

Creación 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 mayúsculas 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 relación llamada
test, la cual tiene dos atributos: num y name,de tipo NUMBER y
CHAR(10), respectivamente. El significado de cada una de las líneas
(en el orden que aparecen) es:
1. LOAD DATA se requiere esta línea al principio del archivo de control.

2. INFILE * indica que los datos aparecerán en el mismo archivo, y no en uno separado, en cuyo
caso el nombre del archivo reemplazaría a *.

3. La inserción se efectuará en la relación llamada test. La tabla que recibirá los datos debe existir
en la base de datos. Mas aún, la tabla debe estar vacía. De no cumplirse esto último, debe usarse
"APPEND INTO TABLE test" en lugar de "INTO TABLE test".

4. El separador de valores de diferentes atributos será una coma.

5. BEGIN DATA indica que en las líneas siguientes aparecerán las tuplas a ser insertadas.

6. La primera tupla tiene num=1 y name='foo'

7. Los nombres de las columnas a ser insertadas aparecen entre paréntesis, y separados por coma.
Observación: Un error común es asumir que los espacios en blanco son ignorados en el archivo de carga,
tal como sucede en casi todos los lenguajes de programación. Este error podría 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 obtendría
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 continuación, el significado de cada una de las líneas:
1. LOAD DATA: se requiere esta línea al principio del archivo de control.

2. INFILE test.txt indica que los datos aparecerán en el archivo test.txt.

3. Los datos en test.txt será añadidos al final de la relación test. De no aparecer la palabra
APPEND, la relación test debe estar vacía.

4. En el archivo de datos, se usará la coma como separador de atributos.

5. Los nombres de las columnas aparecen entre paréntesis, y separados por coma.
El contenido del archivo de datos test.txt es:
1,foo
2, bar
3,baz
4,glorp
5,snarf
Representación 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 acompañarse cada nombre de atributo con su tipo.
Aún 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
máscara de fecha que describe el formato que va a tener la fecha en
los datos de entrada. La máscara 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 años, respectivamente. Como casi todo en SQL, se permiten
letras mayúsculas.

 Todos los demás caracteres son tratados literalmente, y deben aparecer en los datos, si fueron
colocados en la máscara.

 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 máscara. 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 inserción de valores nulos, debe dejarse vacío 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 tendría 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
es un comando a nivel de UNIX, igual que sqlplus. La forma
sqlload
de una línea de comandos es:
sqlload userid=<yourName>/<yourPasswd> control=<ctlFile>
log=<logFile>
La sintaxis de los parámetros 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
parámetro userid, el sistema preguntará por el login y el
password.
A continuación 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 información de utilidad
acerca de lo que hizo, incluyendo una descripción de los erores
que hubieran ocurrido durante la ejecución. 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,
debería usar:
sqlload userid=CURSO00/prof%01 control=carga.ctrl log=carga.log

[previous] [next]

Introducción a sistemas ORACLE:


Creación de vistas
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 tendrán el mismo
nombre que en las tablas originales (de donde se obtuvieron).
A continuación se presenta un ejemplo de creación 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 información de alguna de las tablas base
referenciadas por la vista, y luego se ejecuta un query sobre la misma,
la información que se obtendrá será la nueva. Es decir, la información
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 instrucción:
SQL> DROP VIEW name;
[previous] [next]

Introducción a sistemas ORACLE:


Bloques de instrucciones PL/SQL
A continuación se muestra como es la estructura general de los
bloques de instrucciones de PL/SQL que se usarán mas adelante en la
creación de procedimientos, funciones y triggers.

PL/SQL (Procedural Language/SQL) es una extensión de SQL, que


agrega ciertas construcciones propias de lenguajes procedimentales,
obteniendose como resultado un lenguaje estructural mas poderoso
que SQL. La unidad de programación utilizada por PL/SQL es el bloque.
Todos los programas de PL/SQL están conformados por bloques.
Tipicamente, cada bloque lleva a cabo una acción lógica en el
programa. Un bloque tendrá siempre la siguiente estructura:
DECLARE

//Sección declarativa: variables, tipos, y subprogramas


//de uso local

BEGIN

//Sección ejecutable: las instrucciones procedimentales, y de SQL


//aparecen aquí. Es la unica sección obligatoria en el bloque.

EXCEPTION

//Sección de manejo de excepciones. Las rutinas de manejo de errores


//aparecen aqui

END;
Solo se requiere que aparezca la sección 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 manipulación 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 distinción entre nombres
con mayusculas y minusculas.
En la sección de declaraciones, se indican las variables que serán
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 construcción:
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 ejecución de este bloque no tendrá ningun efecto, ya que no se
están 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 condición,
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 instrucción:
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 condición sea verdadera.
Además es posible utilizar la instrucción:
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
instrucción LOOP se garantizaba que siempre se ejecutaría 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
instrucción:
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.

[previous] [next]

Introducción a sistemas ORACLE:


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 continuación se presenta un ejemplo de creación 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 parámetro acc_no con un incremento de amount en el balance de
dicha cuenta.
Si se desea eliminar (borrar) un procedimiento almacenado, se usa la
instrucción:
SQL> DROP PROCEDURE name;

[previous] [next]

Introducción a sistemas ORACLE:


Funciones
Una función 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 función 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 función existente. Si se
omite, y la función ya existe, se producirá, un error. El unico
modificador permitido para los parámetros es IN, y si se omite, se
tomará por defecto. Es decir, solo se permiten parámetros de entrada.
A continuación se presenta un ejemplo de creación de una función:
SQL> CREATE FUNCTION get_bal (acc_no IN NUMBER)
1> RETURN NUMBER
2> IS
3> acc_bal NUMBER(11,2); /* declaración de una variable */
4> BEGIN
5> SELECT balance
6> INTO acc_bal /* asignación */
7> FROM accounts
8> WHERE account_id = acc_no;
9> RETURN(acc_bal);
10> END
La función get_bal retorna el balance de una cuenta dada.
Si se desea eliminar (borrar) una función, se usa la instrucción:
SQL> DROP FUNCTION name;

[previous] [next]

Introducción a sistemas ORACLE:


Triggers
Un trigger es un bloque PL/SQL asociado a una tabla, que se ejecuta
cuando una determinada instrucción 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 acompaña del modificador
WHEN, se establece una restricción; el trigger solo actuará, sobre las filas que
satisfagan la restricción.
A continuación se presenta un ejemplo de creación 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 restricción de que el trigger no se dispararán si el cargo es PRESIDENTE.
Si se desea eliminar (borrar) un trigger, se usa la instrucción:
SQL> DROP TRIGGER name;

[previous]

También podría gustarte