兼容Oracle函数与存储过程

​ 在UDB-TX Oracle兼容版本中支持兼容Oracle PLSQL函数和存储过程的语法的PLUSQL语言。

函数(FUNCTION)
CREATE FUNCTION语法支持EDITIONABLE/NONEDITIONABLE
CREATE FUNCTION语法支持RETURN, IS关键字,不指定language
CREATE FUNCTION语法函数没有参数,函数名后面不带()
CREATE FUNCTION参数个数最多是32767
CREATE FUNCTION语法中END; 在psql中以/结束
CREATE FUNCTION语法变量声明前面没有DECLARE关键字
CREATE FUNCTION语法支持OUT 参数NOCOPY功能
CREATE FUNCTION语法支持sharing_clause
CREATE FUNCTION语法支持invoker_rights_clause,默认权限改成DR(DEFINER)
CREATE FUNCTION语法支持ACCESSIBLE BY 
CREATE FUNCTION语法支持DEFAULT COLLATION
CREATE FUNCTION语法支持result_cache_clause 
CREATE FUNCTION语法支持aggregate_clause
CREATE FUNCTION语法支持pipelined_clause
CREATE FUNCTION语法支持sql_macro_clause
ALTER FUNCTION语法
函数和存储过程相关的视图
存储过程(PROCEDURE)
CREATE PROCEDURE语法支持EDITIONABLE/NONEDITIONABLE
CREATE PROCEDURE语法函数没有参数,函数名后面不带()
CREATE PROCEDURE参数个数最多是32767
CREATE PROCEDURE语法中END; 在psql中以/结束
CREATE PROCEDURE语法支持sharing_clause
CREATE PROCEDURE语法支持DEFAULT COLLATION
CREATE PROCEDURE语法支持invoker_rights_clause
CREATE PROCEDURE语法支持ACCESSIBLE BY 
ALTER PROCEDURE语法
存储过程没有参数,调用支持不带()
存储过程调用支持EXEC
在PL/SQL 中调用存储过程,可以省略CALL,直接使用存储过程名字
支持--和/**/两种注释方法

用例

CREATE or replace FUNCTION udb_ora_func RETURN integer AS
BEGIN    
    RETURN 1;
END;
/

CREATE OR REPLACE FUNCTION test_nocopy(a IN int, b OUT NOCOPY int, c IN OUT NOCOPY int) 
RETURN record 
IS
BEGIN 
   b := a;
   c := a; 
END;
/
CREATE OR REPLACE PROCEDURE udb_ora_procedure()
AS
	p integer := 20;   
begin
	raise notice '%', p;
end;
/
call udb_ora_procedure();

CREATE OR REPLACE PROCEDURE udb_ora_procedure
SHARING = METADATA
DEFAULT COLLATION USING_NLS_COMP
AUTHID CURRENT_USER
ACCESSIBLE BY ( FUNCTION A.B )
IS
	p integer := 20;   
begin
	raise notice '%', p;
end;
/