在将Oracle移植到SQL Anywhere的时候需要注意哪些问题?

对于绝大部分,Oracle到SQL Anywhere的移植还是很容易的。
首先需要注意的就是数据类型。可以使用SQL Anywhere的“移植数据库(Migrate Database)”向导来从Oracle中创建SQL Anywhere的数据库,但最好还是逐个检查每一列的数据类型以保证能满足要求。向导中的一些选项值得我们注意:

32位BINARY_FLOAT的Oracle列将被移植成为SQL Anywhere中的64位DOUBLE数据类型,有可能你是希望移植成32位的REAL数据类型。
DATE列将被移植为TIMESTAMP,但有可能你希望还是保持DATE。
NUMBER列被移植为64位的浮点DOUBLE数据类型,有可能如果你只用该列来保存整数或定点小数的值的话,可以考虑INTEGER、BIGINT或NUMERIC可能更加合适。
NUMBER(precision)列将被移植为NUMERIC(precision),但有可能你可以考虑使用INTEGER或BIGINT一类的整数数据类型。
另一个主要的问题就是要将Oracle的PL/SQL移植到SQL Anywhere使用的WATCOM SQL或者T-SQL上。WATCOM SQL编码和调试要容易一些,你不必处理Oracle的诸如“mutating tables”的限制(ORA-04091错误)。

以下是一些Oracle和SQL Anywhere的不同地方:

REMAINDER变成MODDECLARE在BEGIN后TO_NUMBER(USERENV(‘SESSION_ID’))变成@@spidIN OUT变成INOUTRAISE_APPLICATION_ERROR变成RAISERROR变量:=表达式;变成SET 变量 = 表达式;ELSIF变成ELSEIFSYSDATE变成CURRENT TIMESTAMPTO_CHAR变成STRING(…)FROM DUAL变成FROM dummy(或者干脆不要FROM子句)WHERE (+)操作符需要换成OUTER JOIN子句DECODE变成CASE或IF表达式SQL%ROWCOUNT变成@@ROWCOUNTCREATE SEQUENCE变成DEFAULT AUTOINCREMENT或GLOBAL AUTOINCREMENTROUND需要2个参数GREATEST变成GREATER,并且只接受2个参数日期计算不返回部分时间组件
也同时需要注意Oracle的空字符串的含义为“是一个NULL值”,而SQL Anywhere中被看成是一个没有长度的字符串。
参与2

2同行回答

lwb_aixlwb_aix系统工程师重庆南华中天技术有限公司
:victory: :hug:显示全部
:victory: :hug:收起
系统集成 · 2009-06-27
浏览1672
yessym518yessym518技术经理eclink
没用过...................显示全部
没用过...................收起
系统集成 · 2009-06-23
浏览1684

提问者

zp_ccc
zp_ccc1615
高级技术主管国内某金融科技公司
擅长领域: 存储灾备服务器

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2009-01-13
  • 关注会员:0 人
  • 问题浏览:4760
  • 最近回答:2009-06-27
  • X社区推广