Está en la página 1de 23

6

Creación de Procedimientos
y
Funciones

Copyright  Oracle Corporation. All rights reserved.


Objetivos

Al completar esta lección debería estar


capacitado para hacer lo siguiente:
• Describir la utilidad de los
procedimientos
• Crear procedimientos con argumentos
• Llamar a un procedimiento

6-2 Copyright  Oracle Corporation. All rights reserved.


Visión General de los
Procedimientos

• Un procedimiento es un bloque PL/SQL


nombrado que realiza una acción.
• Un procedimiento puede estar
almacenado en la base de datos (B.D.),
como un objeto de la B.D, para ser
ejecutado múltiples veces.

6-3 Copyright  Oracle Corporation. All rights reserved.


Sintaxis para la Creación
Procedimientos

CREATE [OR REPLACE] PROCEDURE procedure_name


(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
. . .
IS [AS]
PL/SQL Block;

6-4 Copyright  Oracle Corporation. All rights reserved.


Modos de Parámetros Procedurales
Procedimiento
entorno Parámetro IN
de llamada Parámetro OUT
Parámetro IN OUT

(DECLARE)

BEGIN

EXCEPTION

END;

6-5 Copyright  Oracle Corporation. All rights reserved.


Parámetros IN: Ejemplo (Procedimiento)

7369 v_id

CREATE OR REPLACE PROCEDURE raise_salary


(v_id in emp.empno%TYPE)
IS
BEGIN
UPDATE emp
SET sal = sal * 1.10
WHERE empno = v_id;
END raise_salary;
/
Procedure created.

6-6 Copyright  Oracle Corporation. All rights reserved.


Parámetros IN: Ejemplo (Llamada)
SET SERVEROUTPUT ON
DECLARE
v_id EMP.EMPNO%TYPE:=&NUN_EMP;
v_ename EMP.ENAME%TYPE;
BEGIN
dbms_output.enable;
raise_salary (v_id);

select ename
into v_ename
from emp
where empno = v_id;

dbms_output.put_line('Ha tenido un aumento de sueldo


el empleado '|| v_ename);
END;

6-7 Copyright  Oracle Corporation. All rights reserved.


Parámetros OUT: Ejemplo

Entorno de Llamada Proc. QUERY_EMP

7654 v_id
MARTIN v_name

1250 v_salary
1400 v_ comm

6-8 Copyright  Oracle Corporation. All rights reserved.


Parámetros OUT: Ejemplo (Procedimiento)
CREATE OR REPLACE PROCEDURE query_emp
(v_id IN emp.empno%TYPE,
v_name OUT emp.ename%TYPE,
v_salary OUT emp.sal%TYPE,
v_comm OUT emp.comm%TYPE)
IS
--definición de variables locales
BEGIN
SELECT ename, sal, comm
INTO v_name, v_salary, v_comm
FROM emp
WHERE empno = v_id;
END query_emp;
/

6-9 Copyright  Oracle Corporation. All rights reserved.


Parámetros OUT: Ejemplo (Llamada)
SET SERVEROUTPUT ON
DECLARE
v_id EMP.EMPNO%TYPE:=&NUN_EMP;
v_name emp.ename%TYPE;
v_salary emp.sal%TYPE;
v_comm emp.comm%TYPE;
BEGIN
dbms_output.enable;
QUERY_EMP(V_ID, V_NAME, V_SALARY, V_COMM);
DBMS_OUTPUT.PUT_LINE('NOMBRE: ' || V_NAME ||
' SALARIO: ' || V_SALARY ||' COMISION: ' || V_COMM);
END;

6-10 Copyright  Oracle Corporation. All rights reserved.


Parámetros IN OUT
Calling environment FORMAT_PHONE procedure

'8006330575' '(800)633-0575' v_phone_no

CREATE OR REPLACE PROCEDURE format_phone


(v_phone_no IN OUT VARCHAR2)
IS
BEGIN
v_phone_no := '(' || SUBSTR(v_phone_no,1,3) ||
')' || SUBSTR(v_phone_no,4,3) ||
'-' || SUBSTR(v_phone_no,7);
END format_phone;
/

6-11 Copyright  Oracle Corporation. All rights reserved.


Parámetros IN-OUT: Ejemplo (Llamada)

SET SERVEROUTPUT ON
DECLARE
v_phone_no Varchar2(15):=‘&NUN_TELEFONO’;

BEGIN
dbms_output.enable;
format_phone (v_phone_no);
dbms_output.put_line(v_phone_no);
END;

6-12 Copyright  Oracle Corporation. All rights reserved.


Métodos para Pasar Parámetros

• Por Posición
• Por Nombre
• Combinación

6-13 Copyright  Oracle Corporation. All rights reserved.


Paso de Parámetros:
Procedimiento de Ejemplo
CREATE OR REPLACE PROCEDURE add_dept
(v_name IN dept.dname%TYPE DEFAULT 'unknown',
v_loc IN dept.loc%TYPE DEFAULT 'unknown')
IS
BEGIN
INSERT INTO dept
VALUES (dept_deptno.NEXTVAL, v_name, v_loc);
END add_dept;
/

6-14 Copyright  Oracle Corporation. All rights reserved.


Ejemplos: Paso de Parámetros
begin
add_dept;
add_dept ( 'TRAINING', 'NEW YORK');
add_dept ( v_loc => 'DALLAS', v_name =>
'EDUCATION') ;
add_dept ( v_loc => 'BOSTON') ;
end;
/
PL/SQL procedure successfully completed.

SELECT * FROM dept;

DEPTNO DNAME LOC


------ -------------- -------------
... ... ...
41 unknown unknown
42 TRAINING NEW YORK
43 EDUCATION DALLAS
44 unknown BOSTON

6-15 Copyright  Oracle Corporation. All rights reserved.


Llamada a un Proc. desde un
“Stored Procedure”
CREATE OR REPLACE PROCEDURE process_emps
IS
CURSOR emp_cursor IS
SELECT empno
FROM emp;
BEGIN
FOR emp_rec IN emp_cursor LOOP
raise_salary(emp_rec.empno); --invoke procedure
END LOOP;
COMMIT;
END process_emps;
/
--Incrementa el salario de todos los empleados en un 10%
BEGIN
process_emps();
END;

6-16 Copyright  Oracle Corporation. All rights reserved.


Borrado de Procedimientos en
el Servidor
Usando SQL*Plus:
• Sintaxis:
DROP PROCEDURE procedure_name

• Ejemplo:
DROP PROCEDURE raise_salary;
Procedure dropped.

6-17 Copyright  Oracle Corporation. All rights reserved.


Sintaxis para la Creación de
Funciones
CREATE [OR REPLACE] FUNCTION FUNCTION_name
(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
. . .
RETURN datatype

IS
PL/SQL Block;

6-18 Copyright  Oracle Corporation. All rights reserved.


Creación de una Función
Almacenada Ejemplo
CREATE OR REPLACE FUNCTION get_sal
(v_id IN emp.empno%TYPE)
RETURN NUMBER
IS
v_salary emp.sal%TYPE :=0;
BEGIN
SELECT sal
INTO v_salary
FROM emp
WHERE empno = v_id;
RETURN (v_salary);
END get_sal;
/

6-19 Copyright  Oracle Corporation. All rights reserved.


Llamada a Función Almacenada
Ejemplo
Set serveroutput on
Declare
v_id emp.empno%TYPE;
v_salario emp.sal%type;
Begin
Dbms_output.enable;
v_salario := get_sal(v_id);
Dbms_output.put_line('El salario es: ' || v_salario);
Exception

End;

6-20 Copyright  Oracle Corporation. All rights reserved.


Borrando una Función del
Servidor
Usando SQL*Plus
• Sintaxis:
DROP FUNCTION FUNCTION_name

• Ejemplo:
SQL> DROP FUNCTION get_salary;
Function dropped.

6-21 Copyright  Oracle Corporation. All rights reserved.


¿Procedimiento o Función?

Procedimiento Función
Entorno IN argumento IN argumento
Entorno
de llamada OUT argumento de llamada
IN OUT argum.

(DECLARE) (DECLARE)

BEGIN BEGIN

EXCEPTION EXCEPTION

END; END;

6-22 Copyright  Oracle Corporation. All rights reserved.


Comparación entre
Procedimientos y Funciones
Procedimiento Función
Se ejecuta como una Son llamadas como parte de
sentencia PL/SQL una expresión
No devuelve un tipo de Deben contener RETURN
dato tipo de dato
Pueden devolver uno o Tienen que devolver un valor
más valores

6-23 Copyright  Oracle Corporation. All rights reserved.

También podría gustarte