¿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_error
op_erorr
? if
debería tenerend if
if
no puede contener unselect
instrucción (debe seleccionar el valor por separado y luego usarlo enif
)where
la condición es incorrecta. Nunca, nunca nombre los parámetros de la misma manera que los nombres de las columnas. Esto:where camperid = camperid
es igual awhere 1 = 1
y obtendría todas las filas de la tabla, no solo la que está buscando