VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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;