Joh*_*nes 0 sql oracle oracle12c
我正在使用Oracle SQL Developer在Oracle12c中编写一个过程.我需要做的是检查表格以查看是否存在记录.如果是,那我需要编辑它.如果没有,那么我需要添加它.
所以,我的"伪代码"逻辑看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
我将如何在Oracle SQL Developer中编写它?
编辑:
目前我的代码看起来像这样,我需要添加一块来更新记录.如果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;
Run Code Online (Sandbox Code Playgroud)
declare
i number;
begin
Select count(*) into i from MyTable where MyValue = 0;
If (i > 0) then
update ...
else
insert ...
end;
/
Run Code Online (Sandbox Code Playgroud)
但正如评论中所述,您可以通过以下方式获得:
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 ...
Run Code Online (Sandbox Code Playgroud)
如果您提供程序代码,我们可以为您扩展命令.