Oracle Procedimientos almacenados y funciones de PL/SQL con ejemplos

En este tutorial, verรก la descripciรณn detallada sobre cรณmo crear y ejecutar los bloques nombrados (procedimientos y funciones).

Los procedimientos y funciones son los subprogramas que se pueden crear y guardar en la base de datos como objetos de la base de datos. Tambiรฉn se les puede llamar o recomendar dentro de los otros bloques.

Aparte de esto, cubriremos las principales diferencias entre estos dos subprogramas. Ademรกs, vamos a discutir el Oracle funciones integradas.

Terminologรญas en subprogramas PL/SQL

Antes de aprender sobre los subprogramas PL/SQL, discutiremos las diversas terminologรญas que forman parte de estos subprogramas. A continuaciรณn se muestran las terminologรญas que vamos a discutir.

Parรกmetro

El parรกmetro es variable o marcador de posiciรณn de cualquier vรกlido. tipo de datos PL/SQL a travรฉs del cual el subprograma PL/SQL intercambia los valores con el cรณdigo principal. Este parรกmetro permite dar entrada a los subprogramas y extraer de estos subprogramas.

  • Estos parรกmetros deben definirse junto con los subprogramas en el momento de su creaciรณn.
  • Estos parรกmetros se incluyen en la declaraciรณn de llamada de estos subprogramas para interactuar los valores con los subprogramas.
  • El tipo de datos del parรกmetro en el subprograma y la declaraciรณn de llamada deben ser los mismos.
  • El tamaรฑo del tipo de datos no debe mencionarse en el momento de la declaraciรณn del parรกmetro, ya que el tamaรฑo es dinรกmico para este tipo.

Segรบn su finalidad los parรกmetros se clasifican en

  1. EN Parรกmetro
  2. Parรกmetro de salida
  3. Parรกmetro ENTRADA SALIDA

EN Parรกmetro

  • Este parรกmetro se utiliza para dar entrada a los subprogramas.
  • Es una variable de solo lectura dentro de los subprogramas. Sus valores no se pueden cambiar dentro del subprograma.
  • En la declaraciรณn de llamada, estos parรกmetros pueden ser una variable, un valor literal o una expresiรณn, por ejemplo, podrรญa ser la expresiรณn aritmรฉtica como '5*8' o 'a/b' donde 'a' y 'b' son variables. .
  • Por defecto, los parรกmetros son de tipo IN.

Parรกmetro de salida

  • Este parรกmetro se utiliza para obtener resultados de los subprogramas.
  • Es una variable de lectura-escritura dentro de los subprogramas. Sus valores se pueden cambiar dentro de los subprogramas.
  • En la declaraciรณn de llamada, estos parรกmetros siempre deben ser una variable para contener el valor de los subprogramas actuales.

Parรกmetro ENTRADA SALIDA

  • Este parรกmetro se utiliza tanto para dar entrada como para obtener salida de los subprogramas.
  • Es una variable de lectura-escritura dentro de los subprogramas. Sus valores se pueden cambiar dentro de los subprogramas.
  • En la declaraciรณn de llamada, estos parรกmetros siempre deben ser una variable para contener el valor de los subprogramas.

Este tipo de parรกmetro debe mencionarse al momento de crear los subprogramas.

DEVOLUCION

RETURN es la palabra clave que indica al compilador que cambie el control del subprograma a la declaraciรณn de llamada. En el subprograma RETURN simplemente significa que el control necesita salir del subprograma. Una vez que el controlador encuentre la palabra clave RETURN en el subprograma, se omitirรก el cรณdigo posterior.

Normalmente, el bloque principal o padre llamarรก a los subprogramas y, a continuaciรณn, el control pasarรก de ese bloque principal a los subprogramas llamados. La instrucciรณn RETURN en el subprograma devolverรก el control a su bloque principal. En el caso de las funciones, la instrucciรณn RETURN tambiรฉn devuelve el valor. El tipo de datos de este valor siempre se menciona en el momento de la declaraciรณn de la funciรณn. El tipo de datos puede ser cualquier tipo de datos PL/SQL vรกlido.

ยฟQuรฉ es el procedimiento en PL/SQL?

A Procedimiento en PL/SQL es una unidad de subprograma que consta de un grupo de declaraciones PL/SQL que se pueden llamar por su nombre. Cada procedimiento en PL/SQL tiene su propio nombre รบnico mediante el cual se puede hacer referencia a รฉl y llamarlo. Esta unidad de subprograma en el Oracle La base de datos se almacena como un objeto de base de datos.

Nota: El subprograma no es mรกs que un procedimiento y debe crearse manualmente segรบn los requisitos. Una vez creados, se almacenarรกn como objetos de base de datos.

A continuaciรณn se detallan las caracterรญsticas de la unidad de subprograma de procedimiento en PL/SQL:

  • Los procedimientos son bloques independientes de un programa que se pueden almacenar en el base de datos de CRISPR Medicine News.
  • La llamada a estos procedimientos PLSQL se puede realizar haciendo referencia a su nombre, para ejecutar las declaraciones PL/SQL.
  • Se utiliza principalmente para ejecutar un proceso en PL/SQL.
  • Puede tener bloques anidados o puede definirse y anidarse dentro de otros bloques o paquetes.
  • Contiene parte de declaraciรณn (opcional), parte de ejecuciรณn y parte de manejo de excepciones (opcional).
  • Los valores se pueden pasar a Oracle procedimiento o obtenido del procedimiento a travรฉs de parรกmetros.
  • Estos parรกmetros deben incluirse en la declaraciรณn de llamada.
  • Un procedimiento en SQL puede tener una declaraciรณn RETURN para devolver el control al bloque de llamada, pero no puede devolver ningรบn valor a travรฉs de la declaraciรณn RETURN.
  • Los procedimientos no se pueden llamar directamente desde declaraciones SELECT. Se pueden llamar desde otro bloque o mediante palabra clave EXEC.

Sintaxis

CREATE OR REPLACE PROCEDURE 
<procedure_name>
	(
	<parameterl IN/OUT <datatype>
	..
	.
	)
[ IS | AS ]
	<declaration_part>
BEGIN
	<execution part>
EXCEPTION
	<exception handling part>
END;
  • CREATE PROCEDURE indica al compilador que cree un nuevo procedimiento en Oracle. La palabra clave 'OR REPLACE' indica a la compilaciรณn que reemplace el procedimiento existente (si lo hay) por el actual.
  • El nombre del procedimiento debe ser รบnico.
  • Se utilizarรก la palabra clave 'IS' cuando el procedimiento almacenado en Oracle estรก anidado en algunos otros bloques. Si el procedimiento es independiente, se utilizarรก 'AS'. Aparte de este estรกndar de codificaciรณn, ambos tienen el mismo significado.

Ejemplo 1: crear un procedimiento y llamarlo usando EXEC

En este ejemplo, vamos a crear un Oracle procedimiento que toma el nombre como entrada e imprime el mensaje de bienvenida como salida. Usaremos el comando EXEC para llamar al procedimiento.

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

Explicaciรณn del cรณdigo:

  • Lรญnea de cรณdigo 1: Creando el procedimiento con el nombre 'welcome_msg' y con un parรกmetro 'p_name' de tipo 'IN'.
  • Lรญnea de cรณdigo 4: Imprimir el mensaje de bienvenida concatenando el nombre de entrada.
  • El procedimiento se compila correctamente.
  • Lรญnea de cรณdigo 7: Llamar al procedimiento mediante el comando EXEC con el parรกmetro 'Guru99'. Se ejecuta el procedimiento y se imprime el mensaje "Bienvenido Guru99".

ยฟQuรฉ es la funciรณn?

Functions es un subprograma PL/SQL independiente. Al igual que los procedimientos PL/SQL, las funciones tienen un nombre รบnico mediante el cual se puede hacer referencia a ellas. Estos se almacenan como objetos de base de datos PL/SQL. A continuaciรณn se muestran algunas de las caracterรญsticas de las funciones.

  • Las funciones son un bloque independiente que se utiliza principalmente con fines de cรกlculo.
  • La funciรณn utiliza la palabra clave RETURN para devolver el valor, y el tipo de datos de este se define en el momento de la creaciรณn.
  • Una funciรณn debe devolver un valor o generar la excepciรณn, es decir, la devoluciรณn es obligatoria en las funciones.
  • Las funciones sin instrucciones DML se pueden llamar directamente en una consulta SELECT, mientras que las funciones con operaciones DML solo se pueden llamar desde otros bloques PL/SQL.
  • Puede tener bloques anidados o puede definirse y anidarse dentro de otros bloques o paquetes.
  • Contiene parte de declaraciรณn (opcional), parte de ejecuciรณn y parte de manejo de excepciones (opcional).
  • Los valores se pueden pasar a la funciรณn o recuperarse del procedimiento a travรฉs de los parรกmetros.
  • Estos parรกmetros deben incluirse en la declaraciรณn de llamada.
  • Una funciรณn PLSQL tambiรฉn puede devolver el valor a travรฉs de parรกmetros OUT ademรกs de usar RETURN.
  • Dado que siempre devolverรก el valor, en la declaraciรณn de llamada siempre se acompaรฑa con el operador de asignaciรณn para completar las variables.

Funciones en PL/SQL

Sintaxis

CREATE OR REPLACE FUNCTION 
<procedure_name>
(
<parameterl IN/OUT <datatype>
)
RETURN <datatype>
[ IS | AS ]
<declaration_part>
BEGIN
<execution part> 
EXCEPTION
<exception handling part>
END;
  • CREATE FUNCTION indica al compilador que cree una nueva funciรณn. La palabra clave 'O REEMPLAZAR' indica al compilador que reemplace la funciรณn existente (si la hay) por la actual.
  • El nombre de la funciรณn debe ser รบnico.
  • Se debe mencionar el tipo de datos RETURN.
  • Se utilizarรก la palabra clave "IS" cuando el procedimiento estรฉ anidado en otros bloques. Si el procedimiento es independiente, se utilizarรก "AS". Aparte de este estรกndar de codificaciรณn, ambos tienen el mismo significado.

Ejemplo 1: crear una funciรณn y llamarla mediante un bloque anรณnimo

En este programa, vamos a crear una funciรณn que toma el nombre como entrada y devuelve el mensaje de bienvenida como salida. Usaremos un bloque anรณnimo y una declaraciรณn de selecciรณn para llamar a la funciรณn.

Funciones en PL/SQL

CREATE OR REPLACE FUNCTION welcome_msgJune ( p_name IN VARCHAR2) RETURN VAR.CHAR2
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;

Explicaciรณn del cรณdigo:

  • Lรญnea de cรณdigo 1: Creando el Oracle funciรณn con nombre 'welcome_msg_func' y con un parรกmetro 'p_name' de tipo 'IN'.
  • Lรญnea de cรณdigo 2: declarar el tipo de retorno como VARCHAR2
  • Lรญnea de cรณdigo 5: Devuelve el valor concatenado 'Bienvenido' y el valor del parรกmetro.
  • Lรญnea de cรณdigo 8: Bloque anรณnimo para llamar a la funciรณn anterior.
  • Lรญnea de cรณdigo 9: Declarar la variable con el mismo tipo de datos que el tipo de datos de retorno de la funciรณn.
  • Lรญnea de cรณdigo 11: Llamar a la funciรณn y completar el valor de retorno de la variable 'lv_msg'.
  • Lรญnea de cรณdigo 12: Imprimir el valor de la variable. El resultado que obtendrรก aquรญ es "Bienvenido Guru99"
  • Lรญnea de cรณdigo 14: Llamar a la misma funciรณn a travรฉs de la instrucciรณn SELECT. El valor de retorno se dirige directamente a la salida estรกndar.

Similitudes entre procedimiento y funciรณn

  • Ambos pueden ser llamados desde otros bloques PL/SQL.
  • Si la excepciรณn planteada en el subprograma no se maneja en el subprograma manejo de excepciones secciรณn, luego se propagarรก 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 cierto proceso. Se utiliza principalmente para realizar algรบn cรกlculo.
No se puede llamar a la declaraciรณn SELECT Se puede llamar a una funciรณn que no contiene declaraciones DML en la declaraciรณn SELECT
Utilice el parรกmetro OUT para devolver el valor Utilice RETORNO para devolver el valor
No es obligatorio devolver el valor. Es obligatorio devolver el valor.
RETURN simplemente saldrรก del control del subprograma. RETURN saldrรก del control del subprograma y tambiรฉn devuelve el valor
El tipo de datos devuelto no se especificarรก en el momento de la creaciรณn. El tipo de datos devuelto es obligatorio en el momento de la creaciรณn.

Funciones integradas en PL/SQL

PL / SQL contiene varias funciones integradas para trabajar con cadenas y tipos de datos de fecha. Aquรญ veremos las funciones mรกs utilizadas y su uso.

Funciones de conversiรณn

Estas funciones integradas se utilizan para convertir un tipo de datos en otro tipo de datos.

Nombre de la funciรณn Uso Ejemplo
A_CHAR Convierte el otro tipo de datos en un tipo de datos de carรกcter. TO_CHAR(123);
TO_DATE (cadena, formato) Convierte la cadena dada a la fecha. La cadena debe coincidir con el formato.

TO_DATE('2015-ENE-15', 'AAAA-MON-DD');

Salida: 1 / 15 / 2015

TO_NUMBER (texto, formato)

Convierte el texto al tipo de nรบmero del formato dado.

Informat '9' denota el nรบmero de dรญgitos

Seleccione TO_NUMBER('1234โ€ฒ,'9999') de dual;

Salida: 1234

Seleccione TO_NUMBER('1,234.45โ€ฒ,'9,999.99') de dual;

Salida: 1234

Funciones de cadena

Estas son las funciones que se utilizan en el tipo de datos de carรกcter.

Nombre de la funciรณn Uso Ejemplo
INSTR(texto, cadena, inicio, apariciรณn) Da la posiciรณn de un texto particular en la cadena dada.

  • texto โ€“ cadena principal
  • cadena: texto que debe buscarse
  • inicio โ€“ posiciรณn inicial de la bรบsqueda (opcional)
  • acuerdo โ€“ apariciรณn de la cadena buscada (opcional)
Seleccione INSTR('AEROPLANE','E',2,1) de dual

Salida: 2

Seleccione INSTR('AEROPLANE','E',2,2) de dual

Salida: 9 (2ยบnd apariciรณn de E)

SUBSTR (texto, inicio, longitud) Proporciona el valor de la subcadena de la cadena principal.

  • texto โ€“ cadena principal
  • inicio โ€“ posiciรณn inicial
  • longitud: longitud que se va a subcadenar
seleccione substr('aviรณn',1,7) de dual

Salida: aeropla

SUPERIOR ( texto ) Devuelve la mayรบscula del texto proporcionado. Seleccione superior('guru99') de dual;

Salida: GURU99

BAJAR ( texto ) Devuelve las minรบsculas del texto proporcionado. Seleccione inferior ("AerOpLane") de doble;

Salida: aviรณn

INITCAP (texto) Devuelve el texto dado con la letra inicial en mayรบscula. Seleccione ('guru99') de doble

Salida: Gurรบ99

Seleccione ('mi historia') de dual

Salida: Mi historia

LONGITUD ( texto ) Devuelve la longitud de la cadena dada. Seleccione LONGITUD ('guru99') de dual;

Salida: 6

LPAD (texto, longitud, pad_char) Rellena la cadena en el lado izquierdo para la longitud dada (cadena total) con el carรกcter dado Seleccione LPAD('guru99', 10, '$') de dual;

Salida: $$$$gurรบ99

RPAD (texto, longitud, pad_char) Rellena la cadena en el lado derecho para la longitud dada (cadena total) con el carรกcter dado Seleccione RPAD('guru99โ€ฒ,10,'-') de dual

Salida: gurรบ99โ€”-

LTRIM (texto) Recorta el espacio en blanco inicial del texto. Seleccione LTRIM('Guru99') de dual;

Salida: Gurรบ99

RTRIM (texto) Recorta el espacio en blanco final del texto. Seleccione RTRIM('Guru99 ') de dual;

Salida; Gurรบ99

Funciones de fecha

Estas son funciones que se utilizan para manipular fechas.

Nombre de la funciรณn Uso Ejemplo
ADD_MONTHS (fecha, nรบmero de meses) Agrega los meses dados a la fecha. ADD_MONTH('2015-01-01',5);

Salida: 05 / 01 / 2015

FECHA DEL SISTEMA Devuelve la fecha y hora actuales del servidor. Seleccione SYSDATE de dual;

Salida: 10/4/2015 2:11:43

TRUNC Redondeo de la variable de fecha al menor valor posible. seleccione sysdate, TRUNC(sysdate) de dual;

Salida: 10/4/2015 2:12:39 10/4/2015

REDONDA Redondea la fecha al lรญmite mรกs cercano, ya sea superior o inferior. Seleccione sysdate, ROUND(sysdate) de dual

Salida: 10/4/2015 2:14:34 10/5/2015

MESES_ENTRE Devuelve el nรบmero de meses entre dos fechas. Seleccione MONTHS_BETWEEN (sysdate+60, sysdate) de dual

Salida: 2

Resumen

En este capรญtulo hemos aprendido lo siguiente.

  • Cรณmo crear un Procedimiento y diferentes formas de llamarlo
  • Cรณmo crear una funciรณn y diferentes formas de llamarla
  • Similitudes y diferencias entre Procedimiento y Funciรณn
  • Parรกmetros y terminologรญas comunes de RETURN en subprogramas PL/SQL
  • Funciones integradas comunes en Oracle PL / SQL

Resumir este post con: