Scriptella での Oracle Sql クエリに関する 1 つの問題に直面しています。
私の意図は - PRODUCT テーブルからフェッチされた行 (where 句を使用して決定) ごとに PRODUCT_PRICE テーブルからいくつかの列データをフェッチする必要があり、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>
私の質問は - これは機能していません! ご覧のとおり、製品と店舗 ID に対応するデータが存在しない場合、product_id、store_id、および「価格」を PRODUCT_PRICE テーブルに挿入する必要があります。また、同じ商品と store_id の行が存在する場合は、価格のみを更新する必要があります。しかし、2 番目のクエリでフェッチされた結果セットに何も含まれていない場合、条件 "rownum==0" を持つスクリプトは機能しません。Oracleでこれをどのように達成できますか?
MySQL または SyBase データベースには、"if exists(select ....) / then something / else something" という構文があることは知っていますが、Oracle データベースには何も見つかりませんでした。私たちのプロジェクトはOracleに基づいているため、Oracleデータベースの選択基準に基づいてこの条件付きの挿入または更新を実現するにはどうすればよいですか??
PS - ここで「price」変数は、最初のクエリの前にすでに見つかりました。コードの関連部分のみを配置しました。