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: