Un pequeño consejo.
Cuando tengas un problema de este tipo, primero busca info p.e. en el google sobre el error (Supongo que te habrá salido algo similar a este código de error : PLS-00428 ) y luego, si lo que has encontrado no te lo aclara, entonces es el momento de acudir a los foros, pero primero, como te he dicho, hay que tratar de solucionar las cosas por uno mismo, así se aprende mas que acudiendo a los foros en cuanto se ve la palabra error, creeme.
Y respecto a tu error, en un programa pl ( procedure, function, package, trigger ), salvo en los cursores, un select tiene que llevar de un INTO para meter el resultado de esa select.
SELECT CAMPO / CAMPOS / *
INTO VARIABLE / VARIABLES / VARIABLE TIPO REGISTRO
FROM TABLA / TABLAS
Y en tu caso para dártelo todo mascado :
Código SQL:
Ver originalCREATE OR REPLACE PROCEDURE buscarDNI( fecha IN varchar2)
AS
var_persona persona%rowtype; -- Siendo var_persona una variable de tipo registro de la tabla persona
BEGIN
SELECT *
INTO var_persona
FROM persona
WHERE p_fec_nac=fecha ;
--
-- Aquí ya tienes en VAR_PERSONA todos los datos que hay en la tabla persona cuya fecha de nacimiento sea igual a la que has mandado como aprametro
--
-- OJO, Si encuentra mas de uno, te va a saltar un error y si no encuentra ninguno, también. Debes de gestionar las excepciones, busca info sobre
-- NO_DATA_FOUND y TOO_MANY_ROWS
END;
/