プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
12cリリース1 (12.1.0.2)
B71303-09
目次へ移動
目次
索引へ移動
索引

前
次

DBMS_METADATAの例で行われる処理

mddemoスクリプトを実行すると、次の手順が行われます。これらの手順をユーザーの状況に合わせることができます。

  1. ユーザーが存在する場合は、次のとおり削除します。これで、新しいデータを使用した作業が開始できます。ユーザーが存在しない場合は、その影響を示すメッセージが表示されますが、問題はありません。デモは継続して実行されます。

    CONNECT system
    Enter password: password
    SQL> DROP USER mddemo CASCADE;
    SQL> DROP USER mddemo_clerk CASCADE;
    SQL> DROP USER mddemo_mgr CASCADE;
    
  2. 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;
    
  3. clerkで識別されるユーザーmddemo_clerkを作成します。

    CREATE USER mddemo_clerk IDENTIFIED BY clerk;
    
  4. mgrで識別されるユーザーmddemo_mgrを作成します。

    CREATE USER mddemo_mgr IDENTIFIED BY mgr;
    
  5. mddemoとしてSQL*Plusに接続します(パスワードもmddemoです)。

    CONNECT mddemo
    Enter password:
    
  6. いくつかの従業員名簿型の表を作成します。

    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 /
    
  7. audit_trailというダミーの表を作成します。この表は、payrollで始まらない表は、GET_PAYROLL_TABLESプロシージャでは取得されないことを示すために使用します。

    SQL> CREATE TABLE audit_trail 
      2  (action_time DATE,
      3  lastname VARCHAR2(60),
      4  action LONG )
      5  /
    
  8. 作成された表の権限を作成します。

    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;
    
  9. 作成された表の索引を作成します。

    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);
    
  10. 作成された表のトリガーを作成します。

    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;
    /
    
  11. 生成されたDDLを保持する表を設定します。

    CREATE TABLE ddl (ddl CLOB, seqno NUMBER);
    
  12. 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を参照してください。