2016-12-01 10 views
-1

Oracle SQL Developerを使用してOracle12cにプロシージャを作成しています。私がしなければならないことは、レコードが存在するかどうかを調べることです。もしそうなら、私はそれを編集する必要があります。そうでなければ、私はそれを追加する必要があります。Oracle IF/ELSE文

だから、私の「擬似コード」のロジックは次のようになります。私は、Oracle SQL Developerのことを書くとどう

If (Select * from MyTable where MyValue = 0) has more than one record, then 
    This will be an EDIT line of code 
else 
    This will be an ADD line of code 
end 

を?

EDIT:

現在、私のコードは次のようになり、私はレコードを更新するために作品を追加する必要があります。 Line_IDが存在する場合は、レコードを更新する必要があります。そうでなければ、私はそれを追加する必要があります。

create or replace PROCEDURE CST_WRITE_FEEDBACK (
v_AuditID IN NUMBER, 
v_BenefitID IN NUMBER, 
v_Network1 IN VarChar, 
v_Network2 IN VarChar, 
v_Network3 IN VarChar, 
v_Network4 IN VarChar, 
v_Issue1 IN NUMBER, 
v_Issue2 IN NUMBER, 
v_Issue3 IN NUMBER, 
v_Issue4 IN NUMBER, 
v_Resolution1 IN NUMBER, 
v_Resolution2 IN NUMBER, 
v_Resolution3 IN NUMBER, 
v_Resolution4 IN NUMBER, 
v_Status IN NUMBER, 
v_Comment IN VarChar, 
v_LineID IN NUMBER, 
v_EmpID IN NUMBER 
) 
AS 
BEGIN 

IF 

    INSERT INTO F_AUDIT_LINE ("AUDIT_ID", "BENEFIT_ID", "NETWORK", "NETWORK2", "NETWORK3", "NETWORK4", 
    "ISSUE_ID", "ISSUE_ID2", "ISSUE_ID3", "ISSUE_ID4", 
    "RESOLUTION_ID", "RESOLUTION_ID2", "RESOLUTION_ID3", "RESOLUTION_ID4", 
    "LINE_STATUS") 
    VALUES (v_AuditID, v_BenefitID, v_Network1, v_Network2, v_Network3, v_Network4, 
    v_Issue1, v_Issue2, v_Issue3, v_Issue4, 
    v_Resolution1, v_Resolution2, v_Resolution3, v_Resolution4, 
    v_Status 
); 

END CST_WRITE_FEEDBACK; 
+2

Oracleでマージ機能を使用する –

+0

これを拡張できますか? –

+0

コードとしてSQL Developerのタグを削除しました。使用するエディタに依存しません。 – Kacper

答えて

5
declare 
    i number; 
begin 
    Select count(*) into i from MyTable where MyValue = 0; 
If (i > 0) then 
    update ... 
else 
    insert ... 
end; 
/

しかし、あなたはでそれを持つことができますコメントで述べたように:あなたはあなたの手順のコードを提供する場合、我々はあなたのコマンドに展開することができます

merge into MyTable m 
using (select v_AuditID, v_BenefitID, v_Network1, v_Network2, _Network3, _Network4, 
       v_Issue1, v_Issue2, v_Issue3, v_Issue4, 
       v_Resolution1, v_Resolution2, v_Resolution3, v_Resolution4, v_Status 
     from dual) d 
on (d.MyValue = m.Myvalue) 
when matched then 
    update set .. 
when not matched then 
    insert ... 

+0

現在のコードについては、私の更新を参照してください。 –

+5

@JohnnyBonesこれはコード作成サービスではありません。 Kacperの答えに加えて、[here](https://oracle-base.com/articles/9i/merge-statement)のようなインターネット上のマージについての有益な情報がたくさんあります。あなた自身のマージステートメントを書いてもらうのはどうですか。そして、あなたが立ち往生したら助けを求めるのですか? – Boneist

+0

@Boneist - これを書く前に私のプロフィールを見ましたか? –