日期:2014-05-17  浏览次数:20971 次

一段更新oracle表内数据的问题!
(我晕,发完帖子发现格式有点乱,第一表里面的double_certsn项是空的啊)
有如下表:
cert:
  CERTSN DOUBLE_CERTSN SUBJECET CTML_NAME
1001B8253DA26E7C 天津 签名
B0A2B8253DA26E71 上海 加密
1002B8253DA26E73 天津 签名
F0D2B8253DA26E74 上海 签名
1002B8253DA26E75 北京 加密
30E2B8253DA26E76 北京 签名

现在想要将cert表内的DOUBLE_CERTSN项添加上数据。
添加数据的原则就是在subject相同的情况下以CTML_NAME值为“签名”的那行的certsn列后面加“0000”构成,如上表就变为:
  CERTSN DOUBLE_CERTSN SUBJECET CTML_NAME
1001B8253DA26E7C 1001B8253DA26E7C0000 天津 签名
B0A2B8253DA26E71 F0D2B8253DA26E740000 上海 加密
1002B8253DA26E73 1001B8253DA26E7C0000 天津 签名
F0D2B8253DA26E74 F0D2B8253DA26E740000 上海 签名
1002B8253DA26E75 30E2B8253DA26E760000 北京 加密
30E2B8253DA26E76 30E2B8253DA26E760000 北京 签名

上面所有字段的类型都是VARCHAR2(40)的

请问实现这个目的的oralce语句如何写呢?
在SQL200中我用过如下语句
update cert set double_certsn=convert(VARCHAR2(40),certsn)+'0000'
where double_certsn is null and cert_status='use' and ctml_name like '%签名%' ;

UPDATE A SET
  double_certsn=B.double_certsn
FROM cert AS A
  JOIN cert AS B
  ON A.subject=B.subject
WHERE B.double_certsn IS NOT NULL
  AND A.double_certsn IS NULL
  AND A.cert_status='use'
没问题,但是应用在oracle里面就不行了请问怎么解决

------解决方案--------------------

update cert b set b.double_certsn=(select a.certsn from cert a where a.ctml_name='签名' and b.subject=a.subject)||'000';