如何在 oracle 中创建新模式并列出所有模式名称
Posted
技术标签:
【中文标题】如何在 oracle 中创建新模式并列出所有模式名称【英文标题】:How to create new schema and list all schema name in oracle 【发布时间】:2013-04-09 21:09:52 【问题描述】:我想在 oracle 中创建一个新模式,我使用了示例代码,该示例代码可用 here
CREATE SCHEMA AUTHORIZATION oe
CREATE TABLE new_product
(color VARCHAR2(10) PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
AS SELECT color, quantity FROM new_product WHERE color = 'RED'
GRANT select ON new_product_view TO scott
/
但是,出现错误
ERROR at line 1:
ORA-02421: missing or invalid schema authorization identifier
另外,请帮助我如何列出所有可用架构的名称。我正在使用
select username from dba_users;
列出架构,但我认为这不是正确的方法,因为用户和架构具有多对多关系,这意味着我无法在这里获取所有架构名称。
请帮帮我!!
【问题讨论】:
在oracle用户和模式中不有多对多的关系(实际上区别是语义上的——它们是完全一样的) 为什么?一个用户可以有多个模式,一个模式可以与多个用户相关联。不是吗? 在 oracle 中user
和 schema
几乎相同。见this post
@A.B.Cade - 您链接的那个线程包含一个已删除的帖子,该帖子链接到我写的关于这个主题的博客文章(我没有发布那个回复)。一个 mod 删除了它,因为 SO 不赞成只是链接的答案,但我认为这篇文章是相关的,因为它解释了为什么 USER 和 SCHEMA 不是一回事:radiofreetooting.blogspot.com/2007/02/user-schema.html
@APC,感谢您的链接,这是一个很棒的帖子。我知道它们不一样(这就是为什么我在我的 cmets 中使用了 quite
、pretty much
和 think as
之类的词)并且我也很内疚 将它们互换使用你写得真好……
【参考方案1】:
来自文档:http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6014.htm
模式名称必须与您的 Oracle 数据库用户名相同。
您要查找所有用户,还是查找存在表(例如)的所有用户?如果是后者,那么...
select distinct
owner
from
dba_tables
where
owner not in ('SYS','SYSTEM')
按要求添加您不想列出的其他用户名。
【讨论】:
【参考方案2】:来自甲骨文documentation:
此语句实际上并未创建架构。甲骨文数据库 创建用户时自动创建架构
所以你首先需要create a User 带有架构名称
至于您的查询没问题,因为用户名列表等于不可用的架构名称
更新:我现在无法真正测试它,但应该是这样的:
CREATE USER oe IDENTIFIED BY oePSWRD;
CREATE SCHEMA AUTHORIZATION oe
CREATE TABLE new_product
(color VARCHAR2(10) PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
AS SELECT color, quantity FROM new_product WHERE color = 'RED'
GRANT select ON new_product_view TO scott;
【讨论】:
@jWeavers,我更新了我的答案。我还注意到我忘记将链接添加到create user
文档...
我应该使用oe
帐户来创建oe
架构?
@jWeavers,根据 DavidAldridge 引用的文档 - 是的
所以,我有一个问题,当我创建新用户oe
时,默认情况下,Oracle 将创建具有相同名称oe
的新模式。那么,当我尝试执行上述查询时,不会出现任何异常,因为相同的模式已经存在?
@jWeavers,查看文档(在第一行!!):Use the CREATE SCHEMA statement to create multiple tables and views and perform multiple grants in your own schema in a single transaction
。不仅如此 - 它很明显:This statement does not actually create a schema
以上是关于如何在 oracle 中创建新模式并列出所有模式名称的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL 查询列出所有活动用户/模式并给出对象计数
如何在不导入的情况下从 .dmp 文件中列出 Oracle 中的所有模式和表空间?