web-dev-qa-db-ja.com

Oracleで新しいスキーマを作成してすべてのスキーマ名をリストする方法

Oracleで1つの新しいスキーマを作成し、サンプルコードを使用します。サンプルコードは 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;

スキーマをリストすることはできますが、ユーザーとスキーマには多対多の関係があるため、適切なアプローチではないと思います。つまり、ここですべてのスキーマ名を取得することはできません。

私を助けてください !!

7
Ravi

Oracleから ドキュメント

このステートメントは実際にはスキーマを作成しません。ユーザーを作成すると、Oracle Databaseは自動的にスキーマを作成します

したがって、最初に ユーザーの作成 とスキーマ名を指定する必要があります

クエリに関しては、ユーザー名のリストは利用できないスキーマ名と等しいため、問題ありません


UPDATE:今は実際にテストすることはできませんが、次のようになるはずです。

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;
13
A.B.Cade

ドキュメントから: 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
David Aldridge