Skip to content

不支持的Oracle特性

LightDB Enterprise Postgres edited this page Sep 29, 2022 · 21 revisions
  1. insert all -> insert ... values(),(),();
  2. alter table modify -> alter table change;
  3. 自治事务语法,使用嵌套存储过程
  4. pipeline管道函数
  5. pl/sql可变长度数组
  6. SQL内联pl/sql函数(19c新特性)
  7. 原生rowid,ctid模拟实现
  8. 不支持的优化器提示:
  9. alter table modify partition ->使用drop partition/add partition代替
  10. 22.3之前的版本,null和''语义不完全等价,22.3版本开始,null和''等价,和oracle行为一致。参见https://www.cnblogs.com/zhjh256/p/16694142.html
  11. LightDB 22.2及之前版本substr(str,m,n),如果n是负数,则行为和Oracle不兼容。参见https://www.csdn.net/tags/NtzaQgysMjU3MS1ibG9n.html。lightdb 22.3 oracle模式完全兼容oracle substr行为。
  12. 语句级异常回滚而非事务级。lightdb 22.3兼容
  13. commit之后可以继续fetch。lightdb 22.3兼容
  14. 分布式下不支持dml带rownum,可以通过with cte(select pk from t limit m,n) update t set ... where pk in (select pk from cte);变通实现。

不兼容的pl/sql特性

  1. 不支持嵌套表和联合数组作为存储过程的入参。
  2. 包外引用包内的变量,不支持schema模式,如schema.包名.变量是不支持的,包括嵌套表变量和联合数组。
  3. 嵌套表不支持在包中通过构造器初始化。
  4. alter type schema1.typeC2 RENAME TO schema1.typeC3; --不支持schema.类型名的变名操作。
  5. 嵌套表不支持集合运算。
  6. TYPE ColorsNoNulls IS TABLE OF VARCHAR(20) NOT NULL; 嵌套表不支持声明 NOT NULL。
  7. 包中不支持定义嵌套表为伪类型。
  8. 不支持在匿名块中声明过程。
  9. 匿名块无法调用包中的游标。
  10. 包中联合数组,嵌套表不支持fetch bulk collect into。
  11. 不支持自定义异常,如rate_exception exception;
  12. Cursor Variables cannot be declared as part of a package。游标变量不能作为包的成员,该规则从22.2到22.3做了变更。若用户使用了,则业务代码需要变更。