有条件地将记录添加到表中

mun*_*ish 0 sql oracle plsql

我有更新脚本更新某些列:

update oppar
set oppar_run_mode = 0,
    oppar_run_time = 0, 
    oppar_interval_ind = 'N' , 
    oppar_destination = '',
    oppar_run_date ='', 
    oppar_run_interval=''
    where ( oppar_job_name, oppar_job_rec ) 
    in 
     ( ('CSCLM' , 'XYZ')
   , ('ARCLEVEXT' , 'LMN'));
Run Code Online (Sandbox Code Playgroud)

但也有地方有表中没有记录的情况下oppar其中列 oppar_job_rec是XYZ或LMN.

现在我需要核实存在oppar_job_name=CSCLM ,然后如果存在.我需要检查是否存在与CSCLM相对应的Job rec,即oppar_job_rec=XYZ 如果它不存在,我需要添加一个包含这些细节的新记录.

oppar_job_name=CSCLM
oppar_job_rec=XYZ
oppar_run_mode = 0
oppar_run_time = 0 
oppar_interval_ind = 'N' 
oppar_destination = ''
oppar_run_date ='' 
oppar_run_interval=''
Run Code Online (Sandbox Code Playgroud)

如果它存在,那么我需要更新该行.

如果您需要更多信息,请帮助并告诉我.

但是我如何执行检查是否可以完成,我需要在大约100个具有不同值的oppar_job_rec记录上执行此操作.

Oracle 9i Enterprise Edition release 9.2.8.0 - 64 bit Production

BD.*_*BD. 5

您可以使用SQL Merge语句:http://psoug.org/reference/merge.html

这是一些示例代码:

而不是对job_name和job_rec进行硬编码,而是构建一个表(如果它们不在某个表中):

CREATE TABLE oppar_jobs (oppar_job_name VARCHAR2(200), 
                         oppar_job_rec VARCHAR2(200));

INSERT INTO oppar_jobs (oppar_job_name,oppar_job_rec) 
                VALUES ('CSCLM','XYZ');

INSERT INTO oppar_jobs (oppar_job_name,oppar_job_rec) 
                VALUES ('ARCLEVEXT','LMN');
Run Code Online (Sandbox Code Playgroud)

然后您可以按如下方式运行MERGE:

MERGE
    INTO  oppar 
    USING oppar_jobs 
    ON  ( oppar_jobs.oppar_job_name = oppar.oppar_job_name 
     AND  oppar_jobs.oppar_job_rec = oppar.oppar_job_rec)
WHEN MATCHED
THEN
    UPDATE
    SET oppar_run_mode = 0,
        oppar_run_time = 0, 
        oppar_interval_ind = 'N' , 
        oppar_destination = '',
        oppar_run_date ='', 
        oppar_run_interval=''
WHEN NOT MATCHED
THEN
    INSERT ( oppar_job_name,
             oppar_job_rec,
             oppar_run_mode,
             oppar_run_time,
             oppar_interval_ind,
             oppar_destination,
             oppar_run_date,
             oppar_run_interval)
    VALUES ( oppar_jobs.oppar_job_name,
             oppar_jobs.oppar_job_rec,
             0,
             0,
             'N',
             '',
             '',
             '');
Run Code Online (Sandbox Code Playgroud)