我在 Scriptella 中面临一个关于 Oracle Sql 查询的问题。
我的意图是 - 我必须从 PRODUCT_PRICE 表中为从 PRODUCT_PRICE 获取的每一行(使用 where 子句确定)获取一些列数据,然后如果从 PRODUCT_PRICE 获取的数据不包含任何内容或为空,那么我必须为将产品和商店 id 对应的价格值放入表中,否则如果存在与产品和商店 id 对应的行,则我必须更新价格。
以下代码应该清除我正在描述的逻辑 -
<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>
我的问题是 - 这不起作用!如您所见,如果没有与产品和商店 ID 对应的数据,我必须将 product_id、store_id 以及“价格”插入到 PRODUCT_PRICE 表中。此外,如果存在一行相同的产品和 store_id,我必须只更新价格。但是,当第二个查询中获取的结果集不包含任何内容时,条件为“rownum==0”的脚本就不起作用了。那么如何在 Oracle 中实现这一点?
在 MySQL 或 SyBase 数据库中,我知道有一种语法称为“if exists(select ....) / then something / else something”,但我在 Oracle 数据库中找不到任何东西。由于我们的项目是基于Oracle的,如何根据Oracle数据库中的选择标准来实现这种有条件的插入或更新?
PS - 在第一次查询之前已经找到“价格”变量。我只放了代码的相关部分。