我现在DB中存在两个表Table1(Column1,C2,C3),Table2(Column1,C4,C5),两者之间有一公共栏位Column1,
现在我想建立一个Procedure来实现以下功能,当两个表中在栏位Column1上存在相同的数据时,用Table2对Table1进行更新操作;否则,用Table2对Table1实现插入操作;请问这样的Procedure该如何写效率能高点???高人请进!!!
现在我想建立一个Procedure来实现以下功能,当两个表中在栏位Column1上存在相同的数据时,用Table2对Table1进行更新操作;否则,用Table2对Table1实现插入操作;请问这样的Procedure该如何写效率能高点???高人请进!!!
解决方案 »
- oracle下载问题
- oracle同一个方案下的表,有的能访问,有的不能访问到为什么呢?
- 急求:在oracle数据库中创建存储过程的问题!!!
- 如何解决ORA-01480: STR 赋值变量缺少空后缀错误?
- 将多个表a1,a2...(结构一样)的某些字段的数据导到一个表b(b的结构包含a需要导的字段,另外多出字段a没有的,想在导的时候插进去个变量)里面
- 一个简单的sql语句 求助!!
- 从oracle 主页上下载的oracle 9i企业版是几用户的,有何限制
- 这个问题能够实现哇?
- 奇怪的问题(导入过程没有反应)
- 初级问题50分:oracle中怎样进行日期运算?
- 关于多对多转化成一对一的问题.
- oracle 服务器建表
merge就行了
SET (Column1,C2,C3) =
(SELECT Column1,C4,C5
FROM Table2 b
WHERE b.Column1=a.Column1)
WHERE EXISTS (SELECT 1
FROM Table2 b
WHERE b.Column1=a.Column1);
update语句insert 语句
insert into Table1
SELECT Column1,C4,C5
FROM Table2 b
WHERE NOT EXISTS (SELECT 1
FROM Table1 b
WHERE b.Column1=a.Column1)
using table2 b
on(b.Column1=a.Column1)
WHEN MATCHED THEN UPDATE SET (Column1,C2,C3)= (Column1,C4,C5)
WHEN NOT MATCHED THEN INSERT VALUES (Column1,C4,C5);
merge我没用过了,看到一楼说的,临时看了下,去写的
as
cursor cur is select * from table2;
t1 table1%type;
n int;
begin
open cur;
loop
fetch cur into t1;
exit when cur%notfound;
select count(*) into n from table1 where column1=t1.column1;
if(n=0)
begin
insert into table1(column1,c2,c3) values(t1.column1,t1.c4,t1.c5);
end;
else
begin
update table1 set c2=t1.c4,c3=t1.c5 where column1=t1.column1;
end;
end loop;
close cur;
end;好久没有摸oracle了,家里没有装oracle,没有环境可以试一下,不知能不能给楼主一点帮助.
t1变量的声明写错了,更正一下.
如果需要定时执行,在把merge编写到存储过程就好了。
强烈建议避免使用游标。