oracle9i中使用MERGE语法时碰到的问题
来源:互联网 发布:c语言预处理命令三种 编辑:程序博客网 时间:2024/05/17 06:35
最近工作中需要处理一批号码数据.之前项目中有一个号码的黑名单表格字段如下:
black_dn( dn varchar(13),flag number(2))
此表格中保存了一份号码黑名单数据,dn为号码,flag为地市标志.现在又有了一份黑名单.这份黑名单中可能有重复的,可能有之前已经导入到黑名单表格中的.需要把这份黑名单无重复的添加近black_dn表中于是我按照black_dn创建了一个新的表
create balck_dn_new as select * from black_dn where 0=1;
然后将新的数据使用sqlload全部导入到新的表中,接着我需要更新black_dn中的数据,于是使用了如下的SQL
MERGE INTO BLAKC_DN B1USING BLACK_DN_NEW B2
ON (B1.DN=B2.DN AND B1.FLAG=B2.FLAG)
WHEN MATCHED THEN
UPDATE SET
B1.DN=B2.DN
B1.FLAG=B2.FLAG
WHEN NOT MATCHED THEN
INSERT VALUES(B2.DN,B2.FLAG);
但是数据库反馈了ORA-00904: "B1"."DN": 无效的标识符,刚开始非常想不通为什么会提示这个错误.明明字段是没有错误的.于是乎有是找了一通资料,发现了问题所在,如果你在on后引用了哪些列,这些列是不允许更新的.但是oracle这个提示错误个人觉得是很有问题的.于是为了正确使用,我又为把balck_dn表扩展为
BLACK_DN (DN VARCHAR(13),FLAG NUMBER(2),IFLAG NUMBER(2))
在IFLAG字段中全部填入了0,然后修改了SQL
MERGE INTO BLAKC_DN B1
USING BLACK_DN_NEW B2
ON (B1.DN=B2.DN AND B1.FLAG=B2.FLAG)
WHEN MATCHED THEN
UPDATE SET
B1.IFLAG=10
WHEN NOT MATCHED THEN
INSERT VALUES(B2.DN,B2.FLAG,1);
本以为万事大吉,结果oracle还是不干,反馈错误
ORA-30926: 无法在源表中获得一组稳定的行
郁闷,这个地方balck_dn_new和black_dn出现了多对一的现象,也是不允许的啊.不过这时本人已铁了新,非要用MERGE语句完成功能,于是对balck_dn进行了排重工作,接着用上面的SQL,OK,现在目的打到了.一个任务完成,虽然费了点时间.不过也算多学习点东西.
- oracle9i中使用MERGE语法时碰到的问题
- Oracle9i MERGE语法使用
- Oracle9i MERGE语法使用
- Oracle9i之后的MERGE语法
- asp.net连接oracle9i碰到的问题
- asp.net连接oracle9i碰到的问题
- Oracle9I新增语法 merge into
- 使用myfaces过程中碰到的问题
- eclipse中使用Tomcat碰到的问题
- linux使用中碰到的问题
- xmlbeans使用中碰到的问题
- JBPM4 使用中碰到的一些问题
- 使用路由器中碰到的问题总结
- 使用ajax中碰到的编码问题
- Loadrunner使用过程中碰到的问题
- edx 使用中碰到的问题
- Selenium使用过程中碰到的问题
- Idea 使用中碰到的问题
- as2.0的Sound对象和TimeLine上的Sound
- 如何使用Convert命令将分区从FAT 32转换为NTFS文件系统
- Android学习笔记(2)-初识Activity
- 将CMD命令输出到控制台!
- Android学习笔记(3)-Activity的生命周期
- oracle9i中使用MERGE语法时碰到的问题
- jstl简单介绍_081205
- 个人博客终于开通了
- 续C#数据类型
- GNU sort命令详解
- oracle 存储过程的基本语法
- java 几种设计模式
- Android学习笔记(4)-学习Intent的使用
- base href小心使用