Buenos días!
Gracias por intentar ayudar :)
Mi problema es el siguiente, desde un procedimiento llamo a una función que lo que hace es obtener el código de cliente de una persona. Para ellos tengo la siguiente código:
Código:
FUNCTION obtener_codigo_persona(ppersona in out tpersona)
RETURN NUMBER IS
e_persona tabla_persona%ROWTYPE;
CURSOR c_persona IS
SELECT codigo
FROM tabla_persona
WHERE nombre = ppersona.nombre
AND apellido1 = ppersona.apellido1
AND apellido2 = ppersona.apellido2;
nret NUMBER := 0;
vencontrados NUMBER := 0;
CURSOR c_cliente(v_id_cliente tabla_cliente.id_cliente%TYPE) IS
SELECT id_cliente
,fecha_nacimiento
FROM tabla_cliente
WHERE id_cliente = v_id_cliente;
r_cliente c_cliente%ROWTYPE;
BEGIN
-- Primero se busca en la tabla de personas
FOR reg_persona IN c_persona
LOOP
-- Se va contando el número de personas encontradas
vencontrados := vencontrados + 1;
e_persona.codigo := reg_persona.codigo;
END LOOP;
IF vencontrados = 1
THEN
-- Si hemos encontrado a la persona de manera unívoca se busca en la tabla de clientes a
-- partir del ID.
OPEN c_cliente(e_persona.codigo);
FETCH c_cliente
INTO r_cliente;
IF c_cliente%FOUND
THEN
-- Si se ha encontrado el cliente se devuelve su Id.
ppersona.codigo := r_cliente.id_cliente;
nret := 0;
ELSE
-- En caso contrario de devuelve el error
nret := 1;
END IF;
CLOSE c_cliente;
ELSE
-- Si se ha encontrado más de una persona o no se ha encontrado ninguna ERROR
nret := 1;
END IF;
-- Devolvemos el código de error generado.
RETURN nret;
END codigo_persona;
Como se observa, la función tiene un parámetro de entrada y salida el cual actualizo para asignarle el código de cliente obtenido.. El código va correctamente, se actualiza bien, el problema es cuando voy a consulta el valor de ‘ppersona.codigo’ desde el procedimiento de llamada, me dice q es null... ¿Qué puede estar pasando? ¿Por qué dentro de la función el parámetro de entrada y salida está actualizado y en el procedimiento q la llama aparece a null?
Muchas gracias!!