Oracle兼容性参数
enable_proc_param_name_override
参数说明: 控制重载包函数时,是否对参数名进行检查。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
该参数仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。
取值范围: 布尔型
- on:重载包函数时包含对参数名的检查。用户调用包函数时不指定入参名称则调用函数失败,指定入参名称则调用函数成功。
- off:重载包函数时不包括对参数名的检查。
默认值: off
示例:
示例1: 在参数名相同,参数类型不同,返回类型相同的存储过程中,传入列名。
1、开启enable_proc_param_name_override参数,重载包函数时包含对参数名的检查。
set enable_proc_param_name_override=on;
2、设置guc参数behavior_compat_options。
set behavior_compat_options='';
3、创建测试表并插入数据。
create schema tpcds;
create table tpcds.t1_over(id int,name varchar2);
insert into tpcds.t1_over values(1,'abc');
4、创建参数名相同,参数类型不同,返回类型相同的包内存储过程。
create or replace package pkg2 IS
FUNCTION f2(p_in1 int,p_out in int) RETURN varchar2;
FUNCTION f2(p_in1 int,p_out in varchar2) RETURN varchar2;
end pkg2;
/
create or replace package body pkg2 IS
function f2(p_in1 int,p_out in int) RETURN varchar2
as
begin
p_in1:=p_in1*2;
return concat('000',p_in1::money);
end;
function f2(p_in1 int,p_out in varchar2) RETURN varchar2
as
begin
p_in1:=p_in1/2;
return concat('aaa',p_out);
end;
end pkg2;
/
5、查询包内存储过程,传入列名。
select pkg2.f2('20',id) from tpcds.t1_over;
select pkg2.f2('20',name) from tpcds.t1_over;
查询结果分别为:
000$40.00
aaaabc
示例2:参数名相同,参数类型不同,返回类型相同的存储过程,传入in/inout。
1、开启enable_proc_param_name_override参数,重载包函数时包含对参数名的检查。
set enable_proc_param_name_override=on;
2、设置guc参数behavior_compat_options。
set behavior_compat_options='';
3、创建带函数的包。
create or replace package pkg2 IS
FUNCTION f2(p_in1 int,p_out inout int) RETURN varchar2;
FUNCTION f2(p_in1 int,p_out in money) RETURN varchar2;
end pkg2;
/
4、创建包体。
create or replace package body pkg2 IS
function f2(p_in1 int,p_out inout int) RETURN varchar2
as
begin
p_in1:=p_in1*2;
return concat('000',p_in1::money);
end;
function f2(p_in1 int,p_out in money) RETURN varchar2
as
begin
p_in1:=p_in1/2;
return concat('aaa',p_in1::money+p_out);
end;
end pkg2;
/
5、调用包内函数。
select pkg2.f2(p_in1=>20,p_out=>2);
返回结果为:
f2
---------------------
000$40.00
(1 row)
- 用户调用包函数时,不指定函数存在差异的参数名或使用语法不规范则调用失败。
- GUC参数
behavior_compat_options='proc_outparam_override'
时,由于包内函数不允许重载out参数,则在包内创建同名且有out参数的函数时就会报错。
enable_ora_text_sort
参数说明: 用于控制字符集的排序规则。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
- on:对于所有字符集使用default的排序规则是C。
- off:使用对应的default排序。
默认值 off
result_case_mode
参数说明: 用于控制返回字段名的大小写。当用户在CREATE TABLE
、ALTER TABLE、SELECT INTO
等语句时,指定的列字段名称显式的被双引号包含,则在SELECT语句的输出结果中,列字段名称的大小写与引号内的内容保持一致。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
- 该参数只影响返回字段名的大小写形式,不影响Vastbase原有的大小写匹配逻辑。
- 不支持在postgresql.conf文件中配置该参数,可能导致严重问题,仅支持在会话中配置。
取值范围: 枚举类型
- lower:参数初始化取值,未使用引号指定的字段名及别名返回纯小写形式,否则返回引号指定形式。
- upper:未使用引号指定的字段名及别名返回纯大写形式,否则返回引号指定形式。
默认值: lower
示例:
1、数据库初始化和用户与数据库建立连接后配置result_case_mode的值为upper。
set result_case_mode="upper";
2、查看参数值。
show result_case_mode;
返回结果为:
result_case_mode
---------------------------
upper
(1 row)
3、创建测试表。
create table test(aa int,"bb" int,Dd int,"Ee" int);
4、查询字段名带引号的结果。
select * from test;
返回结果为如下,其中被双引号包含的字段保持其大小写格式,未被包含的字段均变为大写:
AA | bb | DD | Ee
----+----+----+----
(0 rows)
vb_max_dbms_locks
参数说明: 该参数用于指定dbms_lock的最大数量,常用于减少共享内存的使用。
该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 整型,32~262143
默认值: 3072
nls_date_format
参数说明: 该参数用于指定时间格式。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 合法的时间格式字符串
默认值: 空
enable_ignore_ident_case
参数说明: 为了对Oracle的大小写解析特性进行兼容,Vastbase提供了参数enable_ignore_ident_case用于控制双引号内标识符的大小写解析逻辑。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
on:语法解析阶段,表名、字段名等标识符会被置为小写。
off:语法解析阶段,不对大小写进行处理,根据原始逻辑进行解析。
默认值: off
当enable_ignore_ident_case=on时,其作用效果与
result_case_mode = upper
的作用效果存在冲突,不建议这样使用。 二者的冲突在于result_case_mode要求返回值必须与引号内的输入一致,但enable_ignore_ident_case为on时引号内的输入都返回小写。下表对比展示了enable_ignore_ident_case参数的效果:
数据库类型 双引号 输入 解析 Oracle 有 小写 小写 有 大写 大写 Vastbase
(enable_ignore_ident_case=on)有 小写 小写 有 大写 小写 Vastbase
(enable_ignore_ident_case=off)有 小写 小写 有 大写 大写
示例1
enable_ignore_ident_case为off时(默认):
1、创建测试表并插入数据。表名、字段名使用小写字母,无双引号。
create table name(id int, col text); insert into name values(1001,'vastbase');
2、使用大写字母进行查询,对比是否使用双引号的区别。
select ID,COL from NAME; --大写字母,无双引号 select "ID","COL" from "NAME"; --大写字母,有双引号
无双引号时,查询成功:
id | col ------+---------- 1001 | vastbase (1 row)
使用带双引号的大写字母,查询失败。报错信息如下:
ERROR: relation "NAME" does not exist on node1 LINE 1: select "ID","COL" from "NAME"; ^
enable_ignore_ident_case为on时:
set enable_ignore_ident_case = on;
1、创建测试表并插入数据。表名、字段名使用小写字母,无双引号。
create table book(id int, author text); insert into book values(10976458,'MoYan');
2、使用大写字母进行查询,对比是否使用双引号的区别。
select ID,AUTHOR from BOOK; --大写字母,无双引号 select "ID","AUTHOR" from "BOOK"; --大写字母,有双引号
开启参数后,标识符即使被双引号包裹,但仍被解析为小写字母,能够成功查询。上述两条查询语句的返回结果依次为:
id | author ----------+-------- 10976458 | MoYan (1 row) id | author ----------+-------- 10976458 | MoYan (1 row)
注意,若在开启参数前,已在数据库中创建了名为“BOOK”的表(解析为大写),那么开启参数后,则无法使用“BOOK”去匹配该表(解析为小写),为了避免此类情况的发生,请注意设置参数的时机。参考示例2。
示例2
1、当参数enable_ignore_ident_case为off时(默认):
set enable_ignore_ident_case=off;
show enable_ignore_ident_case;
2、创建测试表并插入数据。表名使用双引号包围的大写字母。
create table "BOOK"(id int, name text);
3、向测试表插入数据并查看测试表内容,需使用双引号包围的大写字母。
insert into "BOOK" values(1001,'TheLittlePrince');
select * from "BOOK";
能够正常插入和查询,返回结果如下:
id | name
------+-----------------
1001 | TheLittlePrince
(1 row)
4、此时设置参数enable_ignore_ident_case为on:
set enable_ignore_ident_case=on;
5、再次向测试表插入数据时,以下写法均无法匹配之前创建的”BOOK”表:
insert into "BOOK" values (1003,'HarryPotter');
insert into BOOK values (1003,'HarryPotter');
insert into book values (1003,'HarryPotter');
均得到如下报错信息:
ERROR: relation "book" does not exist on node1
func_colname_with_args
参数说明: 该参数用于控制函数返回结果的列名是否带参数列表,即返回结果的字段名称与查询语句中一致。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
- on:函数返回结果带参数。
- off:函数返回结果不带参数。
默认值: off
示例:
1、设置func_colname_with_args参数。
set func_colname_with_args=on;
2、执行函数查询。
select to_char(123) from dual;
返回结果为:
to_char(123)
------------
123
(1 row)
oracle_vpd_enabled
参数说明: 该参数用于控制oracle_vpd功能。
该参数属于SIGHUP类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
on:表示打开oracle_vpd功能。
off:表示关闭oracle_vpd功能。
默认值: off
enable_plpgsql_global_compile_cache
参数说明: 控制PL/SQL全局缓存功能的开启和关闭。参数为实例级别,修改后重启数据库生效。
该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围:布尔型
on表示启用PL/SQL全局缓存功能。
off表示关闭PL/SQL全局缓存功能。
默认值: off
plpgsql_compile_cache_max_size
参数说明: 用于设置允许PL/SQL全局缓存的大小。参数为实例级别,修改后重启数据库生效。
该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围:整型,[0,2147483647]。
默认值:100000000
vb_date_type
参数说明: Oracle兼容模式下,date类型的控制参数,用来控制date类型的底层存储类型。
该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
1:date底层存储为oradate。
2:date底层存储为timestamp。
默认值: 1
示例:
示例1: Oracle兼容下设置date类型控制参数。
1、创建数据库,设置兼容模式为Oracle。
CREATE DATABASE date_test_Oracle DBCOMPATIBILITY 'A';
2、配置date类型控制参数vb_date_type。
alter system set vb_date_type = 1;
3、重启数据库。
vb_ctl restart
4、查看date兼容效果。
\c date_test_Oracle
select '2022-08-19'::date;
查询结果显示为:
oradate
---------------------
2022-08-19 00:00:00
(1 row)
示例2:Oracle兼容模式下,通过修改postgresql.conf设置date类型控制参数。
1、配置date类型控制参数。
vi $PGDATA/postgresql.conf
//设置参数:
vb_date_type = 2;
2、重启数据库。
vb_ctl restart
3、创建数据库。
CREATE DATABASE date_test_postgresqlconf DBCOMPATIBILITY 'A';
\c date_test_postgresqlconf
4、查看date兼容效果。
select '2022-08-19'::date;
查询结果显示为:
timestamp
---------------------
2022-08-19 00:00:00
(1 row)
lob_return_lobloc
参数说明: 该参数用于控制查询lob字段的返回内容。关闭该参数,查询lob字段时直接返回真实数据;开启该参数,则返回lob定位器,需要借助DBMS_LOB.READ来获取真实数据。
- 开启此参数适用于原始数据特别大,不能通过select语句直接返回的情况。
- 该参数仅在数据库兼容模式为Oracle时有效(即数据库实例初始化时指定DBCOMPATIBILITY='A')。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
- on:查询lob字段时返回lob定位器。
- off:查询lob字段时直接返回真实数据。
默认值: off
enable_oralob_type
参数说明: 用于控制当前实例中 SQL 涉及的 LOB 类型的解析方式。
该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
off:直接存储数据。(默认值)
on:使用定位器存储。
- 此参数仅在数据库兼容模式为Oracle时有效(即数据库实例初始化时指定DBCOMPATIBILITY='A')。
- 此参数只能在实例初始化完成后,第一次启动前在配置文件中进行修改。
- 如果使用 vb_initdb 初始化实例时指定了参数
--enable-oralob-type
,则此参数必须设置为on,否则无需设置或应设为off。
enable_oranumber_type
参数说明: 控制Oracle兼容模式下NUMBER类型的映射逻辑。
该参数仅在V2.2 Build 15(Patch No.3)及以上版本支持。
该参数属于SIGHUP类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
on:number关键字映射为number类型。
off:number关键字映射为numeric类型。
默认值: on