¿Por qué pasaría todo el conjunto de parámetros cuando todo lo que necesita es una identificación de camper (y no hay nada que pueda hacer con el resto de ellos)? Eso simplemente no tiene sentido...
Aquí hay una opción que muestra cómo hacerlo.
Tabla de muestra:
SQL> select * from charges;
CAMPERID CATEGORY CHARGEDATE AMT
---------- ---------- ------------------- ----------
1 Category 1 12.10.2021 00:00:00 500
SQL>
Procedimiento:
SQL> create or replace procedure p_test
2 (par_camperid in charges.camperid%type,
3 par_message out varchar2
4 )
5 as
6 l_camperid charges.camperid%type;
7 begin
8 select c.camperid
9 into l_camperid
10 from charges c
11 where c.camperid = par_camperid;
12
13 par_message := 'Camper ' || par_camperid || ' exists';
14 exception
15 when no_data_found then
16 par_message := 'Error: no such camper ID (' || par_camperid || ')';
17 end;
18 /
Procedure created.
Prueba:
SQL> set serveroutput on;
SQL> declare
2 l_msg varchar2(100);
3 begin
4 p_test(1, l_msg);
5 dbms_output.put_line(l_msg);
6 end;
7 /
Camper 1 exists
PL/SQL procedure successfully completed.
SQL> declare
2 l_msg varchar2(100);
3 begin
4 p_test(2, l_msg);
5 dbms_output.put_line(l_msg);
6 end;
7 /
Error: no such camper ID (2)
PL/SQL procedure successfully completed.
SQL>
Código que escribiste:
- errores tipográficos, errores tipográficos, errores tipográficos... es
p_errorop_erorr? ifdebería tenerend ififno puede contener unselectinstrucción (debe seleccionar el valor por separado y luego usarlo enif)wherela condición es incorrecta. Nunca, nunca nombre los parámetros de la misma manera que los nombres de las columnas. Esto:where camperid = camperides igual awhere 1 = 1y obtendría todas las filas de la tabla, no solo la que está buscando