我有一个有3列的表:
Year--------- |------ Start_seq ----- |--------- End_Seq-----------
我希望以这样的方式填充数据:
1 - 如果存在年份,即2016年是否存在年份,则仅更新end_seq
即year
start_seq
和end_seq
2 - 如果年份不存在,则在该表中插入该年份的条目
我必须在shell脚本中处理所有这些。
我能够做到这一点:
Declare variable_out varchar2(5);
begin
SELECT count(*) into variable_out FROM ar9_glext_report_seq WHERE year=2017
if variable_out ==1
update ar9_glext_report_seq
set FileSeqNumberEnd = FileSeqNumberEnd +1
where year=2017
commit ;
else
insert into ar9_glext_report_seq values (2017 , 0001, 0001);
commit;
请帮忙。
谢谢:)
答案 0 :(得分:0)
您可以使用MERGE语句(oracle文档https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm)。
MERGE INTO ar9_glext_report_seq D
USING (SELECT newyear as y, newstart as start, newend as end FROM dual) S
ON (D.year= S.y)
WHEN MATCHED THEN UPDATE SET D.End_Seq = S.start
WHEN NOT MATCHED THEN INSERT (D.year, D.Start_Seq, D.End_Seq)
VALUES (S.y, S.start, S.end)
在USING statment中修改查询以选择正确的值。 对不起,我无法测试。