Está en la página 1de 9

Parámetros de Entrada

El comportamiento común de un parámetro es como entrada, ésto quiere decir que recibirá un
dato almacenado en el parámetro enviado desde el contexto en el que se llama a la función.
Si deseamos indicar explícitamente que deseamos el parámetro como de entrada debemos
adicionar la palabra reservada IN a la declaración del parámetro de la función.

A manera de ejemplo, crearemos la función OPERAR_NUMEROS.

No es necesario especificar el tipo de parámetro cuando sólo lo vamos a utilizar como


parámetro de entrada, pero es recomendable hacerlo.
01 -- Función que realiza una operación entre 2 números según
02 -- el tipo de operación indicada en el parámetro P_OPERACION:
03 --     + -> SUMA
04 --     - -> RESTA
05 --     * -> MULTIPLICACION
06 --     / -> DIVISION

07 --     Otro -> NULL


08 CREATE OR REPLACE FUNCTION HR.OPERAR_NUMEROS(P_NUMEROA   IN NUMBER,
09                                              P_NUMEROB   IN NUMBER,
10                                              P_OPERACION IN CHAR)
11 RETURN NUMBER
12 IS
13   V_RESULTADO NUMBER;
14 BEGIN

15   CASE
16     WHEN P_OPERACION = '+' THEN
17       V_RESULTADO := P_NUMEROA + P_NUMEROB;
18  
19     WHEN P_OPERACION = '-' THEN
20       V_RESULTADO := P_NUMEROA - P_NUMEROB;
21  
22     WHEN P_OPERACION = '*' THEN
23       V_RESULTADO := P_NUMEROA * P_NUMEROB;
24  
25     WHEN P_OPERACION = '/' THEN
26       -- Controlamos las divisiones por 0
27       IF P_NUMEROB = 0 THEN
28         V_RESULTADO := 0;

29       ELSE
30         V_RESULTADO := P_NUMEROA / P_NUMEROB;
31       END IF;
32  
33     ELSE
34       -- En caso de que P_OPERACION contenga un caracter
35       -- que no sean +,-,* ó / se devolverá NULL
36       V_RESULTADO := NULL;
37   END CASE;
38  
39   RETURN V_RESULTADO;

40 END;
FUNCTION OPERAR_NUMEROS compilado
Ahora crearemos un bloque PL/SQL anónimo para usarlo

01 -- Uso de la función HR.OPERAR_NUMEROS


02 DECLARE
03   V_NUMA        NUMBER;
04   V_NUMB        NUMBER;
05   V_OPERACION   CHAR(1);
06   V_RESULTADO   NUMBER;
07 BEGIN
08    
09   -- Podemos pasar los valores para los parámetros de entrada.
10   -- usando variables.
11   V_NUMA := 10;
12   V_NUMB := 30;
13   V_OPERACION := '+';
14   V_RESULTADO := HR.OPERAR_NUMEROS(V_NUMA,V_NUMB,V_OPERACION);
15   DBMS_OUTPUT.PUT_LINE(V_NUMA ||
16                        V_OPERACION ||
17                        V_NUMB ||
18                        '=' ||
19                        V_RESULTADO);
20  
21   -- Podemos reutilizar las variables cambiando sus valores
22   -- antes de volver a llamar a la función.
23   V_NUMA := 54;
24   V_NUMB := 78;
25   V_OPERACION := '*';
26   V_RESULTADO := HR.OPERAR_NUMEROS(V_NUMA,V_NUMB,V_OPERACION);
27   DBMS_OUTPUT.PUT_LINE(V_NUMA ||
28                        V_OPERACION ||
29                        V_NUMB ||
30                        '=' ||
31                        V_RESULTADO);
32  
33   -- También podemos usar constantes en vez de variables para
34   -- asignar valores a parámetros de entrada.
35   V_RESULTADO := HR.OPERAR_NUMEROS(23,56,'*');
36   DBMS_OUTPUT.PUT_LINE('23*56' ||

37                        '=' ||
38                        V_RESULTADO);
39 END;
10+30=40
54*78=4212
23*56=1288

Parámetros de Salida
Los parámetros de salida permiten modificar el valor de una variable externa a la función
relacionada con el parámetro. De ésta manera si la función modifica el valor del parámetro, la
variable relacionada a éste parámetro tendrá el valor modificado inclusive después de que la
función haya terminado de ejecutarse.

Cuando un parámetro es del tipo salida, sólo se pueden pasar variables a la función, en caso
de intentar usar una constante el motor PL/SQL mostrará un error al momento de compilar la
función.
Para poder especificar un parámetro como del tipo salida, debemos usar la palabra reservada
OUT al momento de declarar el parámetro.

1 -- Procedimiento que devuelve un texto sobre la fecha actual


2 -- haciendo uso de un parámetro de salida.
3 CREATE OR REPLACE PROCEDURE HR.OBTENER_FECHA(P_TEXTO OUT VARCHAR2)
4 IS

5 BEGIN
6   P_TEXTO := 'La fecha actual es ' || TO_CHAR(SYSDATE,'DD/MM/YYYY');
7 END;
PROCEDURE OBTENER_FECHA compilado
El procedimiento OBTENER_FECHA, muestra un ejemplo de parámetros de salida. El

01 DECLARE
02   V_FECHA    VARCHAR2(200);
03 BEGIN
04  
05   -- Pasamos la variable V_FECHA a la función HR.OBTENER_FECHA.
  -- V_FECHA estará referenciada al parámetro P_TEXTO, cualquier
06
cambio
07   -- en P_TEXTO se verá reflejado en V_FECHA posteriormente.
08   HR.OBTENER_FECHA(V_FECHA);

09    
10   DBMS_OUTPUT.PUT_LINE('Valor de V_FECHA: ' || V_FECHA);
11 END;
Valor de V_FECHA: La fecha actual es 08/05/2014

Parámetros de Entrada y Salida


En cada función o procedimiento que contenga parámetros de salida, éstos, son establecidos
con valores NULL al inicio de las funciones o procedimientos. ésto quiere decir que si
deseamos pasar un valor desde la variable externa relacionada al parámetro, éste valor, será
reemplazado con NULL antes de iniciar la función o procedimiento.

La tabla HR.CLIENTE, se ha creado en el capítulo anterior, debes asegurarte de haber creado


la tabla HR.CLIENTE antes de ejecutar los ejemplos de éste capítulo.
1 CREATE TABLE HR.CLIENTE (
2         id NUMBER NOT NULL,
3         nombres VARCHAR(200) NOT NULL,
4         apellidos VARCHAR(200) NOT NULL,
5         fecha_afiliacion DATE NOT NULL,
6         PRIMARY KEY(id)
7 );
Un parámetro del tipo salida, no tendrá el comportamiento de un parámetro del tipo entrada
por defecto. Para permitir que un parámetro permita la salida y entrada de datos de una
variable se debe adicionar la palabra reservada IN.

01 -- Procedimiento que permite registrar un cliente.


02 -- Intentará registrarlo con el valor P_ID, en caso de que el ID
03 -- exista creará uno y devolverá el valor usado

04 CREATE OR REPLACE PROCEDURE HR.REGISTRAR_CLIENTE(P_ID        IN OUT NUMBE
R,
05                                                  P_NOMBRES   IN VARCHAR
2,

06                                                  P_APELLIDOS IN VARCHAR
2,
07                                                  P_FECHA     IN DATE)
08 IS
09   V_CONTEO NUMBER;
10 BEGIN
11   -- Se busca si es que el ID existe.
12   SELECT COUNT(cli.id)

13     INTO V_CONTEO
14     FROM hr.cliente cli
15    WHERE cli.id = P_ID;
16    
17   -- En caso de que V_CONTEO exista como ID
18   -- se creará un ID alternativo

19   IF V_CONTEO > 0 THEN


20     DBMS_OUTPUT.PUT_LINE('El id ' || P_ID || ' ya existe.');
21     SELECT MAX(cli.id)
22       INTO P_ID
23       FROM hr.cliente cli;
24        

25     P_ID := P_ID + 1;

26     DBMS_OUTPUT.PUT_LINE('El id ha sido reemplazado por ' || P_ID


|| '.');
27   END IF;
28    
29   INSERT INTO hr.cliente(id,nombres,apellidos,fecha_afiliacion)
30      VALUES (P_ID,P_NOMBRES,P_APELLIDOS, P_FECHA);

31   DBMS_OUTPUT.PUT_LINE('Insertado cliente: '|| P_ID || ' ' || P_NOMBRES


|| ' '|| P_APELLIDOS);
32 END;
En la función HR.REGISTRAR_CLIENTE el parámetro P_ID actúa como parámetro de
entrada y salida. Veamos el uso de la función:

01 --Uso de la función HR.REGISTRAR_CLIENTE


02 DECLARE
03   V_ID    NUMBER;
04 BEGIN
05   -- Intentamos registrar un cliente con ID 12.
06   V_ID := 12;

07   HR.REGISTRAR_CLIENTE(V_ID,'Jhon', 'Quiroz', SYSDATE);
08   DBMS_OUTPUT.PUT_LINE('El valor de V_ID es: ' || V_ID);
09    
10   -- Intentamos registrar otro cliente con el mismo ID.
11   HR.REGISTRAR_CLIENTE(V_ID,'Manuel', 'Prado', SYSDATE);
12   DBMS_OUTPUT.PUT_LINE('El valor de V_ID es: ' || V_ID);

13 END;
Insertado cliente: 12 Jhon Quiroz
El valor de V_ID es: 12
El id 12 ya existe.

El id ha sido reemplazado por 13.


Insertado cliente: 13 Manuel Prado
El valor de V_ID es: 13
http://www.carlospes.com/curso_de_algoritmos/parametros.php

http://jeanmazuelos.com/biblioteca/cursos/oracle-plsql-basico/capitulo-8-parametros-de-
entrada-y-salida

https://pro.arcgis.com/es/pro-app/help/analysis/geoprocessing/share-analysis/inputs-and-
outputs.htm

También podría gustarte