Oracle兼容性参数
enable_on_commit_matview
参数说明:控制是否支持物化视图的ON COMMIT选项。若开启则支持设置ON COMMIT修饰物化视图,从而设置事务提交时更新物化视图。
该参数属于 POSTMASTER 类型参数,请参考重设参数表1中对应设置方法进行设置。
注意事项: 该参数仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。
取值范围: 布尔型
on:支持设置ON COMMIT修饰物化视图,从而可以设置在事务提交时更新物化视图。
off:不支持设置ON COMMIT修饰物化视图。
默认值: off
behavior_compat_options
参数说明: 数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。此处仅介绍Oracle兼容模式下,参数取值为'proc_outparam_override'的相关功能。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 字符串,当前只支持兼容性配置项表格中的内容。
proc_outparam_override是控制存储过程出参的重载行为的选项。
Oracle兼容模式下,打开该参数后:
支持入参列表一致,出参不同的同名函数/过程重载。
支持包含OUT/IN OUT参数的同名函数/过程重载。即包内创建重载函数时,只要满足出参个数、出参名称、出参类型不同中的任意一点,即可创建成功。
示例1: 入参列表一致,OUT出参部分不同的同名函数重载。
set behavior_compat_options ='proc_outparam_override';
CREATE OR REPLACE PACKAGE test_overload IS
function testp(a int) return int;
function testp(a int, b out int) return int;
end test_overload;
/
恢复环境:
SET behavior_compat_options TO default;
DROP PACKAGE test_overload;
示例2: 出参类型重载。
set behavior_compat_options ='proc_outparam_override';
create or replace package pkg1 IS
function f1(arg1 int,arg2 out int,arg3 inout varchar(10)) return int;
function f1(arg1 int,arg2 out text,arg3 inout number) return int;
end pkg1;
/
恢复环境:
SET behavior_compat_options TO default;
DROP PACKAGE pkg1;
示例3: 出参名重载。
set enable_proc_param_name_override=on; --控制函数重载时是否检查参数名 on表示将参数名视为重载依据
set behavior_compat_options ='proc_outparam_override';
create or replace package pkg2 IS
procedure f2(arg1 int,arg_ inout int,arg2 out varchar(10));
procedure f2(arg1 int,arg_ inout int,arg3 out varchar(10));
end pkg2;
/
恢复环境:
SET enable_proc_param_name_override TO default;
SET behavior_compat_options TO default;
DROP PACKAGE pkg2;
示例4: 入参类型重载应用实例。
1、创建包和包体。
set behavior_compat_options ='proc_outparam_override';
create or replace package pck1 as
function f1(arg1 in int,arg_int inout int,arg2 out text) return int;
function f1(arg1 in text,arg_int inout int,arg2 out text) return text;
end;
/
create or replace package body pck1 as
function f1(arg1 in int,arg_int inout int,arg2 out text) return int
as
begin
arg2 = 10;
dbms_output.put_line('args type1, arg2 is: '||arg2);
return arg1;
end;
function f1(arg1 in text,arg_int inout int,arg2 out text) return text
as
begin
arg2 = 'text';
dbms_output.put_line('args type2, arg2 is: '||arg2);
return arg1;
end;
end;
/
2、调用包函数。
set serveroutput = on;
call pck1.f1(1,1,1);
call pck1.f1('2',1,2);
返回结果依次如下:
args type1, arg2 is: 10
f1 | arg_int | arg2
----+---------+------
1 | 1 | 10
(1 row)
args type2, arg2 is: text
f1 | arg_int | arg2
----+---------+------
2 | 1 | text
(1 row)
3、清理环境。
SET behavior_compat_options TO default;
DROP PACKAGE pck1;
示例5: 出参类型重载应用实例。
1、创建包和包体。
set behavior_compat_options ='proc_outparam_override';
create or replace package pck1 as
function f1(arg1 in int,arg_int inout text,arg2 out int) return int;
function f1(arg1 in int,arg_int inout text,arg2 out text) return text;
end;
/
create or replace package body pck1 as
function f1(arg1 in int,arg_int inout text,arg2 out int) return int
as
begin
arg2 = 10;
dbms_output.put_line('args type1, arg2 is: '||arg2);
return arg1;
end;
function f1(arg1 in int,arg_int inout text,arg2 out text) return text
as
begin
arg2 = 'text';
dbms_output.put_line('args type2, arg2 is: '||arg2);
return arg2;
end;
end;
/
2、调用包函数。
set serveroutput = on;
call pck1.f1(1,'1',1);
call pck1.f1(2,'2','2');
返回结果依次如下:
args type1, arg2 is: 10
f1 | arg_int | arg2
----+---------+------
1 | 1 | 10
(1 row)
args type2, arg2 is: text
f1 | arg_int | arg2
------+---------+------
text | 2 | text
(1 row)
3、清理环境。
SET behavior_compat_options TO default;
DROP PACKAGE pck1;