我连接到一个带有只读用户的oracle数据库,我在sql developer中设置连接时使用了服务名,因此我不知道SID(模式).
我怎样才能找到我所连接的架构名称?
我正在寻找这个,因为我想生成ER图,并在该过程中一步请求选择模式.当我试图选择我的用户名时,我得到任何表,因为我猜所有表都与模式用户映射.
编辑:我得到了我的答案部分由评论中提供的下面的SQL弗兰克,它给了我所有者名称,这是我的情况下的架构.但我不确定它是否适用于所有情况的通用解决方案.
select owner, table_name from all_tables.
Run Code Online (Sandbox Code Playgroud)
编辑:我认为上面的sql在所有情况下都是正确的解决方案,因为schema是所有db对象的所有者.所以我得到的架构或所有者都是相同的.之前我对架构的理解不正确,我经历了另一个问题,发现架构也是一个用户.
Frank/a_horse_with_no_name把它放回答案中,这样我就可以接受了.
Dan*_*nga 28
调用SYS_CONTEXT以获取当前架构.来自Ask Tom"如何获得当前架构:
select sys_context( 'userenv', 'current_schema' ) from dual;
Run Code Online (Sandbox Code Playgroud)
Cod*_*odo 19
要创建只读用户,您必须设置与拥有您要访问的表的用户不同的用户.
如果您只是创建用户并向只读用户授予SELECT权限,则需要在每个表名前添加模式名称.为避免这种情况,您基本上有两种选择:
ALTER SESSION SET CURRENT_SCHEMA=XYZ
Run Code Online (Sandbox Code Playgroud)
CREATE SYNONYM READER_USER.TABLE1 FOR XYZ.TABLE1
Run Code Online (Sandbox Code Playgroud)
因此,如果您没有被告知所有者架构的名称,您基本上有三个选项.最后一个应该始终有效:
SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL
Run Code Online (Sandbox Code Playgroud)
SELECT * FROM ALL_SYNONYMS WHERE OWNER = USER
Run Code Online (Sandbox Code Playgroud)
SELECT * FROM ALL_TABLES WHERE OWNER NOT IN ('SYS', 'SYSTEM', 'CTXSYS', 'MDSYS');
Run Code Online (Sandbox Code Playgroud)