ORACLE MERGER 的应有和问题

zfrandzfr 2007-10-12 10:53:10
问题收集日期:2007-10-12


测试用例
create table A1
(
A VARCHAR2(20),
B NUMBER(20,2)
);
create table A2
(
A VARCHAR2(20),
B NUMBER(20,2),
C NUMBER(20,2)
);

insert into A1 (A, B)
values ('a', 12);
insert into A1 (A, B)
values ('v', 121);
insert into A1 (A, B)
values ('d', 22);


说明:以A1来处理A2。

------没有子查询的变量的应用
declare
v1 varchar2(20);
v2 varchar2(20);
v3 number(20,2);
v4 number(20,2);
begin
v1:='a';
v2:='v';
v3:=1090;
v4:=8888;
merge into a2
using a1 tt
on (a2.a=tt.a )
when matched then
update set c=v3
when not matched then
insert (a,b,c)
values(tt.a,tt.b,v4);
end;

-------子查询的情况 变量的应用
declare
v1 varchar2(20);
v2 varchar2(20);
v3 number(20,2);
v4 number(20,2);
begin
v1:='a';
v2:='v';
v3:=1090;
v4:=8888;
merge into a2
using (select a,b,v4 as c,v3 as d from a1 where a1.a= v1 or a1.a=v2) tt
on (a2.a=tt.a )
when matched then
update set c=tt.d
when not matched then
insert (a,b,c)
values(tt.a,tt.b,tt.c);
end;


为什么以下这么用不可以呢?
declare
v1 varchar2(20);
v2 varchar2(20);
v3 number(20,2);
v4 number(20,2);
begin
v1:='a';
v2:='v';
v3:=1090;
v4:=8888;
merge into a2
using (select a,b, from a1 where a1.a= v1 or a1.a=v2) tt
on (a2.a=tt.a )
when matched then
update set c=v3
when not matched then
insert (a,b,c)
values(tt.a,tt.b,v4);
end;
...全文
258 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxianxian 2007-10-16
  • 打赏
  • 举报
回复
它跳什么樣的錯誤啊?
zfrandzfr 2007-10-15
  • 打赏
  • 举报
回复
?

kinglht 2007-10-15
  • 打赏
  • 举报
回复
using (select a,b, from a1 where a1.a= v1 or a1.a=v2) tt

多了个,号

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧