Chinaunix首页 | 论坛 | 博客
  • 博客访问: 672987
  • 博文数量: 102
  • 博客积分: 2585
  • 博客等级: 少校
  • 技术积分: 1115
  • 用 户 组: 普通用户
  • 注册时间: 2005-01-17 02:26
个人简介

IT屌丝一枚

文章分类

全部博文(102)

文章存档

2017年(1)

2016年(1)

2014年(6)

2013年(2)

2012年(1)

2011年(2)

2010年(3)

2009年(3)

2008年(4)

2007年(5)

2006年(40)

2005年(34)

分类: Oracle

2014-11-13 12:08:43

Oracle提供的Merge into语句非常强大,能在一个语句中经判定条件而进行update和insert等操作。这里有个坑,一旦你使用含有DBLink的表,就有可能出现"ORA-01008not all variables bound错误。见下面例子语句:

点击(此处)折叠或打开

  1. merge into ucr_sta_chnl.mapp_ext_attr_usage@ngsta aa
  2. using (select *
  3.          from bill.grid_dev_report_point_rate
  4.         where timest = to_char(sysdate - 1, 'yyyymmdd')) bb
  5. on (aa.ext_attr_obj_id = bb.depart_id and aa.eparchy_code = '0758' and aa.ext_attr_id = 41)
  6. when not matched then
  7.   insert
  8.   values
  9.     (ucr_sta_chnl.seq_mapp_ext_attr_usage.nextval@ngsta,
  10.      '1002',
  11.      bb.depart_id,
  12.      41,
  13.      'MONTH_SALES',
  14.      null,
  15.      'GRP',
  16.      '当月销量',
  17.      '当月销量',
  18.      'ZQAD0001',
  19.      sysdate,  --注意这里
  20.      'ZQAD0001',
  21.      sysdate,  --注意这里
  22.      '0758');
估计是因为横跨了两个数据库,所以sysdate这个变量参数未能进行绑定传递,所以必须要做一些变通,把变量变成常量后即可,修改后的语句如下:

点击(此处)折叠或打开

  1. merge into ucr_sta_chnl.mapp_ext_attr_usage@ngsta aa
  2. using (select depart_id, sysdate as "SYS_DATE" --注意这里
  3.          from bill.grid_dev_report_point_rate
  4.         where timest = to_char(sysdate - 1, 'yyyymmdd')) bb
  5. on (aa.ext_attr_obj_id = bb.depart_id and aa.eparchy_code = '0758' and aa.ext_attr_id = 41)
  6. when not matched then
  7.   insert
  8.   values
  9.     (ucr_sta_chnl.seq_mapp_ext_attr_usage.nextval@ngsta,
  10.      '1002',
  11.      bb.depart_id,
  12.      41,
  13.      'MONTH_SALES',
  14.      null,
  15.      'GRP',
  16.      '当月销量',
  17.      '当月销量',
  18.      'ZQAD0001',
  19.      bb.sys_date, --注意这里
  20.      'ZQAD0001',
  21.      bb.sys_date, --注意这里
  22.      '0758');

阅读(4443) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~