Hola,
Cita: No obstante no entiendo por que un parámetro en una funcion o procedimiento no lleve longitud...
La longitud de los parametros de un procedimiento o funcion son determinadas al momento de la llamada a traves del valor que obtienen, para probarlo puedes hacer un LENGTH del parametro.
Cita: Por otro lado, no veo lo raro en que un id sea de tipo char..
Es mas comun que un id sea NUMBER, pero no es obligatorio, solo lo comentaba porque me llamo la atencion.
Con respecto a los errores, si un procedimiento no compila, Oracle devuelve uno o varios errores dando los motivos por los que no compila, postear esa informacion ahorra mucho tiempo :)
Saludos