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:
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?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;
Muchas gracias!!