如何在 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 中 userschema 几乎相同。见this post @A.B.Cade - 您链接的那个线程包含一个已删除的帖子,该帖子链接到我写的关于这个主题的博客文章(我没有发布那个回复)。一个 mod 删除了它,因为 SO 不赞成只是链接的答案,但我认为这篇文章是相关的,因为它解释了为什么 USER 和 SCHEMA 不是一回事:radiofreetooting.blogspot.com/2007/02/user-schema.html @APC,感谢您的链接,这是一个很棒的帖子。我知道它们不一样(这就是为什么我在我的 cmets 中使用了 quitepretty muchthink 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 中列出模式中的所有表?

Oracle SQL 查询列出所有活动用户/模式并给出对象计数

使用 MVVM 在 WPF 中创建新窗口的最佳方法

如何在不导入的情况下从 .dmp 文件中列出 Oracle 中的所有模式和表空间?

在 Oracle SQL Developer 中创建新数据库和新连接

TypeORM - 如何在生产模式下创建新表并自动运行迁移?