Я столкнулся с одной проблемой, связанной с запросами Oracle Sql в Scriptella.
Мое намерение состоит в том, чтобы получить некоторые данные столбца из таблицы PRODUCT_PRICE для каждой строки (определяемой с помощью предложения where), полученной из таблицы PRODUCT, а затем, если полученные данные из PRODUCT_PRICE не содержат ничего или нуля, тогда я должен вставить новый столбец для значение цены, соответствующее идентификатору продукта и магазина, в таблицу или, если существует строка, соответствующая идентификатору продукта и магазина, тогда мне нужно обновить цену.
Следующий код должен очистить логику, которую я описываю:
<query connection-id="db">
select PRODUCT_ID as "product_id1", STORE_ID as "store_id1" from PRODUCT
<query connection-id="db">
select REGULAR_PRICE, PRODUCT_ID as "product_id2", STORE_ID as "store_id2" from PRODUCT_PRICE where PRODUCT_ID=?product_id1 and STORE_ID=?store_id1
<script connection-id="db" if="rownum==0">
insert into PRODUCT_PRICE(REGULAR_PRICE, PRODUCT_ID, STORE_ID) values(?price, product_id1, store_id1)
</script>
<script connection-id="db" if="rownum gt 0">
update REGULAR_PRICE=?price where PRODUCT_ID=?product_id2 and STORE_ID=?store_id2
</script>
</query>
<query>
Мой вопрос - это не работает! Как видите, мне нужно вставить product_id, store_id, а также «цену» в таблицу PRODUCT_PRICE, если нет данных, соответствующих идентификатору продукта и магазина. Также мне нужно обновить только цену, если существует строка одного и того же продукта и store_id. Но когда результат, полученный во втором запросе, ничего не содержит, то скрипт с условием "rownum==0" не работает. Итак, как этого добиться в Oracle?
Я знаю, что в базе данных MySQL или SyBase есть один синтаксис, который называется «если существует (выберите ....)/тогда что-то/еще что-то», но я не смог ничего найти в базе данных Oracle. Как добиться этой условной вставки или обновления на основе критерия выбора в базе данных Oracle, потому что наш проект основан на Oracle??
P.S. - Здесь переменная "цена" уже найдена до первого запроса. Я поместил только соответствующую часть кода.