Oracle9i引入了MERGE命令,使我们能够在一个SQL语句中对一个表同时执行inserts和updates操作,MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表.最近工作中需要处理一批号码数据.之前数据库中有一个号码的黑名单,用户信息群发的黑名单用户过滤,表格字段如下
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 B1
USING 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);
本以为OK了,结果oracle还是不干,反馈错误ORA-30926: 无法在源表中获得一组稳定的行,这个地方balck_dn_new和black_dn出现了多对一的现象也是不允许的啊,为了正确使用MERGE,于是对balck_dn进行了排重工作
Delete From balck_dn_new a
Where a.Rowid >
(Select Min(x.Rowid) From balck_dn_new b Where b.a = a.a);
接着用上面的merger的SQL语句,成功处理,目的达到了.
Oracle 10g中MERGE有如下一些改进:
1、UPDATE或INSERT子句是可选的
2、UPDATE和INSERT子句可以加WHERE子句
3、ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表
4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行
分享到:
相关推荐
程序员私藏的工具轻松实现项目开发一个命令发起Merge Request项目代码提交合并,可以指定代码Code View审核人。 不会用,随时私信作者。 最新git项目开发中一键发起merge request工具,自动识别本地环境,支持...
主要介绍了详解git merge命令应用的三种情景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
# 进入到Git管理的项目根目录,执行如下命令发起 merge request 请求,默认请求合并到 test 分支,-a 用来指定审核委派人, # 执行 merge 等同于 merge test,或执行 merge 其他远程分支名,具体用法如下: # merge ...
有关的与 make post-merge后运行make post-merge命令使用在提交或推送时从 Node 项目运行不同的命令小字作者:Gleb Bahmutov :copyright: 2014许可证:MIT - 对代码做任何事情,但如果它不起作用,请不要怪我。...
可执行文件放到要合并的文件夹下,双击即可合并exe所在文件夹下所有pdf文件,合并后的文件名为merged.pdf,保存在当前文件夹下。可以新建bat文件,然后bat中指定此可执行文件位置,双击bat也行。...
gdal拼接的代码修改版,原有的自带的gdal_merge.py如果输入文件名称加起来的长度太长的话容易导致报错,因为cmd的命令长度有限制,修改后解决这个问题。使用时,源文件最后的参数为一堆的待拼接图像路径,这里使用...
根据一个源数据表对另一个数据表进行确定性的插入、更新和删除这样复杂的操作,运用新的MERGE语句,开发者用一条命令就可以完成。对两个表进行信息同步时,有三步操作要进行。首先要处理任何需要插入目标数据表的新...
完成Composer后,运行以下命令,它将迁移mailmerge迁移: php artisan mailmerge:migrate 配置程序包 您可以使用以下方法发布配置文件: php artisan vendor:publish --tag= " mailmerge-con
熟悉该过程后,您可以使用以下命令安装此插件: npm install grunt-module-merge --save-dev 安装插件后,可以使用以下 JavaScript 代码在 Gruntfile 中启用它: grunt . loadNpmTasks ( 'grunt-module-merge' ) ;...
通过Windows批处理命令实现二进制文件合并,便于分析各种用途的二进制文件制作和分析,脚本简单,易于理解,使用灵活,可以提高工作效率
通过上面的命令可以查看当前系统可以使用的和支持的gitdiff或gitmerge插件,运行结果如图,git提供了对多种比较工具的支持其中bc3即对应BeyondCompare版本3、4依赖macox需要安装bc的命令行工具(在bc菜单中运行...
git merge命令示例: $ git merge branchname 这个命令把分支"branchname"合并到了当前分支里面。 如有冲突(冲突--同一个文件在远程分支和本地分支里按不同的方式被修改了);那么命令的执行输出就像下面一样
熟悉该过程后,您可以使用以下命令安装此插件: npm install grunt-merge-json --save-dev 安装插件后,可以使用以下 JavaScript 代码在 Gruntfile 中启用它: grunt . loadNpmTasks ( 'grunt-merge-json' ) ;任务...
git命令,git基本命令列表,使用说明: 如检查git版本、设置基本配置、pull、push和merge等。
熟悉该过程后,可以使用以下命令安装此插件: npm install grunt-json-merge --save-dev 插件安装完成后,可以使用以下JavaScript代码在您的Gruntfile中启用该插件: grunt . loadNpmTasks ( 'grunt-json-merge' ...
Sublime Merge 是Sublime Text制作者开发的一款Git客户端。...可以保留你的文件和历史记录,命令面板和热键绑定。支持光明与黑暗主题,可扩展性,语法高亮显示,命令行集成,是一个真正的Git客户端。
深合并 递归合并javascript对象中的值。 请考虑关注该项目的作者 ,并考虑为该项目以显示您的 :red_heart: 和支持。 安装 ... 您可以使用以下命令安装依赖项并运行测试: $ npm install && npm t
熟悉该过程后,您可以使用以下命令安装此插件: npm install grunt-labeled-merge --save-dev 安装插件后,可以使用以下 JavaScript 代码在 Gruntfile 中启用它: grunt . loadNpmTasks ( 'grunt-labeled-merge...
使用工具栏中的“ Generate按钮生成网格列表 选择按住meta键的相邻单元格(注意:在Macintosh键盘上,此键为命令键(⌘)。在Windows键盘上,此键为Windows键(⊞)。) 启用Merge按钮后,合并选定的单元格不断合并...