【LightDB】Oracle存储过程兼容-匿名块兼容
Oracle匿名块语法如下:
DECLARE声明部分,定义变量、数据类型、异常、局部子程序等
BEGIN执行部分,实现块的功能
EXCEPTION异常处理部分,处理程序执行过程中产生的异常
END;
简单的Oracle匿名块例子如下:
DECLARE
a int := 100;
BEGIN
DBMS_OUTPUT.PUT_LINE('a='||a);
END;
目前PG版本并不支持这种写法,PG的匿名块是用DO语句实现的,例子如下:
DO $$
DECLARE
a int := 100;
BEGIN
raise info 'a=%', a;
END $$;
由上面例子可以看出,DO语句后面是由$$符号包起来的字符串,所以要兼容Oracle匿名块,要做出以下支持:
- 去掉DO,换句话说匿名块可以不用DO开头。
- 去掉$$符号,匿名块可以直接调用匿名块体。
- 要支持’declare’开头的和’begin’开头的匿名块。
- ltsql下匿名块要以’/'结尾。
目前LightDB 22.2版本已经支持的Oracle匿名块,示例如下:
lightdb@postgres=# DECLARE
lightdb@postgres$# a int := 100;
lightdb@postgres$# BEGIN
lightdb@postgres$# DBMS_OUTPUT.PUT_LINE('a='||a);
lightdb@postgres$# END;
lightdb@postgres$# /
a=100
DO
lightdb@postgres=#
lightdb@postgres=# BEGIN
DBMS_OUTPUT.PUT_LINE('a=100');
END;
/
a=100
DO
其中’DBMS_OUTPUT.PUT_LINE’函数由插件orafce实现,LightDB原生集成了插件orafce。
详细语法可参考LightDB官网查看https://www.hs.net/lightdb
更多请登录LightDB官网进行查看:https://www.hs.net/lightdb