Viernes, 12 Junio 2020 02:18

Función: Cual es Nulo?

Rate this item
(0 votes)

Objetivos:

• Desarrollar una función que reciba X cantidad de parámetros y determine cual o cuales de ellos son nulos.

• Ver lo flexible que resulta PL/SQL.


Introducción

Este requerimiento es básico en cualquier lenguaje de programación, de hecho suena bastante trivial, pero en realidad lo que queremos es plantear un escenario algo distinto al que a diario vemos. Comúnmente nos valemos de estructuras de control condicionales(CASEIF ELSE) para así lograr este cometido, es por ello que les presento un enfoque algo distinto con cierto grado de eficiencia para llevar a cabo el fin.

Por supuesto, una vez determinemos cuales son nulos es inevitable usar las mencionadas estructuras de control para así ejecutar la acción deseada, pero esta tarea puede ser desarrollada en la aplicación final (EjeOracle FormsJAVA) que hace uso de la función.


Bloque Anónimo con la Lógica de la Función

SET SERVEROUTPUT ON

SET VERIFY OFF

DECLARE
    v_1 VARCHAR2(15);
	v_2 VARCHAR2(15);
	v_3 VARCHAR2(15);

	CURSOR c_nulls
		(
		p_1 VARCHAR2,
		p_2 VARCHAR2,
		p_3 VARCHAR2
		) IS
		SELECT
		  DECODE (p_1,NULL,0,1)+  --Si es nulo retorna 0 de lo contrario 1
		  DECODE (p_2,NULL,0,2)+  --Si es nulo retorna 0 de lo contrario 2
		  DECODE (p_3,NULL,0,4)  --Si es nulo retorna 0 de lo contrario 4
	FROM dual;  --En si, este SELECT suma los valores antes generados.

	v_resultado NUMBER(1);
BEGIN
	DBMS_OUTPUT.PUT_LINE(REPLACE( --Uso el REPLACE para que no se muestren los espacios tabulares
                        '¿Cual o cuales son Nulos?
                        Ninguno: 7,
                        Solo el Primero: 6,
                        Solo el Segundo: 5,
                        Solo el Tercero: 3,
                        El Primero y el Segundo: 4,
                        El Primero y el Tercero: 2,
                        El Segundo y el Tercero: 1,
                        Todos son Nulos: 0'
                      ,'                        ',''));

	v_1 := '&PARAM1';
	v_2 := '&PARAM2';
	v_3 := '&PARAM3';

	OPEN c_nulls(v_1, v_2, v_3);
	FETCH c_nulls INTO v_resultado;
	CLOSE c_nulls;

	DBMS_OUTPUT.PUT_LINE(CHR(10)||'Resultado: '||v_resultado);
END;

/*Primero que nada, creamos este bloque anónimo que tiene el mismo enfoque de la función a continuación. Notar como el bloque imprime en pantalla el criterio de evaluación sin la necesidad de usar estructuras se control condicionales.*/

---OUTPUT:


Función Cual_es_NULL

CREATE OR REPLACE FUNCTION cual_es_null
							(
								p_1 VARCHAR2,
								p_2 VARCHAR2,
								p_3 VARCHAR2
							) RETURN NUMBER IS
	CURSOR c_nulls
			(
				cp_1 VARCHAR2,
				cp_2 VARCHAR2,
				cp_3 VARCHAR2
			) IS
		SELECT
		  DECODE (cp_1,NULL,0,1)+
		  DECODE (cp_2,NULL,0,2)+
		  DECODE (cp_3,NULL,0,4)
	FROM dual;

	v_resultado NUMBER(1);
BEGIN
	OPEN c_nulls(p_1, p_2, p_3);
	FETCH c_nulls INTO v_resultado;
	CLOSE c_nulls;

	RETURN v_resultado;
END;
/

SHOW ERROR

/*He Aquí la Función. Para simplificar el código y facilitar el análisis decidimos hacerla que solo acepte 3 parámetros.*/

 

SELECT
        cual_es_null(NULL,'HOLA','K'),
        cual_es_null(8,NULL,'N*'),
        cual_es_null(NULL,NULL,NULL),
        cual_es_null(5,8,9),
        cual_es_null('HOLA',78,NULL)
FROM dual;

/*Probamos la función.*/

---OUTPUT:

Read 579 times Last modified on Sábado, 11 Julio 2020 19:05

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.

Magic PL/SQL

Blog orientado al desarrollo de PL / SQL en el "Maravilloso Mundo ORACLE". Cursos Online y Tutoriales Gratis de Manejo de Base de Datos. Aprende a programar, a crear aplicaciones para empresas y negocios y gana dinero. Hosting y Tecnología.