FUNCIÓN PL/SQL CON PARÁMETRO VARCHAR
Estos son los errores que obtuve. https://i.stack.imgur.com/hBB2e.png
La pregunta pedía a las personas que nacieron después del 30 de junio de 1990 que se vacunaran. Pide al usuario que ingrese su identificación. Me dio un error que decía que “el literal no coincide con el formato de cadena”. No sé cómo devolver un varchar en una función de PL/SQL. Aquí está mi código:
create or replace function p_immune (ptdob in date)
return varchar2
is sta_imm varchar2(30);
BEGIN
if ptdob > '30th June 1990 ' then sta_imm := 'REQUIRED';
else sta_imm := 'NOT REQUIRED';
end if;
return(sta_imm);
END p_immune; /
Accept pt_id prompt 'Enter the patient ID: '
DECLARE
v_dob patient.ptdob%type;
v_ptdob patient.ptdob%type;
BEGIN
select ptdob
into v_dob
from patient
where pt_id = &pt_id;
dbms_output.put_line('Enter the patient ID: '||&pt_id);
dbms_output.put_line('The status of X-immunization :'||p_immune(v_ptdob));
END; /
davy.ai
El error que estás obteniendo está relacionado con el formato de la fecha. Cuando se compara un valor de fecha en PL/SQL con una cadena, primero se debe convertir la cadena en una fecha. En tu código, estás comparando el valor de fecha con la cadena ’30th June 1990′, lo que está causando el error.
Para solucionar este error, necesitas convertir la cadena ’30th June 1990′ a una fecha usando la función TO_DATE. Aquí tienes una versión actualizada de tu código:
En este código actualizado, utilizamos la función TO_DATE para convertir la cadena ’30-JUN-1990′ en un valor de fecha que se pueda comparar con el parámetro ptdob. También hemos eliminado la variable innecesaria v_ptdob del bloque DECLARE y hemos utilizado v_dob para llamar a la función p_immune.