Oracle Procedimientos almacenados y funciones de PL/SQL con ejemplos

⚡ Resumen inteligente

Los subprogramas PL/SQL son bloques, procedimientos y funciones con nombre, que se almacenan en la base de datos y se invocan por su nombre. Un procedimiento ejecuta un proceso y una función devuelve un valor; ambos intercambian datos mediante los parámetros IN, OUT e IN OUT, y la palabra clave RETURN.

  • 🧩 Dos subprogramas: Los procedimientos ejecutan un proceso; las funciones realizan un cálculo y devuelven un valor.
  • ???? parámetros: IN transmite la entrada, OUT devuelve la salida, e IN OUT hace ambas cosas.
  • ↩️ REGRESO: Devuelve el control a quien realiza la llamada; en una función, también devuelve un valor de un tipo declarado.
  • 🗄️ Objetos almacenados: Ambos se guardan como objetos de base de datos y se pueden invocar desde otros bloques.
  • 🔎 SELECCIONAR Uso: Una función sin DML puede llamarse dentro de una sentencia SELECT; un procedimiento no.
  • 🇧🇷 Diferencia clave: Una función debe devolver un valor, mientras que un procedimiento no.
  • 🛠️ Funciones integradas: Oracle Funciones de conversión de barcos, cadenas de texto y fechas listas para usar.

Oracle Procedimientos almacenados y funciones PL/SQL

¿Qué son los subprogramas PL/SQL?

En este tutorial, verá una descripción detallada de cómo crear y ejecutar los bloques, procedimientos y funciones mencionados.

Los procedimientos y las funciones son subprogramas que se pueden crear y guardar en la base de datos como objetos de base de datos. También se pueden llamar o referenciar dentro de otros bloques.

También cubrimos las principales diferencias entre estos dos subprogramas y analizamos las Oracle funciones integradas.

Terminologías en subprogramas PL/SQL

Antes de aprender sobre los subprogramas PL/SQL, analizaremos la terminología que forman parte de estos subprogramas.

Parámetro

Un parámetro es una variable o marcador de posición de cualquier valor válido. Tipo de datos PL/SQL a través del cual el subprograma PL/SQL intercambia valores con el código principal. Este parámetro permite la entrada a los subprogramas y extracción de valores de ellos.

  • Estos parámetros deben definirse junto con los subprogramas en el momento de su creación.
  • Se incluyen en la instrucción de llamada para interactuar con los subprogramas.
  • El tipo de datos del parámetro en el subprograma y en la instrucción que lo llama deben ser iguales.
  • No se debe mencionar el tamaño del tipo de datos al declarar los parámetros, ya que el tamaño es dinámico.

En función de su finalidad, los parámetros se clasifican de la siguiente manera:

  1. EN Parámetro
  2. Parámetro de salida
  3. Parámetro ENTRADA SALIDA

EN Parámetro

  • Se utiliza para proporcionar datos de entrada a los subprogramas.
  • Es una variable de solo lectura dentro de los subprogramas; su valor no se puede cambiar dentro del subprograma.
  • En la instrucción de llamada, puede ser una variable, un valor literal o una expresión, como '5*8' o 'a/b'.
  • Por defecto, los parámetros son de tipo IN.

Parámetro de salida

  • Se utiliza para obtener la salida de los subprogramas.
  • Es una variable de lectura y escritura dentro de los subprogramas; su valor puede modificarse dentro de ellos.
  • En la instrucción de llamada, siempre debe haber una variable para almacenar el valor del subprograma.

Parámetro ENTRADA SALIDA

  • Se utiliza tanto para introducir datos como para obtener resultados de los subprogramas.
  • Es una variable de lectura y escritura dentro de los subprogramas; su valor puede modificarse dentro de ellos.
  • En la instrucción de llamada, siempre debe haber una variable para almacenar el valor del subprograma.

El tipo de parámetro debe especificarse al crear los subprogramas.

DEVOLUCION

RETURN es la palabra clave que indica al compilador que transfiera el control del subprograma a la instrucción que lo llama. En un subprograma, RETURN simplemente significa que el control debe salir del subprograma; una vez que el controlador encuentra RETURN, el código que le sigue se omite.

Normalmente, el bloque principal llama a los subprogramas, y el control pasa del bloque principal al subprograma llamado. La instrucción RETURN en el subprograma devuelve el control al bloque principal. En el caso de las funciones, la instrucción RETURN también devuelve un valor, cuyo tipo de dato se especifica al declarar la función.

¿Qué es un procedimiento en PL/SQL?

A Procedimiento En PL/SQL, una unidad de subprograma consta de un grupo de sentencias PL/SQL que se pueden llamar por su nombre. Cada procedimiento tiene su propio nombre único y se almacena en el Oracle base de datos como objeto de base de datos.

Nota: Un subprograma no es más que un procedimiento, y debe crearse manualmente según los requisitos. Una vez creado, se almacena como un objeto de base de datos.

Las características de una unidad de subprograma de procedimiento en PL/SQL son:

  • Los procedimientos son bloques independientes que se pueden almacenar en el base de datos de CRISPR Medicine News.
  • Se les puede llamar por su nombre para ejecutar las sentencias PL/SQL.
  • Se utilizan principalmente para ejecutar un proceso.
  • Pueden contener bloques anidados, o estar anidados dentro de otros bloques o paquetes.
  • Contienen una parte de declaración (opcional), una parte de ejecución y una parte de manejo de excepciones (opcional).
  • Los valores se pueden pasar a un procedimiento o recuperarse de él mediante parámetros.
  • Estos parámetros deben incluirse en la declaración de llamada.
  • Un procedimiento puede tener una instrucción RETURN para devolver el control al bloque que lo llama, pero no puede devolver ningún valor a través de RETURN.
  • Los procedimientos no se pueden llamar directamente desde las sentencias SELECT; se pueden llamar desde otro bloque o mediante la palabra clave EXEC.

Sintaxis

CREATE OR REPLACE PROCEDURE
<procedure_name>
(
<parameter1 IN/OUT <datatype>
..
.
)
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • La instrucción CREATE PROCEDURE le indica al compilador que cree un nuevo procedimiento. La palabra clave 'OR REPLACE' le indica que reemplace el procedimiento existente (si lo hay) con el actual.
  • El nombre del procedimiento debe ser único.
  • La palabra clave 'IS' se usa cuando el procedimiento almacenado está anidado dentro de otro bloque. Si el procedimiento es independiente, se usa 'AS'. Aparte de esta norma de codificación, ambas tienen el mismo significado.

Ejemplo 1: Creación de un procedimiento y su llamada mediante EXEC. En este ejemplo, creamos un Oracle Procedimiento que toma un nombre como entrada e imprime un mensaje de bienvenida como salida, utilizando el comando EXEC para llamarlo.

CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2)
IS
BEGIN
dbms_output.put_line ('Welcome '|| p_name);
END;
/
EXEC welcome_msg ('Guru99');

Code Explicación:

  • Code línea 1: Se crea el procedimiento con el nombre 'welcome_msg' y un parámetro 'p_name' de tipo 'IN'.
  • Code línea 4: Imprimir el mensaje de bienvenida concatenando el nombre introducido.
  • El procedimiento se ha completado correctamente.
  • Code línea 7: Llamando al procedimiento usando EXEC con el parámetro 'Guru99'. El procedimiento se ejecuta e imprime “Bienvenido Guru99 ".

¿Qué es una función?

Una función es un subprograma PL/SQL independiente. Al igual que un procedimiento, una función tiene un nombre único y se almacena como un objeto de base de datos PL/SQL. Sus características son:

  • Las funciones son bloques independientes que se utilizan principalmente para realizar cálculos.
  • Una función utiliza la palabra clave RETURN para devolver un valor, cuyo tipo de datos se define en el momento de su creación.
  • Una función debe devolver un valor o generar una excepción; la instrucción return es obligatoria en las funciones.
  • Una función sin sentencias DML puede llamarse directamente en una consulta SELECT, mientras que una función con DML solo puede llamarse desde otros bloques PL/SQL.
  • Puede contener bloques anidados, o estar anidado dentro de otros bloques o paquetes.
  • Contiene una parte de declaración (opcional), una parte de ejecución y una parte de manejo de excepciones (opcional).
  • Los valores se pueden pasar a la función o recuperarse de ella a través de parámetros.
  • Estos parámetros deben incluirse en la declaración de llamada.
  • Una función también puede devolver un valor a través de parámetros OUT, además de utilizar RETURN.
  • Dado que siempre devuelve un valor, la instrucción que la llama siempre utiliza un operador de asignación para rellenar una variable.

Estructura de la función PL/SQL

Sintaxis

CREATE OR REPLACE FUNCTION
<function_name>
(
<parameter1 IN/OUT <datatype>
)
RETURN <datatype>
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • CREATE FUNCTION le indica al compilador que cree una nueva función. 'OR REPLACE' le indica que reemplace la función existente (si la hay) con la actual.
  • El nombre de la función debe ser único.
  • Se debe mencionar el tipo de datos RETURN.
  • La palabra clave 'IS' se usa cuando la función está anidada dentro de otro bloque. Si la función es independiente, se usa 'AS'.

Ejemplo 1: Creación de una función y su llamada mediante un bloque anónimo. En este programa, creamos una función que toma un nombre como entrada y devuelve un mensaje de bienvenida, utilizando un bloque anónimo y una instrucción SELECT para llamarla.

Crear una función PL/SQL y llamarla

CREATE OR REPLACE FUNCTION welcome_msg_func ( p_name IN VARCHAR2) RETURN VARCHAR2
IS
BEGIN
RETURN ('Welcome '|| p_name);
END;
/
DECLARE
lv_msg VARCHAR2(250);
BEGIN
lv_msg := welcome_msg_func ('Guru99');
dbms_output.put_line(lv_msg);
END;
/
SELECT welcome_msg_func('Guru99') FROM DUAL;

Code Explicación:

  • Code línea 1: Creando la función con el nombre 'welcome_msg_func' y un parámetro 'p_name' de tipo 'IN'.
  • Code línea 2: Declarando el tipo de retorno como VARCHAR2.
  • Code línea 5: Devuelve el valor concatenado 'Welcome' y el valor del parámetro.
  • Code línea 8: Bloque anónimo para llamar a la función anterior.
  • Code línea 9: Declarar la variable con el mismo tipo de dato que el tipo de retorno de la función.
  • Code línea 11: Llamar a la función y asignar el valor de retorno a la variable 'lv_msg'.
  • Code línea 12: Imprimiendo el valor de la variable. La salida es “Bienvenido Guru99 ".
  • Code línea 14: Llamando a la misma función a través de una instrucción SELECT. El valor devuelto se dirige a la salida estándar.

Similitudes entre un procedimiento y una función

  • Ambos pueden ser llamados desde otros bloques PL/SQL.
  • Si una excepción generada en el subprograma no se maneja en su manejo de excepciones sección, se propaga al bloque de llamada.
  • Ambos pueden tener tantos parámetros como sean necesarios.
  • Ambos se tratan como objetos de base de datos en PL/SQL.

Procedimiento vs. Función: Diferencias clave

Procedimiento Función
Se utiliza principalmente para ejecutar un proceso determinado. Se utiliza principalmente para realizar algún cálculo.
No se puede llamar en una instrucción SELECT. Una función que no contiene instrucciones DML puede ser llamada en una instrucción SELECT.
Utiliza un parámetro de SALIDA para devolver un valor. Utiliza RETURN para devolver un valor.
No es obligatorio devolver un valor. Es obligatorio devolver un valor.
La tecla RETURN simplemente finaliza el control del subprograma. RETURN finaliza el control del subprograma y también devuelve el valor.
El tipo de datos de retorno no se especifica en el momento de la creación. El tipo de datos de retorno es obligatorio en el momento de la creación.

Funciones integradas en PL/SQL

PL / SQL Contiene diversas funciones integradas para trabajar con tipos de datos de cadena y fecha. Aquí veremos las funciones más utilizadas y su uso.

Funciones de conversión

Estas funciones integradas convierten un tipo de dato en otro.

Nombre de la función Uso Ejemplo
A_CHAR Convierte otro tipo de dato a un tipo de dato de carácter. TO_CHAR(123);
FECHA_HASTA (cadena, formato) Convierte la cadena de texto dada en una fecha. La cadena debe coincidir con el formato. TO_DATE('2015-ENE-15', 'AAAA-MON-DD'); Resultado: 1 / 15 / 2015
TO_NUMBER (texto, formato) Convierte el texto en un número con el formato especificado. En dicho formato, '9' indica la cantidad de dígitos. Seleccione TO_NUMBER('1234′,'9999') de dual; Resultado: 1234. Seleccione TO_NUMBER('1,234.45','9,999.99') de dual; Resultado: 1234.45

Funciones de cadena

Estas funciones se utilizan en el tipo de datos de caracteres.

Nombre de la función Uso Ejemplo
INSTR(texto, cadena, inicio, ocurrencia) Indica la posición de un texto específico en la cadena dada. `text` es la cadena principal, `string` es el texto a buscar, `start` es la posición inicial (opcional) y `occurrence` es la frecuencia de aparición de la cadena buscada (opcional). Seleccione INSTR('AEROPLANE','E',2,1) de dual; Resultado: 2. Seleccione INSTR('AEROPLANE','E',2,2) de dual; Resultado: 9 (segunda aparición de E)
SUBSTR (texto, inicio, longitud) Devuelve el valor de la subcadena de la cadena principal. `text` es la cadena principal, `start` es la posición inicial y `length` es la longitud de la subcadena. seleccionar substr('aeroplane',1,7) de dual; Resultado: aeropla
MAYÚSCULAS (texto) Devuelve el texto proporcionado en mayúsculas. Seleccione superior('guru99') de dual; Resultado: GURU99
INFERIOR (texto) Devuelve el texto proporcionado en minúsculas. Seleccione lower('AerOpLane') de dual; Resultado: avión
INITCAP (texto) Devuelve el texto dado con la letra inicial de cada palabra en mayúscula. Seleccione INITCAP('guru99') de dual; Resultado: Guru99. Seleccione INITCAP('mi historia') de dual; Resultado: Mi historia
LONGITUD (texto) Devuelve la longitud de la cadena dada. Seleccione LENGTH('guru99') de dual; Resultado: 6
LPAD (texto, longitud, carácter de relleno) Rellena la cadena de la izquierda con el carácter especificado hasta alcanzar la longitud total indicada. Seleccione LPAD('guru99', 10, '$') de dual; Resultado: $$$$gurú99
RPAD (texto, longitud, pad_char) Rellena la cadena de la derecha con el carácter especificado hasta alcanzar la longitud total indicada. Seleccione RPAD('guru99',10,'-') de dual; Resultado: gurú99—-
LTRIM (texto) Elimina el espacio en blanco inicial del texto. Seleccione LTRIM(' Guru99') de doble; Resultado: Guru99
RTRIM (texto) Elimina el espacio en blanco final del texto. Seleccione RTRIM('Guru99') de dual; Resultado: Guru99

Funciones de fecha

Estas funciones se utilizan para manipular fechas.

Nombre de la función Uso Ejemplo
AÑADIR_MESES (fecha, número de meses) Agrega los meses indicados a la fecha. AGREGAR_MESES('2015-01-01',5); Resultado: 05 / 01 / 2015
FECHA DEL SISTEMA Devuelve la fecha y hora actuales del servidor. Seleccione SYSDATE de dual; Resultado: 10/4/2015 2:11:43
TRUNC Redondea la variable de fecha hacia abajo al valor más bajo posible. seleccione sysdate, TRUNC(sysdate) de dual; Resultado: 10/4/2015 2:12:39 PM, 10/4/2015
REDONDA Redondea la fecha al límite más cercano, ya sea mayor o menor. Seleccione sysdate, REDONDEAR(sysdate) de dual; Resultado: 10/4/2015 2:14:34 PM, 10/5/2015
MESES_ENTRE Devuelve el número de meses entre dos fechas. Seleccione MENTHS_BETWEEN (sysdate+60, sysdate) de dual; Resultado: 2

Preguntas Frecuentes

Una función debe devolver un valor y puede utilizarse dentro de una sentencia SELECT si no contiene operaciones DML. Un procedimiento ejecuta un proceso, no necesita devolver un valor y no puede ser llamado desde una sentencia SELECT.

IN pasa un valor de solo lectura al subprograma. OUT devuelve un valor al llamador. IN OUT realiza ambas funciones: recibe un valor y devuelve uno posiblemente modificado a través del mismo parámetro.

Sí, siempre que no contenga instrucciones DML como INSERT, UPDATE o DELETE. Una función que realiza operaciones DML solo puede ser llamada desde otro bloque PL/SQL, no directamente dentro de una consulta.

Sí. La IA puede elaborar un PROCEDIMIENTO DE CREACIÓN o una FUNCIÓN DE CREACIÓN con los modos de parámetros correctos y un tipo DE RETORNO a partir de una descripción simple. RevRevise los parámetros y el manejo de excepciones antes de la implementación.

OR REPLACE sobrescribe un procedimiento o función existente del mismo nombre sin eliminarping Primero, esto mantiene las subvenciones intactas y es la forma habitual de volver a implementar un subprograma modificado.

Resumir este post con: