Varför skulle du skicka igenom hela massan av parametrar när allt du behöver är ett husbils-ID (och det inte finns något du skulle göra med resten av dem)? Det är helt enkelt inte vettigt ...
Här är ett alternativ som visar hur man gör.
Exempeltabell:
SQL> select * from charges;
CAMPERID CATEGORY CHARGEDATE AMT
---------- ---------- ------------------- ----------
1 Category 1 12.10.2021 00:00:00 500
SQL>
Procedur:
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.
Testar:
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>
Kod du skrev:
- stavfel, stavfel, stavfel ... är det
p_error
ellerp_erorr
? if
ska haend if
if
kan inte innehålla enselect
uttalande (du måste välja värde separat och sedan använda det iif
)where
tillståndet är fel. Namn aldrig, aldrig parametrar på samma sätt som kolumnnamn. Detta:where camperid = camperid
är lika medwhere 1 = 1
och du får alla rader från tabellen, inte bara den du letar efter