Oracle Express 11gの新しい新しいインスタンスがあります。デフォルトのデータベース(xe)にテーブルとビューを含む新しいスキーマを作成しようとしています。
私のスクリプトは:
create user XAuthority identified by mysecret;
alter session set current_schema = XAuthority;
create schema authorization XAuthority
create table CUSTOMER ( ID int, CUSTOMER text)
create view CUSTOMER_VIEW as select * from CUSTOMER
grant select on CUSTOMER_VIEW to xareadonly;
しかし、エラーが発生します:
SQLエラー:ORA-02421:スキーマ許可ID 02421が欠落しているか無効です。00000-「スキーマ許可IDが欠落しているか無効です」
*原因:スキーマ名が欠落しているか、スキーマ作成ステートメントの許可文節に誤りがあります。
*アクション:名前が存在する場合、現在のスキーマと同じである必要があります。
私はPostgresとMySqlに精通していますが、Oracleはかなり異なっているようです。誰かがここで何が悪いのか教えてもらえますか?
スキーマを作成
目的
CREATE SCHEMAステートメントを使用して、複数のテーブルとビューを作成し、独自のスキーマで単一のトランザクションで複数の付与を実行します。
さて、あなたは複数の問題を抱えています。まず、新しく作成したユーザーにCREATE SESSION
システム権限を付与する必要があります。次に、データ型がOracleで互換性がありません(int
をnumber
に、text
をvarchar2
に変換する必要があります)。
CREATE SCHEMA
ステートメントを使用するには、ステートメントで指定したユーザーとしてデータベースに接続する必要があります。
問題は、セッションを変更してもxauthority
としてデータベースに接続されていないことです。
SQL> conn sys/password
Connected.
SQL> create user XAuthority identified by mysecret;
User created.
SQL> alter session set current_schema = XAuthority;
Session altered.
SQL> create schema authorization XAuthority
create table CUSTOMER(ID number, CUSTOMER_name varchar2(20))
create view CUSTOMER_VIEW as select * from CUSTOMER
grant select on CUSTOMER_VIEW to xareadonly; 2 3 4
create schema authorization XAuthority
*
ERROR at line 1:
ORA-02421: missing or invalid schema authorization identifier
SQL> show user
USER is "SYS"
ユーザーはxauthority
である必要がありますが、それでもSYS
のままです。
データベースに接続するには、create session
システム権限が必要です。
SQL> grant create session to xauthority;
Grant succeeded.
テーブルなどのスキーマオブジェクトを作成するには、テーブルスペースに割り当てが必要です。
SQL> alter user xauthority quota unlimited on orapdb1_tbs1;
User altered.
SQL> conn xauthority/mysecret
Connected.
SQL> conn xauthority/mysecret
Connected.
SQL> create schema authorization XAuthority
create table CUSTOMER(ID number, CUSTOMER_name varchar2(20))
create view CUSTOMER_VIEW as select * from CUSTOMER;
Schema created.