【问题标题】:How to create new schema and list all schema name in oracle如何在 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 之类的词)并且我也很内疚 将它们互换使用你写得真好……

标签: oracle schema authorization database-schema


【解决方案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
    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2012-09-19
    • 1970-01-01
    • 2012-02-12
    • 2020-10-02
    相关资源
    最近更新 更多