ora2pg pl/sql转换为pl/pgsql测试

以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测试)