Pourquoi passeriez-vous tout un tas de paramètres alors que tout ce dont vous avez besoin est un identifiant de campeur (et que vous ne feriez rien avec le reste) ? Cela n'a aucun sens...
Voici une option qui montre comment faire.
Exemple de tableau :
SQL> select * from charges;
CAMPERID CATEGORY CHARGEDATE AMT
---------- ---------- ------------------- ----------
1 Category 1 12.10.2021 00:00:00 500
SQL>
Procédure :
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.
Test :
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>
Code que vous avez écrit :
- fautes de frappe, fautes de frappe, fautes de frappe... est-ce
p_error
oup_erorr
? if
devrait avoirend if
if
ne peut pas contenir deselect
déclaration (vous devez sélectionner la valeur séparément, puis l'utiliser dansif
)where
l'état est faux. Ne nommez jamais les paramètres de la même manière que les noms de colonne. Ceci :where camperid = camperid
est égal àwhere 1 = 1
et vous obtiendrez toutes les lignes de la table, pas seulement celle que vous recherchez