Proč byste předávali celou hromadu parametrů, když vše, co potřebujete, je ID karavanu (a se zbytkem byste nic nedělali)? To prostě nedává smysl...
Zde je možnost, která ukazuje, jak to udělat.
Vzorová tabulka:
SQL> select * from charges;
CAMPERID CATEGORY CHARGEDATE AMT
---------- ---------- ------------------- ----------
1 Category 1 12.10.2021 00:00:00 500
SQL>
Postup:
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.
Testování:
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>
Kód, který jste napsali:
- překlepy, překlepy, překlepy ... je to
p_error
nebop_erorr
? if
by měl mítend if
if
nemůže obsahovatselect
(hodnotu musíte vybrat samostatně a poté ji použít vif
)where
stav je špatný. Nikdy, nikdy nepojmenujte parametry stejně jako názvy sloupců. Toto:where camperid = camperid
je rovnowhere 1 = 1
a získali byste všechny řádky z tabulky, nejen ten, který hledáte