Oracle登录触发器未被触发。

4

我在一个Oracle 10.2数据库上使用以下的登录触发器:

CREATE OR REPLACE TRIGGER AlterSession_trg
AFTER LOGON ON DATABASE
BEGIN
  EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_COMP=LINGUISTIC';
  EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_SORT=BINARY_AI';
END AlterSession_trg;

这旨在使区分大小写的查询成为过去,当我从PL / SQL Developer连接时,确实如此。 但是,当我从SQL Developer或正在工作的ASP.NET应用程序连接时,查询再次区分大小写。 SQL Developer / .NET有没有跳过这个触发器的方式? 我设置触发器错了吗?

4个回答

2

Oracle SQL Developer会根据用户偏好更改NLS参数。(工具->偏好设置...->数据库->NLS参数)

可能您的.NET应用程序也在更改NLS参数,覆盖了您的触发器设置。

您是否尝试将NLS_COMPNLS_SORT设置为环境变量


1

我觉得你应该让你的数据库管理员(DBA)来做这些更改,而不是依赖于触发器。 如果由于某种原因它变得无效,你可能会遇到问题。


1

SQL Developer已经解决了。当我更深入地研究环境变量解决方案时,我为.NET应用程序找到了一个解决方案;我更新了SPFILE,现在一大堆有大小写问题的查询都可以正确运行。

我运行的命令是:

ALTER SYSTEM SET NLS_COMP=LINGUISTIC SCOPE SPFILE;
ALTER SYSTEM SET NLS_SORT=BINARY_AI SCOPE SPFILE;

0

提醒一下,如果您想处理大小写不敏感的搜索,需要小心操作会话变量。

如果您在跨越到 Oracle 9.2 或更早版本的数据库实例的 db-link 上使用这些会话变量发出查询,您将收到 ORA-00600 错误,因为您在 Oracle 10.2 中操作的会话变量在 Oracle 9.2 或更早版本中不存在。


我知道在Oracle 9.2中该变量不存在。在采取这种方法之前,我确保我们只针对10.2或更高版本。 - Dave Lewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接