兼容Oracle函数与存储过程
2. 功能说明
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语法 |
函数和存储过程相关的视图 |
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,直接使用存储过程名字 |
支持—和/**/两种注释方法 |
3. 测试用例
CREATE or replace FUNCTION 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 ora_procedure()
AS
p integer := 20;
begin
raise notice '%', p;
end;
/
call ora_procedure();
CREATE OR REPLACE PROCEDURE 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;
/