はじめに
Oracle Database 12cをインストールして、テーブル作成、ユーザ登録、データの取得までをやってみました。
翔泳社
売り上げランキング: 351,551
環境
- Windows Server 2012
- Oracle Database 12c R1(12.1.0.1.0)
テーブルの作成
はじめに、サンプルで使用するテーブルを作成します。
1.sysユーザでログインします。
connect / as sysdba
2.create table文を実行して、テーブルを作成します。
create table table01 ( id number, name varchar(50), furigana varchar(50), birthday varchar(8), timestamp timestamp(6), primary key( id ) );
3.試しに以下のSQLを実行して、データ件数を取得してみます。まだデータを挿入していないので、件数0が取得できます。
select count(id) from table01; COUNT(ID) ---------- 0
テーブルを操作するためのユーザを作成する
sysユーザでもtable01テーブルを操作できるのですが、通常はテーブルを操作するための専用ユーザを作成し、必要な権限のみを与えます。
1.create user文を実行して、あたらしくユーザを作成します。
-- CREATE USER ユーザ名 IDENTIFIED BY パスワード; CREATE USER hoge IDENTIFIED BY hoge_pwd;
あれ、create user文が「ORA-65096: 共通ユーザーまたはロール名が無効です」のエラーになってしまいました。
CREATE USER hoge IDENTIFIED BY hoge_pwd * 行1でエラーが発生しました。: ORA-65096: 共通ユーザーまたはロール名が無効です
調べたところ、ルートコンテナにローカルユーザーを作成しようとした場合に発生するエラーでした。
接続しているコンテナを調べて、CDB$ROOTとなっていた場合はルートコンテナに接続している状態です。
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
以下のクエリを実行し、PDBの名前とopen_modeがREAD WRITEとなっているかを確認します。
select name, open_mode from v$pdbs;
READ WRITEモードになっていない場合は、プラガブルデータベースを起動します。
alter pluggable database pdbの名前 open;
次のクエリを実行し、現在のコンテナをプラガブルデータベースに変更します。
alter session set container = pdbの名前;
あらためて、create user文を実行して、あたらしくユーザを作成します。
-- CREATE USER ユーザ名 IDENTIFIED BY パスワード; CREATE USER hoge IDENTIFIED BY hoge_pwd;
2.作成したhogeユーザは、この状態だとログインすらできないので、ログインする権限を与えます。
GRANT CONNECT TO hoge;
3.hogeユーザにさきほど作成したtable01テーブルへの操作権限を与えます。これでhogeユーザはtable01テーブルに対してデータの検索、挿入、更新、削除ができるようになります。
GRANT select,insert,update,delete ON table01 TO hoge;
一般ユーザでテーブルを操作する
1.hogeユーザでログインしなおします。(PDBORCLはプラガブルデータベースの名前です)
conn hoge/hoge_pwd@PDBORCL
2.table01テーブルの件数を取得してみる
select count(id) from table01; >select count(id) from table01 > * >行1でエラーが発生しました。: >ORA-00942: 表またはビューが存在しません。
table01というテーブルが見つからないため、ORA-00942のエラーになりました。table01はsysユーザで作成したテーブルなので、以下のようにします。
select count(id) from sys.table01; COUNT(ID) ---------- 0
テーブルに別名を与えるシノニム
テーブル名を指定するのに、テーブル作成者を意識しないと使えないのは非常に不便です。そのため、シノニムという機能を使います。シノニムとは、オブジェクトに別の名前を付けて、その名前で使えるようにする機能のことです。
connect sys/password@pdborcl as sysdba create public synonym table01 for sys.table01; >シノニムが作成されました。
この状態で、再度さきほどのSQLを流すとシノニムを介して、目的のテーブルを操作することができます。
SQL> conn hoge/hoge_pwd@PDBORCL 接続されました。 SQL> select count(id) from table01; COUNT(ID) ---------- 0