如何使用 sql/plsql 获取模式的用户
How to get user of a schema with sql/plsql
我正在使用 Oracle SQL Developer 在数据库 xyz
中以用户 abc
登录。如何获取我登录时使用的模式的用户名?
我相信 用户名 你指的是操作系统用户名。 Oracle 数据库中的用户名(和 SQL Developer)是模式名称的同义词。
因此,在您的情况下,您的架构称为 abc。现在假设您的操作系统用户名是 'John',并且您想知道连接到架构 'abc' 的其他用户,那么您可以 运行 查询:
SELECT osuser
FROM v$session
WHERE schemaname = 'abc';
参阅此post了解更多详情
如果您只想知道您所在架构中的用户列表,试试这个:
SELECT * FROM all_users
如果您不更改当前架构,则以下代码将没问题:
-- In PLSQL
DECLARE
vv_SchemaName VARCHAR2(100);
BEGIN
vv_SchemaName := Sys_Context('USERENV','CURRENT_SCHEMA');
dbms_output.put_line(vv_SchemaName);
END;
-- IN SQL
SELECT Sys_Context('USERENV','CURRENT_SCHEMA') FROM DUAL
Current_schema 与 LOGGED USER 有点不同,请参见示例:
-- The output will be:
-- Current schema:LOGGED_SCHEMA session user:LOGGED_SCHEMA
-- Current schema:CHANGED_SCHEMA session user:LOGGED_SCHEMA
-- When you are connected to LOGGED_SCHEMA and have CHANGED_SCHEMA.
DECLARE
vv_SchemaName VARCHAR2(100);
vv_SessionUser VARCHAR2(100);
BEGIN
vv_SchemaName := Sys_Context('USERENV','CURRENT_SCHEMA');
vv_SessionUser := Sys_Context('USERENV','SESSION_USER' );
dbms_output.put_line('Current schema:' || vv_SchemaName || ' session user:' || vv_SessionUser);
EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA=CHANGED_SCHEMA';
vv_SchemaName := Sys_Context('USERENV','CURRENT_SCHEMA');
vv_SessionUser := Sys_Context('USERENV','SESSION_USER' );
dbms_output.put_line('Current schema:' || vv_SchemaName || ' session user:' || vv_SessionUser);
END;
因此,如果您计划连接到一个用户并在另一个用户上工作,而不是根据您的需要使用 Sys_Context('USERENV','SESSION_USER' ) 可能是更好的选择。
我正在使用 Oracle SQL Developer 在数据库 xyz
中以用户 abc
登录。如何获取我登录时使用的模式的用户名?
我相信 用户名 你指的是操作系统用户名。 Oracle 数据库中的用户名(和 SQL Developer)是模式名称的同义词。
因此,在您的情况下,您的架构称为 abc。现在假设您的操作系统用户名是 'John',并且您想知道连接到架构 'abc' 的其他用户,那么您可以 运行 查询:
SELECT osuser
FROM v$session
WHERE schemaname = 'abc';
参阅此post了解更多详情
如果您只想知道您所在架构中的用户列表,试试这个:
SELECT * FROM all_users
如果您不更改当前架构,则以下代码将没问题:
-- In PLSQL
DECLARE
vv_SchemaName VARCHAR2(100);
BEGIN
vv_SchemaName := Sys_Context('USERENV','CURRENT_SCHEMA');
dbms_output.put_line(vv_SchemaName);
END;
-- IN SQL
SELECT Sys_Context('USERENV','CURRENT_SCHEMA') FROM DUAL
Current_schema 与 LOGGED USER 有点不同,请参见示例:
-- The output will be:
-- Current schema:LOGGED_SCHEMA session user:LOGGED_SCHEMA
-- Current schema:CHANGED_SCHEMA session user:LOGGED_SCHEMA
-- When you are connected to LOGGED_SCHEMA and have CHANGED_SCHEMA.
DECLARE
vv_SchemaName VARCHAR2(100);
vv_SessionUser VARCHAR2(100);
BEGIN
vv_SchemaName := Sys_Context('USERENV','CURRENT_SCHEMA');
vv_SessionUser := Sys_Context('USERENV','SESSION_USER' );
dbms_output.put_line('Current schema:' || vv_SchemaName || ' session user:' || vv_SessionUser);
EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA=CHANGED_SCHEMA';
vv_SchemaName := Sys_Context('USERENV','CURRENT_SCHEMA');
vv_SessionUser := Sys_Context('USERENV','SESSION_USER' );
dbms_output.put_line('Current schema:' || vv_SchemaName || ' session user:' || vv_SessionUser);
END;
因此,如果您计划连接到一个用户并在另一个用户上工作,而不是根据您的需要使用 Sys_Context('USERENV','SESSION_USER' ) 可能是更好的选择。