Tibero&Oracle

1. PLSQL概念介绍

2.PSM(Persistent stored Procedure)概念介绍

3.PLSQL/PSM 关系

4.PLSQL/PSM 区别


1. PLSQL
PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。
PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,
所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,
通过逻辑判断、循环等操作实现复杂的功能或者计算。

整个PL/SQL块分三部分:
声明部分(用declare开头)、执行部分(以 begin开头)和异常处理部分(以exception开头)

2.PSM(Persistent stored Procedure)概念介绍
PSM (Persistent Stored Modules) is a robust and simple programming language used to create procedural SQL
tbPSM is equivalent to that of PL/SQL.
tbPSM: tibero数据库的持久化存储模型
包含 Variable、Constant、Control Structure、Subprograms and Packages、Cursors、Error Handling

3.PLSQL/PSM 关系
高兼容,几乎等价于;
有些文档称PSM是概括,在Oracle 中 PSM称为PL/SQL

4. PLSQL/PSM 区别
4.1.在实际操作中,根据不同的问题处理
以下是官网经验的可能发生的问题(问题可以反应区别)

SQCI课题数据库切换,因为查询速度慢的原因,调整了部分produer
--------------------------------------------------------------------------------------
官网文档Tibero_Migration_Guide_en.pdf 第24页提到

4.4.8 PSM (PL/SQL)

TBR-8053:如果发生“未授权”错误,则必须首先定义PSM。
如果PSM查询出现错误,请参考6.2修改查询来修改查询在应用程序中。
--------------------------------------------------------------------------------------------------------------
1. 在关联查询中如果没有指定表或者列的别名,可能会出现语法错误。
2. UNION ALL语句中如果一个同样的列不允许使用不同数据类型
3. Oracle 不用会自动排序,在tibero最好指定排序子句
4. PSM (PL/SQL) 如果一个列或者对象编译说无效,需要改成有效的对象。 在oracle 这个问题会在执行期间显示出来。
5. PSM (PL/SQL) 如果重复变量名被使用 会出现语法错误,所以改为使用最新的变量,修改其他变量名

由于Tibero不支持Oracle对象类型,请在Tibero中的package中创建对象类型。
----------------------------------------------------------------------------


4.2. 异常区别

oracle
ACCESS_INTO_NULL 未定义对象
CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时
COLLECTION_IS_NULL 集合元素未初始化
CURSER_ALREADY_OPEN 游标已经打开
DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值
INVALID_CURSOR 在不合法的游标上进行操作
INVALID_NUMBER 内嵌的 SQL 语句不能将字符转换为数字
NO_DATA_FOUND 使用 select into 未返回行,或应用索引表未初始化的元素时
TOO_MANY_ROWS 执行 select into 时,结果集超过一行
ZERO_DIVIDE 除数为 0
SUBSCRIPT_BEYOND_COUNT 元素下标超过嵌套表或 VARRAY 的最大值
SUBSCRIPT_OUTSIDE_LIMIT 使用嵌套表或 VARRAY 时,将下标指定为负数
VALUE_ERROR 赋值时,变量长度不足以容纳实际数据
LOGIN_DENIED PL/SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码
NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据
PROGRAM_ERROR PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包
ROWTYPE_MISMATCH 宿主游标变量与 PL/SQL 游标变量的返回类型不兼容
SELF_IS_NULL 使用对象类型时,在 null 对象上调用对象方法
STORAGE_ERROR 运行 PL/SQL 时,超出内存空间
SYS_INVALID_ID 无效的 ROWID 字符串
TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时

tibero
CASE_NOT_FOUND
CURSOR_ALREADY_OPEN ------dif
DUP_VAL_ON_INDEX
INVALID_CURSOR
NO_DATA_FOUND
TOO_MANY_ROWS
VALUE_ERROR
ZERO_DIVIDE
COLLECTION_IS_NULL
SUBSCRIPT_BEYOND_COUNT
SUBSCRIPT_OUTSIDE_LIMIT
ROWTYPE_MISMATCH
NVALID_NUMBER


4.3. 事务一致(ACID)
commit rollback savepoint
execute immediate
cursor 可以需要定义在package 或 declare ------dif


4.4. Package
tibero
Package is an object that groups logically related tbPSM variables, types, and subprograms.
标准pacakge定义了type 异常,子程序

oracle
1. 包的概念
(1) 模块化的思想,用于分类管理过程(procedure)和函数(function)
(2) 类似于 Java、Python 等语言中的 类(class)

2. 包的组成(程序部署顺序:'先执行包头,再执行包体')
(1) 包头:package
(2) 包体:package body

3. 授权: grant execute on 属主.包名 to 用户1, 用户n;

4. 调用: '属主.包名.存储过程名()' 或 '属主.包名.方法名()'

5. 建议
(1) 数据库中所有的过程(procedure)和函数(function)都要用 package 进行封装:便于管理
(2) 单个的过程(procedure)和函数(function)建议不超过 3000 行
(3) 每个 package 在 create 时都要带上 '属主'(避免所处位置错误)


4.5 方法重载的定义似乎不同

存储过程子程序的重载 规则似乎不一样 Overloading

oracle: 1.如果2个重载函数参数个数、类型相同,只是参数名称不同,调用时必须使用命名法调用,比如下面这个重载函数,输入参数都是一个number类型
tbPsm:
Overloading is allowed only between subprograms in a package, or those declared in the declaration.
● Overloading is not allowed if only parameter names are different.
● Overloading is not allowed if only parameter modes are different.
● Overloading is not allowed if only parameter subtypes are different.
64 Tibero tbPSM Guide
● Overloading is not allowed if only function return value types are different.

相关:https://blog.csdn.net/cmff98425/article/details/100256332

4.6 复合类型
tibero: 表,索引表,数组, 记录 // 没有验证
oracle: 记录 表 嵌套表 索引表 数组

4.7 语句
tibero: NULL statement, NULL is very useful when temporarily substituting a subprogram in a program and substituting an
executable statement in a control structure
oracle:资料少。 // 没有验证

4.8 tibero 允许韩语字符 oracle 不知道允许不~~

4.9 存储过程调用创建表会报错无权限,直接调用不会报错
tibero 相关: https://blog.csdn.net/seven_duan/article/details/78094504?locationNum=2&fps=1

其他是在研究区别的过程中了解的相关点

 

posted @ 2021-07-20 17:30  姓蜀名黍  阅读(308)  评论(0编辑  收藏  举报