Я пытаюсь получить количество строк таблицы и сохранить ее в переменной, чтобы я мог использовать эту переменную, однако она будет сохранять ее только в переменной, если я использую WHERE ROWNUM = 1;
, но тогда она будет хранить только число 1 а не фактическое количество строк. Весь оператор выбора, который я использую:
SELECT COUNT(*)
INTO vn_no_tickets
FROM tickets
WHERE ROWNUM = 1;
Если я не использую WHERE ROWNUM = 1;
, я получаю сообщение об ошибке «Точная выборка возвращает больше, чем запрошенное количество строк», но снова, когда я использую это, я получаю только 1 строку, а не фактическое число или строк. Спасибо
Редактировать: Вот полная процедура
CREATE OR REPLACE PROCEDURE proc_ticket_exp IS
vn_no_tickets NUMBER(4);
vn_ticket_id tickets.ticket_id%TYPE;
vd_exp_date tickets.expiration_date%TYPE;
vc_customer_firstname tickets.customer_firstname%TYPE;
vc_customer_surname tickets.customer_surname%TYPE;
vd_one_week DATE;
vc_fullname VARCHAR2(40);
BEGIN
vd_one_week := sysdate + 7;
SELECT COUNT(*)
INTO vn_no_tickets
FROM tickets
WHERE ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE (vn_no_tickets);
WHILE vn_no_tickets != 0 LOOP
SELECT expiration_date, ticket_id, customer_firstname, customer_surname
INTO vd_exp_date, vn_ticket_id, vc_customer_firstname, vc_customer_surname
FROM tickets
WHERE ROWNUM = vn_no_tickets;
vc_fullname := CONCAT(vc_customer_firstname, CONCAT(' ', vc_customer_surname));
IF vd_exp_date < vd_one_week THEN
DBMS_OUTPUT.PUT_LINE (vc_fullname || 's ticket will expire within one week. Ticket Number: ' || vn_ticket_id);
END IF;
vn_no_tickets := vn_no_tickets - 1;
END LOOP;
END proc_ticket_exp;
/
SHOW ERRORS