仅限用户使用的 Oracle 会话参数
Oracle Session Parameter restricted to a User
在 Oracle 数据库中,有没有办法将“会话参数”限制为我的用户 ID? (或任何其他限制方式)
通常,使用 Oracle SQL Developer,我可以执行“ALTER SESSION SET param=value;”我可以确认参数生效了。
但在 SQL 开发人员之外,我希望我的本地应用程序客户端也具有相同的会话参数值。我找不到通过应用程序执行此操作的方法。
有没有办法在连接到 Oracle 数据库时执行此操作?以及如何去做?
谢谢。
使用登录触发器:
CREATE OR REPLACE TRIGGER CHANGE_DATE_FORMAT
AFTER LOGON ON DATABASE
CALL DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','"YYYY-MM-DD HH24:MI:SS"')
/
或更改系统设置:
ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' SCOPE=BOTH;
您想使用的实际参数是什么?如果您不喜欢 运行 ALTER SESSION 的登录触发器(我记得 Oracle 的 Tom Kyte 不喜欢这些触发器),可以通过环境变量设置一些。例如NLS_DATE_FORMAT可以设置为环境变量(注意如果设置了这个,还需要设置NLS_LANG)。
在使用 Oracle 驱动程序连接池的应用程序中设置 'session state' 的另一种常见、有效的方法是使用 'session callback',例如 Python:
# Set the NLS_DATE_FORMAT for a session
def initSession(connection, requestedTag):
cursor = connection.cursor()
cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI'")
# Create the pool with session callback defined
pool = cx_Oracle.SessionPool("hr", userpwd, "orclpdb1",
sessionCallback=initSession, encoding="UTF-8")
# Acquire a connection from the pool (will always have the new date format)
connection = pool.acquire()
如果您决定使用 ALTER SESSION,请注意可以在一个命令中设置多个参数:alter session set nls_date_format = 'YYYY-MM-DD' nls_language = AMERICAN
在 Oracle 数据库中,有没有办法将“会话参数”限制为我的用户 ID? (或任何其他限制方式)
通常,使用 Oracle SQL Developer,我可以执行“ALTER SESSION SET param=value;”我可以确认参数生效了。
但在 SQL 开发人员之外,我希望我的本地应用程序客户端也具有相同的会话参数值。我找不到通过应用程序执行此操作的方法。
有没有办法在连接到 Oracle 数据库时执行此操作?以及如何去做?
谢谢。
使用登录触发器:
CREATE OR REPLACE TRIGGER CHANGE_DATE_FORMAT
AFTER LOGON ON DATABASE
CALL DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','"YYYY-MM-DD HH24:MI:SS"')
/
或更改系统设置:
ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' SCOPE=BOTH;
您想使用的实际参数是什么?如果您不喜欢 运行 ALTER SESSION 的登录触发器(我记得 Oracle 的 Tom Kyte 不喜欢这些触发器),可以通过环境变量设置一些。例如NLS_DATE_FORMAT可以设置为环境变量(注意如果设置了这个,还需要设置NLS_LANG)。
在使用 Oracle 驱动程序连接池的应用程序中设置 'session state' 的另一种常见、有效的方法是使用 'session callback',例如 Python:
# Set the NLS_DATE_FORMAT for a session
def initSession(connection, requestedTag):
cursor = connection.cursor()
cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI'")
# Create the pool with session callback defined
pool = cx_Oracle.SessionPool("hr", userpwd, "orclpdb1",
sessionCallback=initSession, encoding="UTF-8")
# Acquire a connection from the pool (will always have the new date format)
connection = pool.acquire()
如果您决定使用 ALTER SESSION,请注意可以在一个命令中设置多个参数:alter session set nls_date_format = 'YYYY-MM-DD' nls_language = AMERICAN