orcal数据库与国产数据库 gabse 8a的数据库语法函数差异

orcal数据库与国产数据库 GBase 8a的数据库语法函数差异,工作中遇到的,仅作参考,有错误欢迎指正

orcal数据库与国产数据库 gabse 8a的数据库语法函数差异
语法或函数 说明
rownum gbase没有rownum,如果设计到分页可以使用Limit,用作排序可使用row_number() over()代替,但gbase不支持connect by,涉及connect by需要对语句进行改写(修正:可支持connect by)
LISTAGG() WITHIN GROUP () 可用group_concat(column [order by] separator ‘,’) 代替
merge into 只能用于Hash分布表,有涉及到此语法的表需要使用hash分布列,或者改写SQL语句,不使用merge into来完成需求,例如将查询和插入/更新分开
函数使用限制 不支持函数里面涉及select查询语句
字段类型转换不确定性 select * from table where type = 04 type为字符串类型,在这种情况下,gbase自动转换类型会转成’4’,其他非0数字可正常转换
嵌套查询 在gbase中嵌套查询所有子表必须定义别名
NEXT_DAY() gbase不存在NEXT_DAY日期函数,需要对sql进行改写,修改统计方式,gbase涉及日期函数有:weekday()返回 date 对应的星期索引0-星期日。可使用此函数来确定一周的时间范围。
case when 不支持case when中进行select
START WITH() CONNECT BY () gbase中此语法只支持对复制表进行递归查询,且目前gbase版本不支持CTE语法,无法使用with as(),需要重写SQL或者把取数据的逻辑放代码层里(建议使用这个方案)。修正:可开启cte配置 如果表是复制表可用子查询解决报错(select * from (select * from t3) a connect by pid=prior id start with pid=0;)
sysdate gbase中使用sysdate(),代码中全局替换此函数
to_date()函数 严格匹配参数 to_date(‘20221010’, ‘YYYY-MM-DD’)会出错
pivot函数 gbase不支持此函数
union/union all 各union字段的类型要完全一致

你可能感兴趣的:(数据库,oracle)