最近进入到另一个项目, 数据库用的是DB2, 要实现MySQL中类似replace into的功能, 网上搜了下, 实现了一个类似功能的基础方法(PHP实现)

    public function replace($table, $arr, $pks){
$values = '';
$keys = '';
$mergeValues = '';
$upStatement = '';
$first = true;
foreach($arr as $key => $val){
if (!$first){
$values .= ',';
$keys .= ',';
$mergeValues .= ',';
$upStatement .= ',';
}
else{
$first = false;
}
$values .= "'{$val}'";
$keys .= $key;
$mergeValues .= "merge.{$key}";
$upStatement .= "tab.{$key} = merge.{$key}";
}
$first = true;
$pkstr = '';
foreach($pks as $pk){
if (!$first){
$pkstr .= ' AND ';
}
else{
$first = false;
}
$pkstr .= "tab.{$pk} = merge.{$pk}";
}
$sql = "MERGE INTO {$table} AS tab
USING (VALUES
({$values})
) AS merge ({$keys})
ON {$pkstr}
WHEN MATCHED THEN
UPDATE SET {$upStatement}
WHEN NOT MATCHED THEN
INSERT ({$keys})
VALUES ({$mergeValues})";
$this->db->query($sql);
}

参考链接:

http://www.withdata.com/blog/db2/replace-update-or-insert-a-row-into-db2-table-merge-into.html

DB2 replace into实现的更多相关文章

  1. db2基础

    DB2知识文档 一.db2 基础 基本语法 注释:"--"(两个减号) 字符串连接:"||" 如set msg='aaaa'||'bbbb',则msg为'aaa ...

  2. db2循环

    db2普通循环结构 while循环 while 条件 do 循环体 end while; LOOP循环 SET V_INDEX = 0; AUTHLOOP: LOOP V_INDEXV_INDEX = ...

  3. db2 import export load

    DB2中所谓的数据移动,包括: 1. 数据的导入(Import) 2. 数据的导出(Export) 3. 数据的装入(Load) 导入和装入都是利用DB2的相关命令把某种格式的文件中的数据保存到数据库 ...

  4. DB2常用命令

    DB2安装启动服务中启动不了,可用command启动并查看windows系统的日志.1.启动数据库  db2start2.停止数据库  db2stop3.连接数据库运行 db2命令之前要先运行db2c ...

  5. DB2 常用命令小结

    . 打开命令行窗口 #db2cmd . 打开控制中心 # db2cmd db2cc . 打开命令编辑器 db2cmd db2ce =====操作数据库命令===== . 启动数据库实例 #db2sta ...

  6. DB2常用sql函数 (转载)

    http://www.techonthenet.com/sql/index.php 一.字符转换函数 1.ASCII() 返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字 ...

  7. DB2语句详细资料

    http://www.2cto.com/database/201307/225809.html 1.数据操作语言(DML:select,delete,insert,update) <>查询 ...

  8. DB2操作命令

    本文详细汇总了DB2的常用操作命令,分享给大家.对于使用db2的朋友可以参考下. DB2数据库管理客户端从v9.7版本之后就不再带有控制中心了,而是使用 Data Studio Client.安装 D ...

  9. DB2 错误信息码

    000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +1 ...

随机推荐

  1. SQLLite 简介

    [1] SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内 ...

  2. 第九章------HAL

    HAL是建立在Linux驱动之上的的程序库,他是一个应用层,它的作用保护内部私有.有一种是位于Android层次的系统运行库层,Linux中只保留与寄存器相互的代码,通过HAL进行数据的传递. 为An ...

  3. centos mysql 编译安装

    centos mysql 编译安装 1.安装 创建MySQL用户 sudo useradd mysql 下载MySQL的源码包,我们这里使用的时5.5.18 安装依赖 sudo yum -y inst ...

  4. C# 内存管理优化畅想----前言

    C#语法简洁.优雅,类库丰富,是我最喜爱的计算机语言,没有“之一”.但是,经过深入学习后发现,C#的内存管理,也就是通常所说的垃圾回收(GC)机制,虽然跟其他支持GC的语言相比,已经很优秀了,但与手动 ...

  5. 如何使用node中的buffer

    介绍:Buffer类是一个全局类,是一个比较罕见不需要require( ‘buffer’ )就可以使用的类,Buffer类似与数组也有length, 它里面的元素为16进制的两位数,即 0-255的数 ...

  6. cocos2dx 各种环境的搭建

    http://www.cocos.com/doc/tutorial/index?type=cocos2d-x Windows7上搭建Cocos2d-x 3.4开发环境 这里需要注意的是,如果是搭建VS ...

  7. MVC ViewData和ViewBag

        视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类.对于ViewBag是如此的强大,意味着你能动态的s ...

  8. JavaScript Array(数组) 对象

    更多实例 合并两个数组 - concat() 合并三个数组 - concat() 用数组的元素组成字符串 - join() 删除数组的最后一个元素 - pop() 数组的末尾添加新的元素 - push ...

  9. iframe的缺点与优点?

    iframe是一种框架,也是一种很常见的网页嵌入方式. iframe的优点: iframe能够原封不动的把嵌入的网页展现出来. 如果有多个网页引用iframe,那么你只需要修改iframe的内容,就可 ...

  10. maven+jetty项目在tomcat部署

    步骤1:项目打包 clean install 步骤二:拷贝war 包到tomcat下 步骤三:修改server.xml文件的端口 步骤四:启动tomcat,注意jetty的项目是不需要带项目名的,To ...