Я хочу прочитать данные либо из таблицы A, либо из таблицы B. Моя база данных - оракул, и процедура должна использовать минимальное количество запросов. Требуется прочитать из одной таблицы, а если данные недоступны, перейти к другой таблице. Я написал следующую процедуру,
CREATE OR REPLACE PROCEDURE READ(myId IN VARCHAR2, aout OUT SYS_REFCURSOR, bout OUT SYS_REFCURSOR )
IS
temp_acout_type A_TABLE%ROWTYPE;
BEGIN
OPEN aout FOR SELECT * FROM A_TABLE WHERE ID = myId;
FETCH aout into temp_acout_type ;
if aout%NOTFOUND then
OPEN bout FOR SELECT * FROM B_TABLE WHERE ID = myId;
end if;
END;
Я вызываю эту функцию со стороны Java. Моя проблема в том, что когда я получаю курсор в процедуре, курсор теряет данные. Я наблюдал это с Java-клиента, так как ResultSet
in java-сторона пуста (запросы в процедуре будут иметь только 1 запись, так как она ищет по первичному ключу), хотя она должна содержать данные.
Мне нужен способ реализовать вышеуказанную логику, но без использования дополнительных запросов (например: данные первой проверки доступны в таблице A). Есть ли способ сделать это ?