Я пытаюсь случайно выбрать карту из таблицы cards
с колонками c_value
и c_suit
, используя процедуру. После его выбора процедура должна обновить поле записи taken
, чтобы оно было «Y».ORA-02014- Как обновить случайно выбранную строку из таблицы?
create or replace procedure j_prc_sel_card(p_value OUT number,
p_suit OUT number)
AS
CURSOR CUR_GET_RAND_CARD IS SELECT c_value,
c_suit
FROM (SELECT c_value,
c_suit,
taken
FROM jackson_card
ORDER BY dbms_random.value)
WHERE rownum = 1
FOR UPDATE OF taken;
BEGIN
OPEN CUR_GET_RAND_CARD;
FETCH CUR_GET_RAND_CARD into p_value, p_suit;
UPDATE jackson_card
SET taken = 'Y'
WHERE c_value = p_value
AND c_suit = p_suit;
CLOSE CUR_GET_RAND_CARD;
END;
Тогда я пытаюсь получить выбранную карточку и вывести то, что это за начало. При этом:
SET serveroutput on;
DECLARE v_value number;
v_suit number;
BEGIN
j_prc_sel_card(p_value => v_value,p_suit => v_suit);
DBMS_OUTPUT.PUT_LINE(v_value);
DBMS_OUTPUT.PUT_LINE(v_suit);
END;
/
Однако я получил ошибку, указанную в названии, и это, кажется, мой способ выбора случайной карты останавливает меня от этого обновления. Заранее спасибо!