2017-01-31 8 views
0

私は、3つの複合プライマリ・キー(customer_id列、system_origin列、policy_number列)で構成される複数の列を持つ表を持っています。 以下のようにテーブルが作成されます。私は行が既にCUSTOMER_ID、system_originのためのユニークな組み合わせのために存在するかどうかを初ストアドプロシージャを書き込むための要件が​​、policy_numberそれが有する既存の行を更新新しい値を挿入する前にコンポジット・プライマリ・キーをチェックする方法

Create table LOST_MEMBER_ACCESS_LOG (
Customer_id varchar2(20) NOT NULL, 
System_Origin varchar2(20) NOT NULL, 
Policy_Number varchar2(20) NOT_NULL, 
PRIMARY_KEY(Customer_id,System_Origin, Policy_Number) 
); 

新しい値を挿入するか、新しい行を挿入します。

if row exists then 
    update ... 
else 
    insert ... 
end if; 

しかし、もっと簡単な方法があります:あなたはあなたがしたいと言っているのか

+3

MERGEは、探しているコマンドです。 [詳細はこちら](https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606) – APC

+0

「LEFT JOIN」を使用して値の有無を確認するには、「INSERT 'と' UPDATE'がありますが、2つのクエリを別々の 'OR'で書く必要があります。テーブルで直接チェックしてから、条件付きでクエリを設定することができます。 – Susang

答えて

1

です。ただ、アップデートを行うと、任意の行が

update lost_member_access_log 
    set ... 
where ... ; 
if sql%rowcount = 0 then 
    insert into lost_member_access_log ... 
end if; 

MERGEも、もちろんオプションで触れたかどうかを確認します。

関連する問題