小编use*_*450的帖子

Oracle SQL&scriptella:如何根据选择标准进行条件插入或更新?

我在Scriptella中面临有关Oracle Sql查询的一个问题.

我的意图是 - 我必须从PRODUCT_PRICE表中获取从PRODUCT表中获取的每一行(使用where子句确定)的一些列数据,然后如果从PRODUCT_PRICE获取的数据不包含任何内容或为null,那么我必须为此插入新列对应于产品和商店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>
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 这不起作用!如您所见,如果没有与产品和商店ID相对应的数据,我必须将product_id,store_id以及'price'插入到PRODUCT_PRICE表中.另外,如果存在一行相同的产品和store_id,我只需要更新价格.但是当在第二个查询中获取的结果集不包含任何内容时,条件为"rownum == 0"的脚本不起作用.那怎样才能在Oracle中实现这一目标?

在MySQL或SyBase数据库中,我知道有一种叫做"if exists(select ....)/ then then/else something"的语法,但我在Oracle数据库中找不到任何东西.如何根据Oracle数据库中的选择标准实现此条件插入或更新,因为我们的项目基于Oracle?

PS - 这里"price"变量已在第一个查询之前找到.我只放了代码的相关部分.

sql oracle scriptella

1
推荐指数
1
解决办法
1659
查看次数

标签 统计

oracle ×1

scriptella ×1

sql ×1