谈一谈兼容Oracle和DB2开发时的注意事项

我们在做兼容oralcedb2开发时,需要注意一些问题,以免遇到不兼容的现象,为开发者带来麻烦。本例子的前提是db2版本是9.7,且是开启PLSQL编译选项之后创建的数据库。接下来我们就开始介绍这些。

目前成都创新互联已为上千余家的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、常宁网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

注意事项:

1. 在like 之后若使用了表字段,应统一改成使用locate函数,如:

oralce写法:

 
 
 
  1. select * from fw_right a where '03' like a.rightid||'%';

兼容写法:

 
 
 
  1. select * from fw_right a where locate('03',a.rightid) = 1;

oralce写法:

 
 
 
  1. select * from fw_right a where '03' like '%'||a.rightid||'%';

兼容写法:

 
 
 
  1. select * from fw_right a where locate('03',a.rightid) > 0;

2. 视图中使用的别名不应该与当前表字段同名。

如以下语句,在oracle中不会有问题,但在db2中会报"SQL0153N"错误。

 
 
 
  1. CREATE OR REPLACE VIEW V_WF_TODOLIST AS
  2. select c.process_def_id, c.process_def_name, a.action_def_id,
  3. a.work_item_id, a.bae007, a.action_def_name,
  4. a.state,  a.pre_wi_id,  a.work_type,
  5. a.operid, a.x_oprator_ids,  b.process_key_info,
  6. to_char(to_date(a.start_time, 'yyyymmddhh24miss'),'yyyy-mm-dd hh24:mi:ss') as start_time,
  7. to_char(to_date(a.complete_time,'yyyymmddhh24miss'),'yyyy-mm-dd hh24:mi:ss') as complete_time,
  8. a.filter_opr, a.memo,a.bae002,a.bae003, a.bae006,c.x_action_def_ids
  9. from wf_work_item a, wf_process_instance b, wf_action_def c
  10. where a.action_def_id  = c.action_def_id
  11. and b.process_def_id = c.process_def_id
  12. and a.bae007 = b.bae007
  13. and a.state in('0','2')

兼容写法:

 
 
 
  1. CREATE OR REPLACE VIEW V_WF_TODOLIST AS
  2. select c.process_def_id, c.process_def_name, a.action_def_id,
  3. a.work_item_id, a.bae007, a.action_def_name,
  4. a.state,  a.pre_wi_id,  a.work_type,
  5. a.operid, a.x_oprator_ids,  b.process_key_info,
  6. to_char(to_date(a.start_time, 'yyyymmddhh24miss'),'yyyy-mm-dd hh24:mi:ss') as start_time_0,
  7. to_char(to_date(a.complete_time,'yyyymmddhh24miss'),'yyyy-mm-dd hh24:mi:ss') as complete_time_0,
  8. a.filter_opr, a.memo,a.bae002,a.bae003, a.bae006,c.x_action_def_ids
  9. from wf_work_item a, wf_process_instance b, wf_action_def c
  10. where a.action_def_id  = c.action_def_id
  11. and b.process_def_id = c.process_def_id
  12. and a.bae007 = b.bae007
  13. and a.state in('0','2')

3.在下列情况下不允许ORDER BY 或 FETCH FIRST n ROWS ONLY:

  • 外层全查询视图
  •  "SQL 表函数"的 RETURN 语句中的外层全查询
  • 具体化查询表定义
  • 未用圆括号括起来的子查询

否则会报"SQL20211N  规范 ORDER BY 或 FETCH FIRST n ROWS ONLY 无效。"错误。

oralce写法:

 
 
 
  1. CREATE OR REPLACE VIEW V_FW_BLANK_BULLETIN as
  2. select id, bae001,  operunitid, operunittype, unitsubtype, ifergency,
  3. title,  content, digest,  duetime,  validto, aae100,
  4. bae006, bae002,  bae003,  id as colid,
  5. substr(digest,1,20) as digest2
  6. from fw_bulletin
  7. where duetime <= to_char(sysdate,'yyyymmddhh24miss')
  8. and (to_char(validto) >= to_char(sysdate,'yyyymmddhh24miss') or validto is null)
  9. and aae100 ='1'
  10. order by ifergency desc, id desc,  duetime desc

兼容写法:

 
 
 
  1. CREATE OR REPLACE VIEW V_FW_BLANK_BULLETIN as
  2. select * from (select id, bae001,  operunitid, operunittype, unitsubtype, ifergency,
  3. title,  content, digest,  duetime,  validto, aae100,
  4. bae006, bae002,  bae003,  id as colid,
  5. substr(digest,1,20) as digest2
  6. from fw_bulletin
  7. where duetime <= to_char(sysdate,'yyyymmddhh24miss')
  8. and (to_char(validto) >= to_char(sysdate,'yyyymmddhh24miss') or validto is null)
  9. and aae100 ='1'
  10. order by ifergency desc, id desc,  duetime desc)

了解了以上Oracle、DB2开发时的注意事项,我们在做开发的时候就能够尽量避免一些不兼容得状况了。本文就介绍到这里,希望能对各位有所帮助。

网页标题:谈一谈兼容Oracle和DB2开发时的注意事项
链接URL:http://www.hantingmc.com/qtweb/news30/58380.html

成都网站建设公司_创新互联,为您提供微信小程序虚拟主机App开发搜索引擎优化网站收录域名注册

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联