如何使用 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' ) 可能是更好的选择。