2013-04-17 16 views
6

Chcę utworzyć jeden nowy schemat w Oracle i ja przykładowy kod, który jest dostępny hereJak utworzyć nowy schemat i listę wszystkich nazwę schematu w Oracle

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 
/

Ale coraz error

ERROR at line 1: 
ORA-02421: missing or invalid schema authorization identifier 

Ponadto, proszę mi pomóc, jak wyświetlić nazwę wszystkich dostępnych schematów. Używam

select username from dba_users; 

do listy schematu, ale myślę, to nie jest właściwe podejście, ponieważ użytkownik i schemat ma wiele do wielu relacji, co oznacza, że ​​nie można uzyskać wszystkie nazwy schematu tutaj.

Proszę mi pomóc!

+0

W Oracle użytkownika i schematu * nie * mają wiele do wielu relacji (faktycznie różnica jest bardziej semantyczna - są całkiem takie same) –

+0

Dlaczego? jeden użytkownik może mieć wiele schematów, a schemat może być powiązany z wieloma użytkownikami. Nie jest? – Ravi

+0

W Oracle 'user' i' schema' są prawie takie same. Zobacz [ten post] (http://stackoverflow.com/questions/880230/difference-betweena-a-user-and-a-schema-in-oracle) –

Odpowiedz

12

Oracle documentation:

To stwierdzenie nie faktycznie stworzyć schemat. Oracle Database automatycznie tworzy schemat podczas tworzenia użytkownika

Więc najpierw trzeba create a User z nazwą schematu

chodzi o zapytaniu jest w porządku, ponieważ lista nazwa użytkownika jest równa nazw schematów niedostępnych


UPDATE: nie mogę przetestować go teraz, ale powinno być coś takiego:

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; 
+0

Czy możesz ponownie napisać kod do tworzenia nowego schematu? – Ravi

+0

@ owieczkę, zaktualizowałem swoją odpowiedź. Zauważyłem także, że zapomniałem dodać link do "create user' documentation ... –

+0

powinienem użyć konta' oe' do stworzenia schematu 'oe'? – Ravi

2

Od docs: http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6014.htm

Nazwa schematu musi być taka sama jak nazwa użytkownika bazy danych Oracle.

Czy chcesz znaleźć wszystkich użytkowników lub wszystkich użytkowników, dla których istnieje tabela (na przykład)? Jeśli to drugie, to ...

select distinct 
    owner 
from 
    dba_tables 
where 
    owner not in ('SYS','SYSTEM') 

Dodaj inne nazwy użytkowników, których nie chcesz wyświetlać zgodnie z wymaganiami.