Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Antes de almacenarce, todos los programas PL/SQL pasan por un analizador sintactico
y lexicogr�fico.
BLOQUES
Estructura:
Declare
[...] -- Contiene variables,ctes, cursores, y excep def para los us
Begin
[...] -- Sentencias SQL para manipular los datos y sentencias PL/SQL
para manipular datos en bloque (OBLIGATORIA)
Exception
[...] -- Acciones a tomar en caso de errores.
End;
ejemplo
Agregar un nuevo armario y mover los equipos que est�n en el armario 03 al nuevo
armario el cu�l ser�
el n�mero 04, contar la cantidad de equipos que han cambiado de lugar y eliminar el
armario 03.
declare
num_equipos NUMBER(2);
begin
INSERT INTO armario (N_armario, Tipo)VALUES (04,'M');
UPDATE equipo SET N_armario = 04 where NN_armario = 03;
num_equipos := SQL%ROWCOUNT; --Cuenta la cantidad de filas que han sido
afectadas por la secuencia anterior a modificado
DELETE FROM armario WHERE N_armario = 03;
DBMS.OUTPUT.PUT_LINE (num_equipos || 'equipos movidos al armario 4'); -- "||"
concatena
exception
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ( 'Error en el programa');
end;
TIPOS DE BLOQUES
PROCEDURE name
IS/AS
BEGIN
--satements
[EXCEPTION]
END;
FUNTION name
RETURN datatypes
IS/AS
BEGIN
--satements
RETURN value
[EXCEPTION]
END;
CURSORES
Cursos impl�cito: Cuando se ejecuta una consulta el resultado no se muestra
directamente al usuariom sino que queda almacenada en un �rea de memoria
llamada CURSOR.
Por ejemplo:
Si queremos saber el n�mero de equiposque tenemos en el inventario:
BEGIN
SELECT COUNT(*) FROM equipo;
END;
-- Esto da error. Es necesario utilizar una variable junto con la clausula
INTO
DECLARE
total_equipos NUMBER(2);
BEGIN
SELECT COUNT(*) INTO total_equipos FROM equipo;
DBMS_OUTPUT.PUT_LINE ('Total equipos: ' || total_equipos);
END;
CONDICIONALES
If: Alternativa Simple
BEGIN
--Statements
IF [...] THEN
--Statements;
END IF;
Alternativa doble
BEGIN
--Statements
IF [...] THEN
--Statements;
ELSE
--Statements;
END IF;
Alternativa m�ltiple
BEGIN
--Statements
IF [...] THEN
--Statements;
ELSIF [...]
--Statements;
END IF;
CASE: de comprobaci�n
BEGIN
--Statements
CASE <expr>;
WHEN <valor_1>
THEN
--statements;
ELSE
--statements;
END CASE;
De B�squeda
BEGIN
--Statements
CASE
WHEN <cond_1>
THEN
--statements;
ELSE
--statements;
END CASE;
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE ('ESTE USUARIO NO POSEE RESERVAS ACTIVAS');
END;
ESTRUCTURAS DE CONTROL
Repetitivas
GOTO <etiqueta>
Ejercicio
Crear la funcion PWD para obtener una contrase�a del usuario. Esta funcion puede
ser �til para resetear
dicha contrase�a en caso de olvido. La contrase�a ser� el NNOMBRE del usuario
escrito al rev�s.
�C�mo lo har�as?
BEGIN
select SUBSTR(nombre, 1, INSTR(nombre, ' '))
INTO v_nombre
FROM usuario
WHERE Id_usuario = usr;
FOR i IN REVERSE 1..LENGTH(V_NOMBRE) LOOP
password := password || SUBSTR (v_nombre,i,1);
END LOOP;
RETURN passwor;
EXCEPTION
WHEN no_data_found THEN
Return ' sin contrase�a';
END;