Код, который вы написали ... ну, довольно странно. Предполагается, что ВСЕ заказы в этой таблице не должны содержать ничего, кроме пиццы. Хотя это не причина ваших проблем.
Объявление переменной pizzacount
устанавливает ее на null
. Все, что + null
по-прежнему null
, поэтому оно никогда не устанавливается ни на что другое, поэтому ваш l oop никогда не завершается.
Более того, вам не нужен курсор; достаточно простого select
. Если он возвращает что-то для этого номера заказа, то это должны быть пиццы. В противном случае он вообще ничего не вернет, поэтому номер заказа недействителен.
Примерно так: сначала тестовый пример:
SQL> create table order_list (order_no number, qty number);
Table created.
SQL> insert into order_list (order_no, qty) values (1, 5);
1 row created.
SQL>
Процедура:
SQL> create or replace procedure pizza_qty (par_order_num in order_list.order_no%type)
2 is
3 l_qty order_list.qty%type;
4 begin
5 select qty
6 into l_qty
7 from order_list
8 where order_no = par_order_num;
9
10 dbms_output.put_line('Order ' || par_order_num || ' has ' || l_qty ||
11 ' pizza(s) to be delivered');
12 exception
13 when no_data_found then
14 dbms_output.put_line('Order ' || par_order_num || ' is invalid');
15 end;
16 /
Procedure created.
SQL>
Тестирование:
SQL> set serveroutput on;
SQL> exec pizza_qty(1);
Order 1 has 5 pizza(s) to be delivered
PL/SQL procedure successfully completed.
SQL> exec pizza_qty(2);
Order 2 is invalid
PL/SQL procedure successfully completed.
SQL>