迁移过程中出现报错:无法解析的成员访问表达式[USERENV]

1 问题场景:

在Oracle11g向DM8迁移的过程中,包在编译时报错函数[USERENV]无法解析。

2 原因分析:

达梦和Oracle的USERENV函数存在规则不同

3影响范围 :

编译失败"cMachine := USERENV('TERMINAL');"

4 具体分析:

  4.1  Oracle中USERENV函数的具体含义用法及参数

 USERENV返回当前会话的信息。此信息对于编写特定于应用程序的审计跟踪表或确定会话当前使用的特定于语言的字符非常有用。不能在CHECK约束条件下使用USERENV。参数参数的取值如表所示。

所有对USERENV的调用都返回VARCHAR2数据,除了使用SESSIONID、SID和ENTRYID参数的调用,它们返回NUMBER。

Parameter

Return Value

CLIENT_INFO

CLIENT_INFO返回最多64字节的用户会话信息,这些信息可以由使用DBMS_APPLICATION_INFO包的应用程序存储。

ENTRYID     

当前审计条目号。审计entryid序列在细粒度审计记录和常规审计记录之间共享。不能在分布式SQL语句中使用此属性。

ISDBA       

如果用户通过操作系统或密码文件被认证为具有DBA权限,ISDBA返回'TRUE'。

LANG        

LANG返回语言名称的ISO缩写,比现有的' language '参数更短。

LANGUAGE    

LANGUAGE以这种形式返回当前会话使用的语言和区域,以及数据库字符集:language_territory.characterset

SESSIONID   

SESSIONID返回审计会话标识符。不能在分布式SQL语句中指定此参数。

SID         

SID返回会话ID。

TERMINAL    

TERMINAL返回当前会话的终端的操作系统标识符。在分布式SQL语句中,此参数返回本地会话的标识符。
在分布式环境中,仅远程SELECT语句支持该参数,远程INSERT、UPDATE、DELETE操作不支持该参数。

4.1.2  USERENV函数在Oracle中有以下两种用法:

1

 SELECT USERENV('LANGUAGE') "Language" FROM DUAL;

Language

-----------------------------------

AMERICAN_AMERICA.WE8ISO8859P1

2

CONNECT OE

Enter password: password

SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER')  FROM DUAL;

SYS_CONTEXT ('USERENV', 'SESSION_USER')

---------------------------------------

OE

4.2  DM中USERENV函数的具体含义用法及参数

4.2.1 USERENV 为系统默认的上下文名字空间,保存了用户的上下文信息

属性

说明

CURRENT_SCHEMA

返回当前模式名

CURRENT_SCHEMAID

返回当前模式ID

CURRENT_USER

返回当前的用户名

CURRENT_USERID

返回当前的用户ID

DB_NAME

返回数据名

HOST

返回客户端的主库名

INSTANCE_NAME

返回实例名

IP_ADDRESS

返回客户端的IP地址

ISDBA

如果当前会话用户拥有DBA权限,则返回TRUE,否则返回FALSE

LANG

语言包简写,中文返回―CN‖,英文返回―EN‖

LANGUAGE

语言包,返回库的编码方式

NETWORK_PROTOCOL

通信协议

SERVER_HOST

实例运行的主机名

SESSION_USER

会话的用户名

SESSION_USERID

会话的用户ID

SID

当前会话的ID

4.2.2 USERENV函数在DM中只有以下一种用法:

SELECT LOCATION INTO V_LOCATION FROM MYKGIS.EMPLOYEE WHERE LASTNAME = SYS_CONTEXT('USERENV','SESSION_USER');

 

5 最终修改方案:

cMachine := USERENV('TERMINAL');

改为:

cMachine := SYS_CONTEXT('USERENV','TERMINAL');"

编译成功。

达梦技术社区:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值