mddemo
スクリプトを実行すると、次の手順が行われます。これらの手順をユーザーの状況に合わせることができます。
ユーザーが存在する場合は、次のとおり削除します。これで、新しいデータを使用した作業が開始できます。ユーザーが存在しない場合は、その影響を示すメッセージが表示されますが、問題はありません。デモは継続して実行されます。
CONNECT system
Enter password: password
SQL> DROP USER mddemo CASCADE;
SQL> DROP USER mddemo_clerk CASCADE;
SQL> DROP USER mddemo_mgr CASCADE;
mddemo
で識別されるユーザーmddemo
を作成します。
SQL> CREATE USER mddemo IDENTIFIED BY mddemo; SQL> GRANT resource, connect, create session, 1 create table, 2 create procedure, 3 create sequence, 4 create trigger, 5 create view, 6 create synonym, 7 alter session, 8 TO mddemo;
clerk
で識別されるユーザーmddemo_clerk
を作成します。
CREATE USER mddemo_clerk IDENTIFIED BY clerk;
mgr
で識別されるユーザーmddemo_mgr
を作成します。
CREATE USER mddemo_mgr IDENTIFIED BY mgr;
mddemo
としてSQL*Plusに接続します(パスワードもmddemo
です)。
CONNECT mddemo Enter password:
いくつかの従業員名簿型の表を作成します。
SQL> CREATE TABLE payroll_emps 2 ( lastname VARCHAR2(60) NOT NULL, 3 firstname VARCHAR2(20) NOT NULL, 4 mi VARCHAR2(2), 5 suffix VARCHAR2(10), 6 dob DATE NOT NULL, 7 badge_no NUMBER(6) PRIMARY KEY, 8 exempt VARCHAR(1) NOT NULL, 9 salary NUMBER (9,2), 10 hourly_rate NUMBER (7,2) ) 11 / SQL> CREATE TABLE payroll_timecards 2 (badge_no NUMBER(6) REFERENCES payroll_emps (badge_no), 3 week NUMBER(2), 4 job_id NUMBER(5), 5 hours_worked NUMBER(4,2) ) 6 /
audit_trail
というダミーの表を作成します。この表は、payroll
で始まらない表は、GET_PAYROLL_TABLES
プロシージャでは取得されないことを示すために使用します。
SQL> CREATE TABLE audit_trail 2 (action_time DATE, 3 lastname VARCHAR2(60), 4 action LONG ) 5 /
作成された表の権限を作成します。
SQL> GRANT UPDATE (salary,hourly_rate) ON payroll_emps TO mddemo_clerk; SQL> GRANT ALL ON payroll_emps TO mddemo_mgr WITH GRANT OPTION; SQL> GRANT INSERT,UPDATE ON payroll_timecards TO mddemo_clerk; SQL> GRANT ALL ON payroll_timecards TO mddemo_mgr WITH GRANT OPTION;
作成された表の索引を作成します。
SQL> CREATE INDEX i_payroll_emps_name ON payroll_emps(lastname); SQL> CREATE INDEX i_payroll_emps_dob ON payroll_emps(dob); SQL> CREATE INDEX i_payroll_timecards_badge ON payroll_timecards(badge_no);
作成された表のトリガーを作成します。
SQL> CREATE OR REPLACE PROCEDURE check_sal( salary in number) AS BEGIN 2 RETURN; 3 END; 4 /
例を簡単にするために、セキュリティは比較的低く設定しています。
SQL> CREATE OR REPLACE TRIGGER salary_trigger BEFORE INSERT OR UPDATE OF salary ON payroll_emps FOR EACH ROW WHEN (new.salary > 150000) CALL check_sal(:new.salary) / SQL> CREATE OR REPLACE TRIGGER hourly_trigger BEFORE UPDATE OF hourly_rate ON payroll_emps FOR EACH ROW BEGIN :new.hourly_rate:=:old.hourly_rate;END; /
生成されたDDLを保持する表を設定します。
CREATE TABLE ddl (ddl CLOB, seqno NUMBER);
DBMS_METADATA
プロシージャを使用できる例を提供するPAYROLL_DEMO
パッケージを作成します。
SQL> CREATE OR REPLACE PACKAGE payroll_demo AS PROCEDURE get_payroll_tables; END; /
注意:
PAYROLL_DEMO
パッケージの内容を含めて、この例のスクリプト全体を参照するには、$ORACLE_HOME/rdbms/demo
ディレクトリにあるファイルmddemo.sql
を参照してください。