ora2pg pl/sql转换为pl/pgsql测试
作者:
消想 | 来源:发表于
2018-09-29 11:39 被阅读0次
以oracle 11g pl/sql语法为例,目标postgresql版本10.5
pl/sql语法转换
1. 变量定义及赋值
—— |
是否支持 |
普通类型:NUMBER,VARCHAR2,BOOLEAN,%ROWTYPE |
支持 |
table types:TYPE IS TABLE OF |
不支持,定义时报语法错误 |
数组类型 TYPE IS VARRAY |
不支持,定义时报语法错误 |
2.LOOP语句
—— |
是否支持 |
LOOP ... END LOOP |
支持 |
带 CONTINUE, EXIST关键字 |
支持 |
LOOP嵌套LOOP |
支持 |
多个LOOP语句 |
不支持,只转换了第一个LOOP |
3.CASE语句
—— |
是否支持 |
CASE...END CASE |
支持 |
多个CASE语句 |
支持 |
4.CURSOR
—— |
是否支持 |
CURSOR 带参数、不带参数 |
支持 |
FOR IN CURSOR |
支持 |
CURSOR 关键字%NOTFOUND |
%NOTFOUND嵌套在FOR IN LOOP语句中时未转换成 NOT FOUND,导致执行出错 |
多个CURSOR |
支持,但是上个cursor OPEN之后需要CLOSE,否则执行的时候到下一个cursor会报错 |
5.EXCEPTION
—— |
是否支持 |
RAISE EXCEPTION |
支持 |
声明EXCEPTION_INIT |
不支持 |
oracle自带异常INVALID_NUMBER |
不支持,未转换 |
6.EXECUTE IMMEDIATE
—— |
是否支持 |
EXECUTE IMMEDIATE |
支持,转换为EXECUTE,但是EXECUTE的语句未转换 |
EXECUTE IMMEDIATE.. USING [IN OUT]... |
不支持 |
7.EXPRESSION
—— |
是否支持 |
+,-,*,/,(),=,<>,!=,<,>,<=,>=,LIKE,BETWEEN,IN |
支持 |
**(取幂运算符) |
不支持 |
~=关系运算符(not equal) |
不支持 |
^=关系运算符(not equal) |
不支持 |
8.FORALL语句
—— |
是否支持 |
FORALL |
不支持,pl/pgsql不支持该语法 |
9.GOTO语句
—— |
是否支持 |
GOTO |
不支持,pl/pgsql不支持该语法 |
10.IF THEN语句
—— |
是否支持 |
IF..ELSIF..ELSE..END IF |
支持 |
嵌套IF |
支持 |
11.RETURN
—— |
是否支持 |
RETURN... |
支持 |
RETURN... INTO... |
支持 |
12.WHILE LOOP语句
—— |
是否支持 |
WHILE..LOOP..END LOOP |
支持 |
多个WHILE LOOP |
支持 |
附部分转换前后语句对比图:

变量定义及赋值-1.png

变量定义及赋值-2.png

LOOP-1.png

LOOP-2.png

LOOP-3.png

CASE-1.png

CASE-2.png

CURSOR-1.png

CURSOR-2.png

CURSOR-3.png

EXCEPTION-1.png

EXCEPTION-2.png

EXCEPTION-3.png
本文标题:ora2pg pl/sql转换为pl/pgsql测试
本文链接:https://www.haomeiwen.com/subject/ffweoftx.html
网友评论