在黑名单导入时,遇到第一次导入后,假如第二次导入重复数据,该如何解决。
        首先想到的是,按照id,直接delete那条记录,重新insert
        但是黑名单数据不止一条,后采用insertOrUpdate方案:
                最先找到的是这样一条insertOrUpdate:
                 INSERT INTO table_name( 列名1, 列名2, ... )VALUES( value1,value2,... )
               SELECT * FROM(SELECT ?列名1,? 列名2,? .... FROM DUAL)AS b ON DUPLICATE KEY
               UPDATE 列名1=b.列名1, 列名2=b.列名2 , ...
         But,以上方法在MySql中可以实现,经测试在oracle完全不行。
         最后查到merge into 可以解决此类问题,不过需要oracle9.0以上(经询问项目正是10g版本)多次修改最终成功测试,oracle语句如下(为便于理解,格式已经改动):
   MERGE INTO table_name L USING  (SELECT * FROM DUAL) N
             ON (L.列名5='1000000237')

WHEN MATCHED THEN
             UPDATE SET 列名X ='20130412' 
WHEN NOT MATCHED THEN
             INSERT ( 列名1 , 列名2, ... ) VALUES ( '1', ' 小张', ... )
         小插曲:测试成功,但是项目却run到sql语句部分停止不动,后查明是由于事务未提交,表被锁住。
         关于insertOrUpdate,在网上看到的一点(比较值得深思)的看法: 
          最直接的处理方法,就是先SELECT查询一次,看该条数据是否已经存在,如果已存在就UPDATE,如果不存在就INSERT。
        这种处理的缺点是,不管怎样,都要先查询一次。
《the art of sql》(一本SQL书),提到了一种处理方式,先直接UPDATE,通常UPDATE执行之后,会返回更新记录的数目:如果为零,说明改数据不存在,再执行一次INSERT;如果不为零,说明已经UPDATE成功了。

【从本人QQ空间迁移】Oracle中insertOrUpdate语句相关推荐

  1. 【从本人QQ空间迁移】重构“依恋情结”(以黑名单的新增编辑为例)

    本次黑名单新增编辑方法也是使用上次说的form,关于form不再阐述. /*跳转至新增.修改页面*/ public ActionForward turnToEditBlack(ActionMappin ...

  2. Oracle编程入门经典 第6章 在Oracle中处理语句

    6.1     SQL语句类别 DDL:数据定义语言语句.这样的语句有CREATE.TRUNCATE和ALTER,它们用于建立数据库中的结构,设置许可等.用户可以使用它们维护Oracle数据词典. D ...

  3. oracle大于条件,oracle中sql语句中的in的条件数量大于1000有问题

    oracle中sql语句中的in的条件数量大于1000有问题 oracle中sql语句中select * from t_Test t where  t.Id in(1,2,3......)/*数量不能 ...

  4. oracle12测试骤,Oracle中SQL语句解析的步骤

    我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.那么这两种解析有何不同之处呢?它们又分别是如何进行解析呢?Oracle内部解析的步骤又是如何进行的呢?下面 ...

  5. 查询oracle 表达小,oracle中sql语句小练习(使用连接查询)

    假设A(m,n,p),B(m,n,p) --1.A表中有某一项m而B表中没有 使用左连接查询: select a.* from A a left join B b on a.m=b.m where b ...

  6. oracle中into字句,oracle中into语句

    oracle 中select into是什么意思 这是一个复制表数据的操作. 创建aaa表,这里没有定义aaa表的字段以及类型,而是用select * from bbb,这就是把bbb里面所有的字段包 ...

  7. oracle中sql语句(+)符号代表连接

    oracle中sql语句(+)符号代表连接 (+)在=前边为右连接 (+)在=后边为左连接 SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b. ...

  8. oracle sql连接符号,Oracle中sql语句(+)符号代表连接的使用讲解

    oracle中sql语句(+)符号代表连接 (+)在=前边为右连接 (+)在=后边为左连接 SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b. ...

  9. oracle 整个表空间迁移,ORACLE表批量迁移表空间

    第一步:将表迁移到目标表空间 1)使用如下语句,可以将需要移动的表空间语句在pl/sql中列出来, select 'alter table ' ||table_name || ' move table ...

最新文章

  1. python怎么随机生成数据_Python-随机生成数据
  2. 【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
  3. SQL SERVER 创建GHUID命令:select newid();
  4. Linux input子系统 io控制字段【转】
  5. 使用Eclipse连接SAP Netweaver系统遇到的错误消息和解决办法
  6. 【转载】数据库操作:添加、插入、更新语句
  7. 备战美赛,这些你应该知道的知识点
  8. gui jfr_Java飞行记录器(JFR)
  9. 16 --删除排序数组中的重复项
  10. 树莓派Raspberry Pi OS开机自启动脚本
  11. Sass函数:random()函数
  12. 河北外国语学院计算机宿舍,河北外国语学院宿舍怎么样 住宿条件好不好
  13. matlab 实现行程编码 对二值图像进行编解码
  14. linux查看内存和硬盘,Linux 查看内存,CPU及硬盘大小的步骤
  15. android自动化 模拟器,Android模拟器入门[转]
  16. 周鸿祎反流氓的基本商业逻辑(ZZ)
  17. 名帖89 蔡襄 楷书《荔枝谱》
  18. js完美转换阿拉伯数字为数字大写
  19. 计算机网络人工智能论文,浅析计算机网络中人工智能的应用论文
  20. 【Linux】SIGCHLD信号

热门文章

  1. 五个实体店营销方案,彻底打开你的思维,再也不用担心顾客不进店
  2. Joda-Time 计算两个时间差(年,月,星期,日,小时,分钟,秒,毫秒)
  3. [实践编] 直流电机的单片机控制与编码器信号处理
  4. C 语言http GET请求 超小纯净下载工具 (暂时只支持http,支持大文件下载)第三季
  5. 小心!异常断电对SSD的危害原来这么大
  6. 2012年敏捷个人俱乐部(北京)实践团开始报名了......
  7. 金州勇士队,硅谷黑科技打造的NBA奇迹!
  8. HTML5 表格元素
  9. 添加对System.ComponentModel.DataAnnotations.Schema;的引用
  10. 内网穿透---IPv6点对点【妈妈再也不用担心网速了】