Вот как.
Сначала тестовый пример:
SQL> create table users
2 (username varchar2(10),
3 age number);
Table created.
SQL> insert into users
2 select 'LF' , 10 from dual union all
3 select 'Marc', 20 from dual;
2 rows created.
Процедура:
SQL> create or replace procedure delete_user (p_username in varchar2)
2 is
3 begin
4 delete from users u
5 where u.username = p_username
6 and u.age < 18;
7
8 dbms_output.put_line('User ' || p_username ||
9 case when sql%rowcount = 0 then ' NOT ' end ||
10 ' deleted');
11 end;
12 /
Procedure created.
Несколько замечаний:
- не называть параметры столбцами таблицы; Oracle не будет знать, что есть что. Используйте префикс, такой как
p_
- использовать псевдонимы таблиц, всегда
- см. Пример использования
sql%rowcount
, который помогает узнать количество затронутых строк
Наконец, тестирование:
SQL> set serveroutput on;
SQL> exec delete_user('LF');
User LF deleted
PL/SQL procedure successfully completed.
SQL> exec delete_user('Marc');
User Marc NOT deleted
PL/SQL procedure successfully completed.
SQL>
Не относится к вашей проблеме, но - обычно помогает, если вы публикуете код, который фактически компилируется.
dmbs_
недействительно
- если вы назвали процедуру
delete_user
, не звоните detele_user