Защо бихте предали целия набор от параметри, когато всичко, от което се нуждаете, е ID на кемпер (и няма нищо, което бихте направили с останалите)? Това просто няма смисъл...
Ето опция, която показва как да го направите.
Примерна таблица:
SQL> select * from charges;
CAMPERID CATEGORY CHARGEDATE AMT
---------- ---------- ------------------- ----------
1 Category 1 12.10.2021 00:00:00 500
SQL>
Процедура:
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.
Тестване:
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>
Кодът, който сте написали:
- правни грешки, правописни грешки, правописни грешки ... това ли е
p_error
илиp_erorr
? if
трябва да имаend if
if
не може да съдържаselect
оператор (трябва да изберете стойност отделно и след това да я използвате вif
)where
условието е грешно. Никога, никога не наименувайте параметрите по същия начин като имената на колони. Това:where camperid = camperid
е равно наwhere 1 = 1
и ще получите всички редове от таблицата, а не само този, който търсите