Sql 有条件地将记录添加到表中
我得到了更新某些列的更新脚本:Sql 有条件地将记录添加到表中,sql,oracle,plsql,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 ( (
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'));
但是,在某些情况下,表格中没有记录
oppar\u job\u rec是XYZ或LMN
现在我需要验证oppar\u job\u name=CSCLM
如果存在的话。
我需要检查是否存在与CSCLM相关的作业记录,即oppar\u Job\u 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=''
如果它存在,那么我需要更新该行
如果您需要更多信息,请帮助并告诉我
但是,我如何执行检查,如果它可以完成,我需要对大约100条记录执行检查,这些记录的oppar_job_rec的值不同
Oracle 9i Enterprise Edition 9.2.8.0版-64位生产版
您可以使用SQL合并语句:
下面是一些示例代码:
不要硬编码作业名称和作业记录,而是构建一个表(如果它们不在某些表中):
然后可以按如下方式运行合并:
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',
'',
'',
'');
您可以使用SQL合并语句: 下面是一些示例代码: 不要硬编码作业名称和作业记录,而是构建一个表(如果它们不在某些表中): 然后可以按如下方式运行合并:
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',
'',
'',
'');
当您使用
9i
时,合并
不是一个选项;因此,您有许多选项,2涉及PL?SQL
选项1:更新然后插入
如果您不关心发生的错误,您可以运行更新,然后运行插入。更新可能不会执行任何操作,插入可能会导致主键冲突,但至少您知道所有操作都已完成。如果这样做,则每个插入都必须单独完成
选项2:更新然后插入错误捕获
使用PL/SQL可以执行如下操作:
update my_table
set <col1> = :col1
where <blah>
if SQL%ROWCOUNT = 0 then
insert into my_table
values < my values >
elsif SQL%ROWCOUNT = 1 then
insert less...
end if;
更新我的表格
set=:col1
哪里
如果SQL%ROWCOUNT=0,则
插入到我的表中
价值观<我的价值观>
如果SQL%ROWCOUNT=1,则
插入更少的。。。
如果结束;
选项3:插入,然后用错误捕捉更新
插入到我的表格中
价值观<我的价值观>
当dup_val_在索引上时出现异常
更新我的表格
集合::col1
哪里
当您使用9i
时,合并
不是一个选项;因此,您有许多选项,2涉及PL?SQL
选项1:更新然后插入
如果您不关心发生的错误,您可以运行更新,然后运行插入。更新可能不会执行任何操作,插入可能会导致主键冲突,但至少您知道所有操作都已完成。如果这样做,则每个插入都必须单独完成
选项2:更新然后插入错误捕获
使用PL/SQL可以执行如下操作:
update my_table
set <col1> = :col1
where <blah>
if SQL%ROWCOUNT = 0 then
insert into my_table
values < my values >
elsif SQL%ROWCOUNT = 1 then
insert less...
end if;
更新我的表格
set=:col1
哪里
如果SQL%ROWCOUNT=0,则
插入到我的表中
价值观<我的价值观>
如果SQL%ROWCOUNT=1,则
插入更少的。。。
如果结束;
选项3:插入,然后用错误捕捉更新
插入到我的表格中
价值观<我的价值观>
当dup_val_在索引上时出现异常
更新我的表格
集合::col1
哪里
您使用的Oracle版本是什么?我的Oracle版本是Orcale9i Enterprise editon release 9.2.8.0-64位产品您使用的Oracle版本是什么?我的Oracle版本是Orcale9i Enterprise editon release 9.2.8.0-64位产品只需在表中传递一次,效率更高,因此,MERGE语句可能是个好主意。只在表中传递一次更有效,因此MERGE语句可能是个好主意。