Requisito previo:
Diferencia entre funciones y procedimientos almacenados en PL/SQL
Diferencias entre procedimientos almacenados (SP) y funciones (funciones definidas por el usuario (UDF)):
1. SP puede o no devolver un valor, pero UDF debe devolver un valor. La declaración de retorno de la función devuelve el control al programa que llama y devuelve el resultado de la función.
Ejemplo:
SP -> create or replace procedure GEEKS(x int) is y int; begin ..... UDF-> FUNCTION GEEKS(x int) /*return statement so we must return value in function */ RETURN int IS y int; BEGIN .....
2. SP puede tener parámetros de entrada/salida pero UDF solo tiene parámetros de entrada.
Ejemplo:
SP -> CREATE OR REPLACE PROCEDURE Factorial(x IN NUMBER, result OUT NUMBER) is begin .... UDF -> FUNCTION Factorial(x IN NUMBER) /* only input parameter */ return NUMBER is result NUMBER; begin .....
3. Podemos llamar a UDF desde SP pero no podemos llamar a SP desde una función.
Ejemplo:
Calling UDF cal() inside SP square() but reverse is not possible. set serveroutput on; declare a int; c int; function cal(temp int) return int as ans int; begin ans:=temp* temp; return ans; end; procedure square(x in int, ans out int) is begin dbms_output.put_line('calling function in procedure'); ans:= cal(x); end; begin a:=6; square(a, c); dbms_output.put_line('the answer is '|| c); end; OUTPUT: calling function in the procedure the answer is 36
4. no puede SP
5. No se permite usar SP en declaraciones SELECT, pero se puede usar UDF .
6. SP no se puede usar en ningún lugar de la parte WHERE/HAVING/SELECT de las consultas SQL, pero se puede usar UDF .
7. El plan de ejecución se puede reutilizar en SP pero en UDF se compilará cada vez.
8. Podemos usar el manejo de excepciones try-catch en SP pero no podemos hacerlo en UDF .
9. Podemos usar transacciones en SP pero no es posible en UDF .
10. Podemos considerar UDF como una expresión pero no es posible en SP.
11. SP no se puede usar en la cláusula de combinación, pero es posible en UDF como conjunto de resultados.
12. SP puede tener variables de tabla y tablas temporales, pero UDF solo puede tener variables de tabla, ya que no permite el uso de tablas temporales.
13. Ventajas de usar UDF –
- Permite una ejecución más rápida
- Programación Modular
- Puede reducir el tráfico de red (datos)
Ventajas de usar SP –
- Medidas de seguridad mejoradas
- Se reduce el tráfico cliente/servidor.
- Abstracción de programación y reutilización eficiente de código
- Ejecución precompilada