procedimientos - ¿Cuál es la diferencia entre función y procedimiento en PL/SQL?
procedimiento pl sql select (8)
- podemos llamar a un procedimiento almacenado dentro de Procedimiento almacenado, Función dentro de la función, StoredProcedure dentro de la función pero no podemos llamar a la función dentro del procedimiento almacenado.
- podemos llamar a la función dentro de la instrucción select.
- Podemos devolver el valor de la función sin pasar el parámetro de salida como un parámetro al procedimiento almacenado.
Esta es la diferencia que encontré. Por favor, hágamelo saber si alguno.
¿Cuál es la diferencia entre función y procedimiento en PL / SQL?
Las funciones deben devolver un valor, el procedimiento puede devolver uno o más valores usando el parámetro OUT o puede que no devuelva ningún valor.
Las funciones se pueden invocar desde SQL donde los procedimientos no pueden.
Las funciones son para computaciones, mientras que los Procedimientos son para la lógica de negocios.
El procedimiento está precompilado, las funciones no.
El procedimiento admite la resolución de nombre diferida , donde las funciones no se usan.
De una manera absolutamente simple, tiene este significado.
Funciones:
Estos subprogramas devuelven un valor único ; utilizado principalmente para calcular y devolver un valor.
Procedimiento:
Estos subprogramas no devuelven un valor directamente; usado principalmente para realizar una acción.
Programa de ejemplo:
CREATE OR REPLACE PROCEDURE greetings
BEGIN
dbms_output.put_line(''Hello World!'');
END ;
/
Ejecución de un procedimiento independiente:
Un procedimiento independiente se puede llamar de dos maneras:
• Usar la palabra clave EXECUTE
• Llamar al nombre del procedimiento desde un bloque PL / SQL
El procedimiento también se puede llamar desde otro bloque PL / SQL:
BEGIN
greetings;
END;
/
Función:
CREATE OR REPLACE FUNCTION totalEmployees
RETURN number IS
total number(3) := 0;
BEGIN
SELECT count(*) into total
FROM employees;
RETURN total;
END;
/
El siguiente programa llama a la función totalCustomers
de otro bloque
DECLARE
c number(3);
BEGIN
c := totalEmployees();
dbms_output.put_line(''Total no. of Employees: '' || c);
END;
/
En pocas palabras: la función devuelve algo. Puede usar la función en la consulta SQL. El procedimiento es parte del código para hacer algo con los datos pero no puede invocar el procedimiento desde la consulta, debe ejecutarlo en el bloque PL / SQL.
Las siguientes son las principales diferencias entre el procedimiento y la función,
- El procedimiento se denomina bloque PL / SQL que realiza una o más tareas. donde la función se denomina bloque PL / SQL que realiza una acción específica.
- El procedimiento puede o no devolver el valor donde la función debe devolver un valor.
- podemos llamar funciones en la declaración de selección, donde como procedimiento no podemos.
Tanto los procedimientos almacenados como las funciones se denominan bloacks que residen en la Base de datos y se pueden ejecutar cuando sea necesario.
Las principales diferencias son:
1. Un procedimiento almacenado puede devolver valores utilizando los parámetros, pero también se puede escribir de una manera sin devolver un valor. Pero una función debe devolver un valor
2. Un procedimiento almacenado no se puede usar en una declaración select donde las funciones se pueden usar en una instrucción select.
Hablando en términos prácticos, iría por un procedimiento almacenado para un grupo específico de requisitos y una función para un requisito común que podría compartirse en múltiples escenarios para g: comparar dos cadenas, o recortarlas o tomar la última parte, si tenemos un función para eso, podríamos usarlo globalmente para cualquier aplicación que tengamos
Un procedimiento no tiene un valor de retorno, mientras que una función tiene.
Ejemplo:
CREATE OR REPLACE PROCEDURE my_proc
(p_name IN VARCHAR2 := ''John'') as begin ... end
CREATE OR REPLACE FUNCTION my_func
(p_name IN VARCHAR2 := ''John'') return varchar2 as begin ... end
Observe cómo la función tiene una cláusula de retorno entre la lista de parámetros y la palabra clave "como". Esto significa que se espera que la última declaración dentro del cuerpo de la función diga algo así como:
return(my_varchar2_local_variable);
Donde my_varchar2_local_variable es un varchar2 que debe devolver esa función.
Una función puede alinearse en una declaración de SQL, por ejemplo
select foo
,fn_bar (foo)
from foobar
Lo cual no se puede hacer con un procedimiento almacenado. La arquitectura del optimizador de consultas limita lo que se puede hacer con las funciones en este contexto, que requieren que sean puras (es decir, las mismas entradas siempre producen el mismo resultado). Esto restringe lo que se puede hacer en la función, pero permite que se use en línea en la consulta si se define como "pura".
De lo contrario, una función (no necesariamente determinista) puede devolver una variable o un conjunto de resultados. En el caso de una función que devuelve un conjunto de resultados, puede unirlo con alguna otra selección en una consulta. Sin embargo, no puede usar una función no determinista como esta en una subconsulta correlacionada ya que el optimizador no puede predecir qué tipo de conjunto de resultados se devolverá (esto es computablemente intratable, como el problema de detención).