Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructura de un procedimiento
PARÁMETROS: Los parámetros son como variables, contienen datos que se pueden especificar al
momento de llamar al procedimiento.
VARIABLES: Como en un bloque anónimo, en los procedimientos se pueden crear variables, pero éstas
variables sólo pueden usadas en código dentro del procedimiento.
Para poder ejecutar los procedimientos PL/SQL hay que ejecutar primero en la consola el comando
%ROWTYPE
NOMBRE_VARIABLE NOMBRE_OBJETO%ROWTYPE;
Ejercicio1
Crear un procedimiento que muestre por pantalla el apellido y el salario de un empleado, cuyo
emp_no pasamos como parametro.
V_APELLIDO VARCHAR2(15);
V_SALARIO NUMBER(6,2);
BEGIN
EXCEPTION
Ejercicio 2
V_DNOMBRE VARCHAR2(15);
V_LOC VARCHAR2(15);
BEGIN
EXCEPTION
Crear un procedimiento que suba el salario un 3% a los empleados del departamento que pasemos
como paramento. (El parámetro es el nombre del departamento).
BEGIN
EXCEPTION
Ejercicio 4
V_DEPART DEPART%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE(V_DEPART.DEPT_NO||' '||V_DEPART.DNOMBRE||'
'||V_DEPART.LOC);
EXCEPTION
BEGIN
SENTENCIAS A REALIZAR
RETURN VARIABLE
Ejecutar funciones
BEGIN
DBMSOUTPUT.PUT_LINE(NOMBRE DE LA FUNCION(PARAMETROS));
Ejercicio 1
BEGIN
V_RESULTADO := CANTIDAD * (1 + (IVA / 100));
RETURN V_RESULTADO;
END CON_IVA;
/
BEGIN
DBMS_OUTPUT.PUT_LINE(CON_IVA(1000, 25));
END;
/
3ºEVALUACION
Funciones y procedimientos locales
Ejercicio 9
BEGIN
END EJERCICIO9;
/
Ejercicio 10
V_NUMERO_EMPLEADOS NUMBER(3);
V_SUMA_SALARIOS NUMBER(5);
BEGIN
V_NUMERO_EMPLEADOS:=EMPLEADOS(PDEPT_NO);
V_SUMA_SALARIOS:=SALARIO(PDEPT_NO);
END EJERCICIO10;
/
Ejemplo 1
BEGIN
OPEN CURL1;
FETCH CURL1 INTO V_DNOMBRE, V_LOC;
WHILE CURL1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE (V_DNOMBRE ||'*'||V_LOC);
V_REG CURL1%ROWTYPE;
BEGIN
OPEN CURL1;
FETCH CURL1 INTO V_REG.DNOMBRE, V_REG.LOC;
WHILE CURL1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE (V_REG.DNOMBRE ||'*'||V_REG.LOC);
V_REG CURL1%ROWTYPE;
BEGIN
OPEN CURL1;
FETCH CURL1 INTO V_REG.ARTICULO, V_REG.COD_FABRICANTE, V_REG.PESO,
V_REG.CATEGORIA;
WHILE CURL1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE
(RPAD(V_REG.ARTICULO,20)||RPAD(V_REG.COD_FABRICANTE,5)||
RPAD(V_REG.PESO,5)||RPAD(V_REG.CATEGORIA,11));
V_REG CURL1%ROWTYPE;
BEGIN
V_DEPT_NO :=PDEPT_NO;
OPEN CURL1;
FETCH CURL1 INTO V_REG.DEPT_NO, V_REG.DNOMBRE, V_REG.LOC;
WHILE CURL1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE (V_REG.DEPT_NO||' '||V_REG.DNOMBRE||' '||V_REG.LOC);
BEGIN
OPEN C1(PDEPT_NO);
FETCH C1 INTO V_REG.APELLIDO, V_REG.DEPT_NO;
WHILE C1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(V_REG.APELLIDO||' '||V_REG.DEPT_NO);
FETCH C1 INTO V_REG.APELLIDO, V_REG.DEPT_NO;
END LOOP;
CLOSE C1;
END;
/
Ejemplo 2A
Ejemplo 2B
BEGIN
OPEN C1(PCOD_FABRICANTE);
FETCH C1 INTO V_REG.ARTICULO, V_REG.COD_FABRICANTE, V_REG.PESO, V_REG.CATEGORIA;
WHILE C1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE('EL ARTICULO '||V_REG.ARTICULO||' CON CODIGO DE FABRICANTE
'||V_REG.COD_FABRICANTE||' CON UN PESO DE '||V_REG.PESO||' Y DE CATEGORIA
'||V_REG.CATEGORIA);
FETCH C1 INTO V_REG.ARTICULO, V_REG.COD_FABRICANTE, V_REG.PESO, V_REG.CATEGORIA;
END LOOP;
CLOSE C1;
END EJEMPLO2;
/
Ejemplo 1
BEGIN
OPEN C1;
FETCH C1 INTO V_SALARIO;
WHILE C1%FOUND LOOP
V_SUBIDA:=GREATEST((V_SALARIO/100)*PPORCENTAJE,PIMPORTE);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
END EJERCICIO6;
/
EJEMPLO
EXCEPTION
WHEN V_COMISION_NEGATIVA
THEN DBMS_OUTPUT.PUT_LINE('LA COMISION NO PUEDE SER NEGATIVA');
END;
/
FOR EACH ROW una vez por cada fila afectada por la acción que disparo el disparador.
BEGIN
END PAQUETE_EJERCICIO4;
/
EJEMPLO TABLA