Oracle® 開発者用 データベースの互換性
ビルトインパッケージガイド

 

 

 

EDB Postgres™Advanced Server 10

2017年 11月1

 


Oracle®開発者用 データベースの 互換性
ビルトインパッケージ
ガイド
EnterpriseDB®Corporation
Copyright©2007 - 201
7 EnterpriseDB Corporation。全著作権所有。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EnterpriseDB Corporation、34 Crosby Drive、Suite 100、Bedford、MA 01730、USA
T +1 781 357 3390 F +1 978 589 5701 E info@enterprisedb.com www .enterprisedb.com


1      前書き

オラクルのデータベース互換性とは、アプリケーションがOracle環境だけでなく、 EDB Postgres Advanced Server(Advanced Server)環境でも実行されることを意味します。このガイドでは、Advanced Serverによって提供されるパッケージサポートに関連する機能のみに焦点を当てています。

Advanced Serverが提供する他の互換機能の使用方法の詳細については、Advanced Serverの全ガイドを参照してください。

http://www.enterprisedb.com/products-services-training/products/documentation

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1      このガイドで使用される表記規則

このマニュアルでは、さまざまな用語の意味と使用法を明確にするために、特定の表記規則が使用されています コマンド、文、プログラム、例などがあります。この節では、これらの規則の概要を示します。

以下の説明では、 用語 は、言語キーワード、ユーザ提供値、リテラルなどの任意の単語または単語群を指す。用語の正確な意味は、それが使用される文脈に依存する。

      イタリック体のフォントで は、通常、最初に定義された文章に新しい用語が導入されています。

·        Fixed-width (mono-spaced) font は、 SQL コマンド、例で使用されている特定のテーブルとカラム名、プログラミング言語キーワード など、文字通り与えなければならない用語に使用され ます 。たとえば、 SELECT * FROM emp;

      Italic fixed-width font は、ユーザーが実際の使用で値を置き換える必要がある用語に使用されます。たとえば、 DELETE FROM table_name ;

      |パイプの両側の用語の間の選択を示します。垂直パイプは、角括弧(オプションの選択肢)または中括弧(1つの必須選択肢)内の2つ以上の代替用語を区切るために使用されます。

      角括弧[]は、囲まれた用語の1つまたはいずれかが置換されていてもよいことを示す。たとえば、 [ a | b ] 、「 a 」または「 b 」のいずれ かを 選択するか、 またはどちらも 選択しないことを意味します

      中括弧{}は、囲まれた選択肢のうちの1つを指定する必要があることを示します。たとえば、 { a | b } 、 " a "または " b "の うちの1つを 指定する必要があることを意味します。

      楕円形...とは、進行中の用語を繰り返すことができることを意味します。たとえば、 [ a | b ] ... は、あなたがシーケンス「 baaba 」を 持っているかもしれないことを意味します

 

 

 

 

 

 

2      パッケージ

この章では、 Advanced Server のパッケージの概念について説明し ます パッケージ識別子- パッケージは 一般的な修飾子を使用して参照されている関数、プロシージャ、変数、カーソル、ユーザー定義のレコードタイプ、およびレコードの名前付きコレクションです。パッケージには次の特徴があります。

      パッケージは、関連する目的を果たす機能と手順を整理する便利な手段を提供します。パッケージのファンクションとプロシージャを使用する権限は、パッケージ全体に付与された1つの特権に依存します。すべてのパッケージプログラムは、共通名で参照する必要があります。

      パッケージ内の特定の関数、プロシージャ、変数、型などはpublicとして宣言できます。パブリック・エンティティーは可視であり 、パッケージに対する EXECUTE 特権 が与えられている他のプログラムから参照でき ます。パブリック関数とプロシージャーの場合、プログラム名、パラメーター(存在する場合)、関数の戻り値のタイプのみが表示されます。これらのファンクションとプロシージャのSPLコードには他人からアクセスできないため、パッケージを利用するアプリケーションは、手続き型ロジック自体ではなく、シグネチャで利用可能な情報のみに依存します。

      パッケージ内の他の関数、手続き、変数、型などはprivateとして宣言することができます。プライベートエンティティは、パッケージ内の関数とプロシージャによって参照され、使用されますが、他の外部アプリケーションでは参照および使用されません。プライベートエンティティは、パッケージ内のプログラムによってのみ使用されます。

      関数名とプロシージャー名は、パッケージ内でオーバーロードすることができます。 1つ以上の関数/プロシージャを同じ名前で定義できますが、シグネチャは異なります。これにより、同じジョブを実行する同じ名前のプログラムを作成することができますが、異なるタイプの入力を使用することができます。

2.1      パッケージコンポーネント

パッケージは、次の2つの主要コンポーネントで構成されています。

      パッケージ仕様 :これはパブリックインタフェースです(パッケージ外で参照できる要素です)。私たちは、仕様内でパッケージの一部となるすべてのデータベースオブジェクトを宣言します。

      パッケージ本体 :これには、パッケージ仕様内で宣言されたすべてのデータベースオブジェクトの実際の実装が含まれます。

パッケージ本体は、パッケージ仕様の仕様を実装します。アプリケーションには見えない実装の詳細やプライベートな宣言が含まれています。仕様を変更することなく、パッケージ本体をデバッグ、拡張、または置換することができます。同様に、呼び出しのプログラムを再コンパイルせずに本体を変更することもできます。これは、実装の詳細がアプリケーションから見えないためです。

2.1.1    Package Specification Syntax

パッケージ仕様は、パッケージ(API)のユーザーインターフェイスを定義します。この仕様には、パッケージのユーザーに表示される関数、プロシージャ、タイプ、例外、およびカーソルがリストされています。

パッケージのインタフェースを定義する構文は次のとおりです。

CREATE [ OR REPLACE ] PACKAGE package_name

  [ authorization_clause ]

  { IS | AS }

  [ declaration; ] ...

  [ procedure_or_function_declaration ] ...

END [ package_name ] ;

どこに authorization_clause :=

{ AUTHID DEFINER } | { AUTHID CURRENT_USER }

where procedure_or_function_declaration :=

procedure_declaration | function_declaration

where procedure_declaration :=

PROCEDURE proc_name [ argument_list ];

[ restriction_pragma ; ]

どこ function_declaration :=

FUNCTION func_name [ argument_list ]

  RETURN rettype [ DETERMINISTIC ];

[ restriction_pragma ; ]

どこで argument_list :=

( argument_declaration [, ...] )

どこで argument_declaration :=

argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]

where restriction_pragma :=

PRAGMA RESTRICT_REFERENCES( name , restrictions )

ここで restrictions :=

restriction [, ... ]

パラメーター

package_name

package_name はパッケージに割り当てられた識別子です。各パッケージはスキーマ内で一意の名前を持つ必要があります。

AUTHID DEFINER

AUTHID を省略する AUTHID 指定すると DEFINER では、パッケージ所有者の権限を使用して、データベース・オブジェクトへのアクセス権限を判別します。

AUTHID CURRENT_USER

AUTHID を指定した場合 CURRENT_USER では、パッケージ内のプログラムを実行している現在のユーザーの権限を使用して、アクセス権限を判別します。

declaration

declaration は、パブリック変数の識別子です。パブリック変数は、 package_name.variable という構文を使用してパッケージの外部からアクセスできます 。ゼロ、1つ、またはそれ以上のパブリック変数があります。パブリック変数の定義は、プロシージャ宣言または関数宣言の前に来なければなりません。

declaration は次のいずれかになります。

      変数宣言

      宣言の記録

      コレクション宣言

      REF CURSOR およびカーソル変数宣言

      レコード、コレクション、および REF CURSOR TYPE 定義

      例外

      オブジェクト変数宣言

proc_name

パブリックプロシージャーの名前。

argname

引数の名前。引数は、関数またはプロシージャ本体内でこの名前によって参照されます。

IN | IN OUT | OUT

引数モード。 IN は入力のみの引数を宣言します。これがデフォルトです。 IN OUT は、引数が値を受け取るだけでなく値を返すことを許可します。 OUT は、引数が出力専用であることを指定します。

argtype

引数のデータ型。引数の型は、基本データ型、 %TYPE を使用する既存の列の型のコピー 、またはネストした表またはオブジェクト型などのユーザー定義の型です。長さは、任意の基本型に指定してはならない-例えば、指定 VARCHAR2 なく、 VARCHAR2(10)

列の型は、 tablename を書くことによって参照され tablename . columnname %TYPE ;これを使用すると、プロシージャを表の定義の変更から独立させることができます。

DEFAULT value

DEFAULT いずれかが呼び出しで供給されていない場合句は、入力引数のデフォルト値を提供します。 IN OUT または OUT モードの引数の場合、 DEFAULT は指定できません

func_name

パブリック関数の名前。

rettype

戻り値のデータ型。

DETERMINISTIC

DETERMINISTIC IMMUTABLEの 同義語です DETERMINISTIC 関数は、データベースを変更し、同じ引数値を与えた場合、常に同じ結果に達することができません。データベース参照を行わず、引数リストに直接存在しない情報を使用しません。この句を含めると、すべて定数の引数を持つ関数の呼び出しをすぐに関数の値に置き換えることができます。

restriction

次のキーワードは互換性のために受け入れられ、無視されます:

RNDS

RNPS

TRUST

WNDS

WNPS

 

2.1.2    Package Body Syntax

パッケージ実装の詳細はパッケージ本体にあります。パッケージ本体には、パッケージユーザーが見ることのできないオブジェクトが含まれている場合があります。 Advanced Serverは、パッケージ本体の次の構文をサポートしています。

CREATE [ OR REPLACE ] PACKAGE BODY package_name

  { IS | AS }

  [ private_declaration; ] ...

  [ procedure_or_function_definition ] ...

  [ package_initializer ]

END [ package_name ] ;

ここで、 procedure_or_function_definition :=

procedure_definition | function_definition

ここで、 procedure_definition :=

PROCEDURE proc_name [ argument_list ]

  [ options_list ]

  { IS | AS }

    procedure_body

  END [ proc_name ] ;

どこで procedure_body :=

[ declaration ; ] [、...]

ベギン

  statement ; [...]

[例外

{ exception [OR exception ] [...]] THEN ステートメント ; }

[...]

]

どこ function_definition :=

FUNCTION func_name [ argument_list ]

  RETURN rettype [ DETERMINISTIC ]

  [ options_list ]

  { IS | AS }

    function_body

  END [ func_name ] ;

どこで :=

[ declaration ; ] [、...]

ベギン

  statement ; [...]

[例外

{ exception [OR exception ] [...] THEN ステートメント ; }

[...]

]

どこで argument_list :=

( argument_declaration [, ...] )

どこで argument_declaration :=

argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]

どこで options_list :=

option [ ... ]

どこで option :=

STRICT
LEAKPROOF

PARALLEL { UNSAFE | RESTRICTED | SAFE }

COST execution_cost

ROWS result_rows

SET config_param { TO value | = value | FROM CURRENT }

どこで package_initializer :=

BEGIN

 statement; [...]

END;

 

パラメーター

package_name

package_name は、これがパッケージ本体であるパッケージの名前です。この名前の既存のパッケージ指定がなければなりません。

private_declaration

private_declaration は、パッケージ内の任意のプロシージャまたは関数がアクセスできるプライベート変数の識別子です。ゼロ、1つ、またはそれ以上のプライベート変数があります。 private_declaration は、次のいずれかを指定できます。

   変数宣言

   宣言の記録

   コレクション宣言

   REF CURSOR およびカーソル変数宣言

   レコード、コレクション、および REF CURSOR TYPE 定義

   例外

   オブジェクト変数宣言

proc_name

作成されるプロシージャの名前。

declaration

変数、型、 REF CURSOR 、またはサブプログラムの宣言。 サブプログラム宣言が含まれている場合は、他のすべての変数、型、および REF CURSOR 宣言の 後に宣言する必要があり REF CURSOR

statement

SPLプログラムのステートメント。ことに注意してください DECLARE - BEGIN - END ブロックは、それ自体がSPLの文とみなされます。したがって、関数本体にはネストされたブロックが含まれることがあります。

exception

以下のような例外条件名 NO_DATA_FOUND OTHERS など、

func_name

作成される関数の名前。

rettype

戻り値の型 argtype リストされている型のいずれかです argtype 、長さを指定することはできません rettype

DETERMINISTIC

DETERMINISTIC インクルードして 、同じ引数値が指定されたときに関数が常に同じ結果を返すように指定します。 DETERMINISTIC 関数は、データベースを変更してはなりません。

注: DETERMINISTIC キーワードは、PostgreSQL IMMUTABLE オプション と同等 です。

注: パッケージ本体のパブリック関数に DETERMINISTIC が指定されている 場合 は、パッケージ仕様の関数宣言にも指定する必要があります。 (プライベート関数の場合、パッケージ仕様には関数宣言はありません。)

declaration

変数、型、 REF CURSOR 、またはサブプログラムの宣言。 サブプログラム宣言が含まれている場合は、他のすべての変数、型、および REF CURSOR 宣言の 後に宣言する必要があり REF CURSOR

argname

正式な議論の名前。引き数は、プロシージャー本体内でこの名前によって参照されます。

IN | IN OUT | OUT

引数モード。 IN は入力のみの引数を宣言します。これがデフォルトです。 IN OUT は、引数が値を受け取るだけでなく値を返すことを許可します。 OUT は、引数が出力専用であることを指定します。

argtype

引数のデータ型。引数の型は、基本データ型、 %TYPE を使用する既存の列の型のコピー 、またはネストした表またはオブジェクト型などのユーザー定義の型です。長さは、任意の基本型に指定してはならない-例えば、指定 VARCHAR2 なく、 VARCHAR2(10)

列の型は、 tablename を書くことによって参照され tablename . columnname %TYPE ;これを使用すると、プロシージャを表の定義の変更から独立させることができます。

DEFAULT value

DEFAULT いずれかがプロシージャ呼び出しに供給されていない場合句は、入力引数のデフォルト値を提供します。 IN OUT または OUT モードの引数の場合、 DEFAULT は指定できません

注意:次のオプションは、Oracleデータベースと互換性がありません。 Advanced Serverのみが提供するOracleパッケージ構文の拡張です。

STRICT

STRICT キーワードがで呼び出された場合、関数が実行されないことを指定する NULL 引数; instead the function will return NULL ; instead the function will return NULL .

LEAKPROOF

LEAKPROOF キーワードは、関数が戻り値を介する以外の引数、についての情報を明らかにしないことを指定します。

PARALLEL { UNSAFE | RESTRICTED | SAFE }

PARALLEL 句は、並列逐次走査(パラレルモード)の使用を可能にします。並列逐次スキャンは、逐次逐次スキャンとは対照的に、クエリ中に複数のワーカーを使用してリレーションを並行してスキャンします。

UNSAFE 設定する と、プロシージャまたはファンクションをパラレルモードで実行できません。このようなプロシージャまたはファンクションが存在すると、連続した実行計画が強制されます。これは、 PARALLEL 句が省略された 場合のデフォルト設定です

RESTRICTED 設定する と、プロシージャまたはファンクションはパラレル・モードで実行できますが、実行はパラレル・グループ・リーダに制限されます。特定の関係の資格に並行制限があるものがあれば、その関係は並列性のために選択されません。

SAFE 設定されている場合 、手続きまたは関数は制限なしで並列モードで実行できます。

execution_cost

execution_cost は、 cpu_operator_cost 単位で関数の推定実行コストを示す正の数を指定します 。関数がセットを返す場合、これは返される行あたりのコストです。デフォルトは 0.0025 です。

result_rows

result_rows は、クエリプランナが関数が返すと予想する行の推定数です。デフォルトは 1000 です。

SET

関数の持続時間のパラメータ値を指定 するには、 SET 句を 使用 します。

config_param は、パラメータ名を指定します。

value はパラメータ value 指定します。

FROM CURRENT

package_initializer

package _ initializer 内のステートメントは、 パッケージが最初に参照されたときにユーザーのセッションごとに1回実行されます

注: STRICT LEAKPROOF PARALLEL COST ROWS および SET キーワードはAdvanced Serverの拡張機能を提供し、Oracleではサポートされていません。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2      パッケージの作成

パッケージは実行可能なコードではありません。むしろそれはコードのリポジトリです。パッケージを使用する場合、実際にはパッケージ内の要素を実行または参照します。

2.2.1    Creating the Package Specification

パッケージ仕様には、パッケージの外部から参照できるパッケージ内のすべての要素の定義が含まれています。これらはパッケージのパブリック要素と呼ばれ、パッケージインタフェースとして機能します。次のコードサンプルはパッケージ仕様です。

--

--  Package specification for the 'emp_admin' package.

--

CREATE OR REPLACE PACKAGE emp_admin

IS

  

   FUNCTION get_dept_name (

      p_deptno        NUMBER DEFAULT 10

   )

   RETURN VARCHAR2;

   FUNCTION update_emp_sal (

      p_empno         NUMBER,

      p_raise         NUMBER

   )

   RETURN NUMBER;

   PROCEDURE hire_emp (

      p_empno         NUMBER,

      p_ename         VARCHAR2,

      p_job           VARCHAR2,

      p_sal           NUMBER,

      p_hiredate      DATE DEFAULT sysdate,

      p_comm          NUMBER DEFAULT 0,

      p_mgr           NUMBER,

      p_deptno        NUMBER DEFAULT 10

   );

   PROCEDURE fire_emp (

      p_empno         NUMBER

   );  

  

END emp_admin;

このコードサンプルは、 emp_admin パッケージ仕様を 作成し ます。このパッケージ仕様は、2つの関数と2つのストアドプロシージャで構成されています。 便宜上 OR REPLACE 句を CREATE PACKAGE 文に 追加することもでき ます。

2.2.2    Creating the Package Body

パッケージの本体には、パッケージ仕様の背後にある実際の実装が含まれています。上記の emp_admin パッケージ仕様では、仕様を実装するパッケージ本体を作成します。本文には、関数とストアドプロシージャの実装が仕様に含まれます。

--

--  Package body for the 'emp_admin' package.

--

CREATE OR REPLACE PACKAGE BODY emp_admin

IS

   --

   --  Function that queries the 'dept' table based on the department

   --  number and returns the corresponding department name.

   --

   FUNCTION get_dept_name (

      p_deptno        IN NUMBER DEFAULT 10

   )

   RETURN VARCHAR2

   IS

      v_dname         VARCHAR2(14);

   BEGIN

      SELECT dname INTO v_dname FROM dept WHERE deptno = p_deptno;

      RETURN v_dname;

   EXCEPTION

      WHEN NO_DATA_FOUND THEN

         DBMS_OUTPUT.PUT_LINE('Invalid department number ' || p_deptno);

         RETURN '';

   END;

   --

   --  Function that updates an employee's salary based on the

   --  employee number and salary increment/decrement passed

   --  as IN parameters.  Upon successful completion the function

   --  returns the new updated salary.

   --

   FUNCTION update_emp_sal (

      p_empno         IN NUMBER,

      p_raise         IN NUMBER

   )

   RETURN NUMBER

   IS

      v_sal           NUMBER := 0;

   BEGIN

      SELECT sal INTO v_sal FROM emp WHERE empno = p_empno;

      v_sal := v_sal + p_raise;

      UPDATE emp SET sal = v_sal WHERE empno = p_empno;

      RETURN v_sal;

   EXCEPTION

      WHEN NO_DATA_FOUND THEN

         DBMS_OUTPUT.PUT_LINE('Employee ' || p_empno || ' not found');

         RETURN -1;

      WHEN OTHERS THEN

         DBMS_OUTPUT.PUT_LINE('The following is SQLERRM:');

         DBMS_OUTPUT.PUT_LINE(SQLERRM);

         DBMS_OUTPUT.PUT_LINE('The following is SQLCODE:');

         DBMS_OUTPUT.PUT_LINE(SQLCODE);

         RETURN -1;

   END;

   --

   --  Procedure that inserts a new employee record into the 'emp' table.

   --

   PROCEDURE hire_emp (

      p_empno         NUMBER,

      p_ename         VARCHAR2,

      p_job           VARCHAR2,

      p_sal           NUMBER,

      p_hiredate      DATE    DEFAULT sysdate,

      p_comm          NUMBER  DEFAULT 0,

      p_mgr           NUMBER,

      p_deptno        NUMBER  DEFAULT 10

   )

   AS

   BEGIN

      INSERT INTO emp(empno, ename, job, sal, hiredate, comm, mgr, deptno)

         VALUES(p_empno, p_ename, p_job, p_sal,

                p_hiredate, p_comm, p_mgr, p_deptno);

   END;

   --

   --  Procedure that deletes an employee record from the 'emp' table based

   --  on the employee number.

   --

   PROCEDURE fire_emp (

      p_empno         NUMBER

   )

   AS

   BEGIN

      DELETE FROM emp WHERE empno = p_empno;

   END;

END;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.3      パッケージの参照

パッケージ仕様内で宣言された型、項目、およびサブプログラムを参照するために、ドット表記法を使用します。例えば:

package_name . type_name

package_name . item_name

package_name . subprogram_name

emp_admin パッケージ仕様 から関数を呼び出すには 、次のSQLコマンドを実行します。

SELECT emp_admin.get_dept_name(10) FROM DUAL;

ここでは emp_admin パッケージ内で宣言された get_dept_name 関数 を呼び出して います 。部門番号を関数の引数として渡しています。関数には、部門の名前が返されます。ここで返される値は 部門番号 10 対応する ACCOUNTING なければなりません

 

 

 

 

 

 

 

 

 

 

 

 

2.4      ユーザー定義型のパッケージの使用

次の例は、前の章で説明したさまざまなユーザー定義型をパッケージのコンテキスト内に組み込んでいます。

パッケージ仕様 emp_rpt レコード型の宣言を示し emprec_typ 、弱く型付けされた REF CURSOR emp_refcur などの公的にアクセス可能な二つの機能と二つの手順と一緒に、。この関数は、 open_emp_by_dept 、返し REF CURSOR 、タイプを EMP_REFCUR 。手続き、 fetch_emp 、および close_refcur は両方とも、弱い型の REF CURSOR を仮パラメータとして 宣言し ます。

CREATE OR REPLACE PACKAGE emp_rpt

IS

    TYPE emprec_typ IS RECORD (

        empno       NUMBER(4),

        ename       VARCHAR(10)

    );

    TYPE emp_refcur IS REF CURSOR;

 

    FUNCTION get_dept_name (

        p_deptno    IN NUMBER

    ) RETURN VARCHAR2;

    FUNCTION open_emp_by_dept (

        p_deptno    IN emp.deptno%TYPE

    ) RETURN EMP_REFCUR;

    PROCEDURE fetch_emp (

        p_refcur    IN OUT SYS_REFCURSOR

    );

    PROCEDURE close_refcur (

        p_refcur    IN OUT SYS_REFCURSOR

    );

END emp_rpt;

静的カーソル、 -パッケージ本体は、いくつかのプライベート変数の宣言を示し dept_cur 、テーブル型、 depttab_typ 、テーブル変数、 t_dept 、整数変数、 t_dept_max 、およびレコード変数、 r_emp

CREATE OR REPLACE PACKAGE BODY emp_rpt

IS

    CURSOR dept_cur IS SELECT * FROM dept;

    TYPE depttab_typ IS TABLE of dept%ROWTYPE

        INDEX BY BINARY_INTEGER;

    t_dept          DEPTTAB_TYP;

    t_dept_max      INTEGER := 1;

    r_emp           EMPREC_TYP;

 

    FUNCTION get_dept_name (

        p_deptno    IN NUMBER

    ) RETURN VARCHAR2

    IS

    BEGIN

        FOR i IN 1..t_dept_max LOOP

            IF p_deptno = t_dept(i).deptno THEN

                RETURN t_dept(i).dname;

            END IF;

        END LOOP;

        RETURN 'Unknown';

    END;

 

    FUNCTION open_emp_by_dept(

        p_deptno    IN emp.deptno%TYPE

    ) RETURN EMP_REFCUR

    IS

        emp_by_dept EMP_REFCUR;

    BEGIN

        OPEN emp_by_dept FOR SELECT empno, ename FROM emp

            WHERE deptno = p_deptno;

        RETURN emp_by_dept;

    END;

 

    PROCEDURE fetch_emp (

        p_refcur    IN OUT SYS_REFCURSOR

    )

    IS

    BEGIN

        DBMS_OUTPUT.PUT_LINE('EMPNO    ENAME');

        DBMS_OUTPUT.PUT_LINE('-----    -------');

        LOOP

            FETCH p_refcur INTO r_emp;

            EXIT WHEN p_refcur%NOTFOUND;

            DBMS_OUTPUT.PUT_LINE(r_emp.empno || '     ' || r_emp.ename);

        END LOOP;

    END;

 

    PROCEDURE close_refcur (

        p_refcur    IN OUT SYS_REFCURSOR

    )

    IS

    BEGIN

        CLOSE p_refcur;

    END;

BEGIN

    OPEN dept_cur;

    LOOP

        FETCH dept_cur INTO t_dept(t_dept_max);

        EXIT WHEN dept_cur%NOTFOUND;

        t_dept_max := t_dept_max + 1;

    END LOOP;

    CLOSE dept_cur;

    t_dept_max := t_dept_max - 1;

END emp_rpt;

このパッケージには、プライベートテーブル変数、ロード初期化セクションが含ま t_dept 、プライベート静的カーソルを使用して、 dept_cur t_dept は、関数 get_dept_name 部門名ルックアップテーブルとして機能します

関数 open_emp_by_dept 、与えられた部署の従業員番号と名前の結果セットの REF CURSOR 変数を 返します 。この REF CURSOR 変数 は、結果セットの個々の行を検索してリストするために、 プロシージャ fetch_emp 渡すことができ REF CURSOR 。最後に、プロシージャ close_refcur 使用して 、この結果セットに関連付けられ REF CURSOR 変数 をクローズ REF CURSOR ます。

次の無名ブロックは、パッケージの関数とプロシージャを実行します。無名ブロックの宣言セクションでは、カーソル変数の宣言に注意 v_emp_cur パッケージの公開使用して、 REF CURSOR タイプ、 EMP_REFCUR v_emp_cur は、パッケージ関数とプロシージャの間で渡される結果セットへのポインタが含まれます。

DECLARE

    v_deptno        dept.deptno%TYPE DEFAULT 30;

    v_emp_cur       emp_rpt.EMP_REFCUR;

BEGIN

    v_emp_cur := emp_rpt.open_emp_by_dept(v_deptno);

    DBMS_OUTPUT.PUT_LINE('EMPLOYEES IN DEPT #' || v_deptno ||

        ': ' || emp_rpt.get_dept_name(v_deptno));

    emp_rpt.fetch_emp(v_emp_cur);

    DBMS_OUTPUT.PUT_LINE('**********************');

    DBMS_OUTPUT.PUT_LINE(v_emp_cur%ROWCOUNT || ' rows were retrieved');

    emp_rpt.close_refcur(v_emp_cur);

END;

以下は、この無名ブロックの結果です。

EMPLOYEES IN DEPT #30: SALES

EMPNO    ENAME

-----    -------

7499     ALLEN

7521     WARD

7654     MARTIN

7698     BLAKE

7844     TURNER

7900     JAMES

**********************

6 rows were retrieved

次の無名ブロックは、同じ結果を達成するための別の手段を示しています。 fetch_emp および close_refcur というパッケージプロシージャを使用する代わりに 、これらのプログラムのロジックは、無名ブロックに直接コーディングされます。匿名ブロックの宣言セクションで 、パッケージのパブリック・レコード・タイプ EMPREC_TYP を使用して宣言された レコード変数 r_emp 追加に注意してください

DECLARE

    v_deptno        dept.deptno%TYPE DEFAULT 30;

    v_emp_cur       emp_rpt.EMP_REFCUR;

    r_emp           emp_rpt.EMPREC_TYP;

BEGIN

    v_emp_cur := emp_rpt.open_emp_by_dept(v_deptno);

    DBMS_OUTPUT.PUT_LINE('EMPLOYEES IN DEPT #' || v_deptno ||

        ': ' || emp_rpt.get_dept_name(v_deptno));

    DBMS_OUTPUT.PUT_LINE('EMPNO    ENAME');

    DBMS_OUTPUT.PUT_LINE('-----    -------');

    LOOP

        FETCH v_emp_cur INTO r_emp;

        EXIT WHEN v_emp_cur%NOTFOUND;

        DBMS_OUTPUT.PUT_LINE(r_emp.empno || '     ' ||

            r_emp.ename);

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('**********************');

    DBMS_OUTPUT.PUT_LINE(v_emp_cur%ROWCOUNT || ' rows were retrieved');

    CLOSE v_emp_cur;

END;

以下は、この無名ブロックの結果です。

EMPLOYEES IN DEPT #30: SALES

EMPNO    ENAME

-----    -------

7499     ALLEN

7521     WARD

7654     MARTIN

7698     BLAKE

7844     TURNER

7900     JAMES

**********************

6 rows were retrieved

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.5      パッケージを削除する

パッケージ全体またはパッケージ本体のみを削除する構文は次のとおりです。

DROP PACKAGE [ BODY ] package_name ;

キーワード BODY を省略すると、パッケージ仕様とパッケージ本体の両方が削除されます。つまり、パッケージ全体が削除されます。キーワード BODY が指定されている 場合は 、パッケージ本体のみが削除されます。パッケージの仕様は変更されません。 package_name は、削除するパッケージの識別子です。

次の文は、 emp_admin のパッケージ本体のみを破壊します

DROP PACKAGE BODY emp_admin;

次の文は、 emp_admin パッケージ 全体を emp_admin ます。

DROP PACKAGE emp_admin;

3      組み込みパッケージ

この章では、 Advanced Serverで提供される組み込みパッケージについて説明します 。特定のパッケージで は、パッケージの機能またはプロシージャーを使用する前に 、非スーパーユーザーに明示的に EXECUTE 特権を与える 必要があり ます。ほとんどの組み込みパッケージでは、 デフォルトで PUBLIC EXECUTE 特権が付与さ れています。

使用方法については GRANT パッケージへのアクセスを提供するためのコマンドを、で入手可能なOracleの開発者リファレンスガイドためのデータベースの互換性を参照してください。

http://www.enterprisedb.com/products-services-training/products/documentation

すべての組み込みパッケージは 、組み込みパッケージの特権を付与または取り消すときに指定する必要がある 特別な sys ユーザー が所有 します。

GRANT EXECUTE ON PACKAGE SYS.UTL_FILE TO john;

 

 

3.1      DBMS_ALERT

DBMS_ALERT パッケージには、登録のために送信し、アラートを受信する機能を提供します。次の表に、サポートされている手順を示します。

Function/Procedure

Return Type

Description

REGISTER( 名前 )

該当なし

名前 、名前のアラートを受信できるように登録します

REMOVE( 名前 )

該当なし

名前、 名前 のアラートの登録を削除し ます。

REMOVEALL

該当なし

すべてのアラートの登録を削除します。

SIGNAL( 名前 , メッセージ )

該当なし

メッセージ で、 名前 、名前のアラートを通知し ます。

WAITANY( 名前の OUT, メッセージの OUT, ステータスの OUT, タイムアウト )

該当なし

登録されたアラートが発生するまで待ちます。

WAITONE( 名前 , メッセージ OUT, ステータス OUT, タイムアウト )

該当なし

指定されたアラート、 名前 が発生するのを 待ち ます。

高度なサーバーの実装 11.0pt '> DBMS_ALERT は、Oracleのバージョンと比較した場合の部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。

Advanced Serverでは最大 500 同時アラート が許可されます dbms_alert. max _alerts を使用できます dbms_alert. max _alerts (にあるGUC変数 postgresql conf システム上で許可される同時アラートの最大数を指定したファイルを)。

dbms_alert.max_alerts変数の値を設定するには、 postgresql 開き ます。 conf ファイル(デフォルトでは /opt/PostgresPlus/10AS/data )を選択し、 dbms_alert.max_alerts パラメータを次のように 編集し ます。

dbms_alert.max_alerts = alert _ count

alert_count

alert_count は同時アラートの最大数を指定します。デフォルトでは、 dbms_alert.max_alerts の値 100 です。この機能を無効にするには、 dbms_alert.max_alerts 0 に設定 0

dbms_alert.max_alerts GUCが正しく機能するには、 custom_variable_classes パラメータが含まれている必要があり dbms_alerts

custom_variable_classes = 'dbms_alert, …'

postgresql 編集した後 conf ファイルのパラメータを変更するには、変更を有効にするためにサーバを再起動する必要があります。

3.1.1    REGISTER

REGISTER 手順では、指定したアラートが通知される現在のセッションを可能にします。

REGISTER( name VARCHAR2)

パラメーター

name

登録するアラートの名前。

次の無名ブロックは、 alert_test という名前のアラートを登録し 、その後信号を待機します。

DECLARE

    v_name           VARCHAR2(30) := 'alert_test';

    v_msg            VARCHAR2(80);

    v_status         INTEGER;

    v_timeout        NUMBER(3) := 120;

BEGIN

    DBMS_ALERT.REGISTER(v_name);

    DBMS_OUTPUT.PUT_LINE('Registered for alert ' || v_name);

    DBMS_OUTPUT.PUT_LINE('Waiting for signal...');

    DBMS_ALERT.WAITONE(v_name,v_msg,v_status,v_timeout);

    DBMS_OUTPUT.PUT_LINE('Alert name   : ' || v_name);

    DBMS_OUTPUT.PUT_LINE('Alert msg    : ' || v_msg);

    DBMS_OUTPUT.PUT_LINE('Alert status : ' || v_status);

    DBMS_OUTPUT.PUT_LINE('Alert timeout: ' || v_timeout || ' seconds');

    DBMS_ALERT.REMOVE(v_name);

END;

 

Registered for alert alert_test

Waiting for signal...

 

3.1.2    REMOVE

REMOVE 手順は、指定されたアラートのセッションの登録を解除します。

REMOVE( name VARCHAR2)

パラメーター

name

登録を解除するア​​ラートの名前。

 

3.1.3    REMOVEALL

REMOVEALL 手順は、すべてのアラートのセッションの登録を解除します。

REMOVEALL

 

3.1.4    SIGNAL

SIGNAL 手順は、名前を設定したアラートの発生を知らせます。

SIGNAL( name VARCHAR2, message VARCHAR2)

パラメーター

name

アラートの名前。

message

このアラートで渡す情報。

次の無名ブロックは、 alert_test アラートを通知し alert_test

DECLARE

    v_name   VARCHAR2(30) := 'alert_test';

BEGIN

    DBMS_ALERT.SIGNAL(v_name,'This is the message from ' || v_name);

    DBMS_OUTPUT.PUT_LINE('Issued alert for ' || v_name);

END;

 

Issued alert for alert_test

3.1.5    WAITANY

WAITANY 登録されたアラートのいずれかが発生するための手順を待ちます。

WAITANY( name OUT VARCHAR2, message OUT VARCHAR2,

  status OUT INTEGER, timeout NUMBER)

パラメーター

name

アラートの名前を受け取る変数。

message

SIGNAL プロシージャ によって送信されたメッセージを受信する変数

status

操作によって返されるステータスコード。可能な値は次のとおりです。0 - アラートが発生しました。 1 - タイムアウトが発生しました。

timeout

数秒でアラートを待つ時間。

次の匿名ブロックは、 WAITANY プロシージャを 使用して alert_test または any_alert という名前のアラートを受信します

DECLARE

    v_name           VARCHAR2(30);

    v_msg            VARCHAR2(80);

    v_status         INTEGER;

    v_timeout        NUMBER(3) := 120;

BEGIN

    DBMS_ALERT.REGISTER('alert_test');

    DBMS_ALERT.REGISTER('any_alert');

    DBMS_OUTPUT.PUT_LINE('Registered for alert alert_test and any_alert');

    DBMS_OUTPUT.PUT_LINE('Waiting for signal...');

    DBMS_ALERT.WAITANY(v_name,v_msg,v_status,v_timeout);

    DBMS_OUTPUT.PUT_LINE('Alert name   : ' || v_name);

    DBMS_OUTPUT.PUT_LINE('Alert msg    : ' || v_msg);

    DBMS_OUTPUT.PUT_LINE('Alert status : ' || v_status);

    DBMS_OUTPUT.PUT_LINE('Alert timeout: ' || v_timeout || ' seconds');

    DBMS_ALERT.REMOVEALL;

END;

 

Registered for alert alert_test and any_alert

Waiting for signal...

第2セッションの無名ブロックは、 any_alert シグナルを any_alert ます。

DECLARE

    v_name   VARCHAR2(30) := 'any_alert';

BEGIN

    DBMS_ALERT.SIGNAL(v_name,'This is the message from ' || v_name);

    DBMS_OUTPUT.PUT_LINE('Issued alert for ' || v_name);

END;

 

Issued alert for any_alert

制御は最初の無名ブロックに戻り、残りのコードが実行されます。

Registered for alert alert_test and any_alert

Waiting for signal...

Alert name   : any_alert

Alert msg    : This is the message from any_alert

Alert status : 0

Alert timeout: 120 seconds

 

3.1.6    WAITONE

WAITONE 指定登録アラートが発生するための手順を待ちます。

WAITONE( name VARCHAR2, message OUT VARCHAR2,

  status OUT INTEGER, timeout NUMBER)

パラメーター

name

アラートの名前。

message

SIGNAL プロシージャ によって送信されたメッセージを受信する変数

status

操作によって返されるステータスコード。可能な値は次のとおりです。0 - アラートが発生しました。 1 - タイムアウトが発生しました。

timeout

数秒でアラートを待つ時間。

次の匿名ブロックは WAITONE プロシージャを使用して alert_test という名前のアラートを受信する 点を除いて WAITANY 例で 使用したものと同様 alert_test

DECLARE

    v_name           VARCHAR2(30) := 'alert_test';

    v_msg            VARCHAR2(80);

    v_status         INTEGER;

    v_timeout        NUMBER(3) := 120;

BEGIN

    DBMS_ALERT.REGISTER(v_name);

    DBMS_OUTPUT.PUT_LINE('Registered for alert ' || v_name);

    DBMS_OUTPUT.PUT_LINE('Waiting for signal...');

    DBMS_ALERT.WAITONE(v_name,v_msg,v_status,v_timeout);

    DBMS_OUTPUT.PUT_LINE('Alert name   : ' || v_name);

    DBMS_OUTPUT.PUT_LINE('Alert msg    : ' || v_msg);

    DBMS_OUTPUT.PUT_LINE('Alert status : ' || v_status);

    DBMS_OUTPUT.PUT_LINE('Alert timeout: ' || v_timeout || ' seconds');

    DBMS_ALERT.REMOVE(v_name);

END;

 

Registered for alert alert_test

Waiting for signal...

第2のセッションで匿名ブロックによって送信された alert_test ために送信された 信号

DECLARE

    v_name   VARCHAR2(30) := 'alert_test';

BEGIN

    DBMS_ALERT.SIGNAL(v_name,'This is the message from ' || v_name);

    DBMS_OUTPUT.PUT_LINE('Issued alert for ' || v_name);

END;

 

Issued alert for alert_test

最初のセッションが警告され、制御が無名ブロックに戻り、残りのコードが実行されます。

Registered for alert alert_test

Waiting for signal...

Alert name   : alert_test

Alert msg    : This is the message from alert_test

Alert status : 0

Alert timeout: 120 seconds

 

3.1.7    Comprehensive Example

次の例では、 dept テーブルまたは emp テーブルが変更され ときに、2つのトリガを使用してアラートを送信します 。無名ブロックは、これらのアラートをリッスンし、アラートを受信したときにメッセージを表示します。

以下は、 style = 'font-size:11.0pt'> dept テーブル emp テーブル:

CREATE OR REPLACE TRIGGER dept_alert_trig

    AFTER INSERT OR UPDATE OR DELETE ON dept

DECLARE

    v_action        VARCHAR2(25);

BEGIN

    IF INSERTING THEN

        v_action := ' added department(s) ';

    ELSIF UPDATING THEN

        v_action := ' updated department(s) ';

    ELSIF DELETING THEN

        v_action := ' deleted department(s) ';

    END IF;

    DBMS_ALERT.SIGNAL('dept_alert',USER || v_action || 'on ' ||

        SYSDATE);

END;

 

CREATE OR REPLACE TRIGGER emp_alert_trig

    AFTER INSERT OR UPDATE OR DELETE ON emp

DECLARE

    v_action        VARCHAR2(25);

BEGIN

    IF INSERTING THEN

        v_action := ' added employee(s) ';

    ELSIF UPDATING THEN

        v_action := ' updated employee(s) ';

    ELSIF DELETING THEN

        v_action := ' deleted employee(s) ';

    END IF;

    DBMS_ALERT.SIGNAL('emp_alert',USER || v_action || 'on ' ||

        SYSDATE);

END;

次の無名ブロックはセッションで実行され、 dept テーブル emp テーブルの 更新 は他のセッションで 実行され ます。

DECLARE

    v_dept_alert     VARCHAR2(30) := 'dept_alert';

    v_emp_alert      VARCHAR2(30) := 'emp_alert';

    v_name           VARCHAR2(30);

    v_msg            VARCHAR2(80);

    v_status         INTEGER;

    v_timeout        NUMBER(3) := 60;

BEGIN

    DBMS_ALERT.REGISTER(v_dept_alert);

    DBMS_ALERT.REGISTER(v_emp_alert);

    DBMS_OUTPUT.PUT_LINE('Registered for alerts dept_alert and emp_alert');

    DBMS_OUTPUT.PUT_LINE('Waiting for signal...');

    LOOP

        DBMS_ALERT.WAITANY(v_name,v_msg,v_status,v_timeout);

        EXIT WHEN v_status != 0;

        DBMS_OUTPUT.PUT_LINE('Alert name   : ' || v_name);

        DBMS_OUTPUT.PUT_LINE('Alert msg    : ' || v_msg);

        DBMS_OUTPUT.PUT_LINE('Alert status : ' || v_status);

        DBMS_OUTPUT.PUT_LINE('------------------------------------' ||

            '-------------------------');

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('Alert status : ' || v_status);

    DBMS_ALERT.REMOVEALL;

END;

 

Registered for alerts dept_alert and emp_alert

Waiting for signal...

次の変更は、ユーザーmaryによって行われます。

INSERT INTO dept VALUES (50,'FINANCE','CHICAGO');

INSERT INTO emp (empno,ename,deptno) VALUES (9001,'JONES',50);

INSERT INTO emp (empno,ename,deptno) VALUES (9002,'ALICE',50);

次の変更は、ユーザーjohnによって行われます。

INSERT INTO dept VALUES (60,'HR','LOS ANGELES');

以下は、トリガーからの信号を受信する無名ブロックによって表示される出力です。

Registered for alerts dept_alert and emp_alert

Waiting for signal...

Alert name   : dept_alert

Alert msg    : mary added department(s) on 25-OCT-07 16:41:01

Alert status : 0

-------------------------------------------------------------

Alert name   : emp_alert

Alert msg    : mary added employee(s) on 25-OCT-07 16:41:02

Alert status : 0

-------------------------------------------------------------

Alert name   : dept_alert

Alert msg    : john added department(s) on 25-OCT-07 16:41:22

Alert status : 0

-------------------------------------------------------------

Alert status : 1

 

 

3.2      DBMS_A Q

EDB Postgres Advanced Serverアドバンストキューイングは、Advanced Serverデータベースのメッセージキューイングとメッセージ処理を提供します。ユーザー定義のメッセージはキューに格納されます。キューの集合がキュー表に格納されます。 DBMS_AQADMパッケージのプロシージャは、メッセージ・キューとキュー表を作成および管理します。 DBMS_AQパッケージを使用して、メッセージをキューに追加したり、キューからメッセージを削除したり、PL / SQLコールバック・プロシージャを登録または登録解除したりできます。

Advanced Serverは、SQLコマンドを使用してDBMS_AQパッケージの拡張(非互換)機能も提供します。次のSQLコマンドの詳細は、 「Oracle Developer Reference Guide」の「Database Compatibility 」を参照してください。

      ALTER QUEUE

      ALTER QUEUE TABLE

      CREATE QUEUE

      CREATE QUEUE TABLE

      DROP QUEUE

      DROP QUEUE TABLE

DBMS_AQ パッケージには、メッセージのエンキュー、メッセージのデキュー、およびコールバックプロシージャの管理を可能にするプロシージャが用意されています。サポートされている手順は次のとおりです。

Function/Procedure

Return Type

Description

ENQUEUE

該当なし

キューにメッセージを投稿します。

DEQUEUE

該当なし

メッセージが利用可能であれば、キューからメッセージを取得する。

REGISTER

該当なし

コールバックプロシージャを登録します。

UNREGISTER

該当なし

コールバックプロシージャの登録を解除します。

Advanced ServerのDBMS_AQの実装 Oracleのバージョンと比較した場合の部分実装です。上記の表に記載されている手順のみがサポートされています。

Advanced Serverでは、以下に示す定数の使用がサポートされています。

Constant

Description

For Parameters

DBMS_AQ.BROWSE (0)

ロックせずにメッセージを読む。

dequeue_options_t.dequeue_mode

DBMS_AQ.LOCKED (1)

この定数は定義されていますが、使用するとエラーが返されます。

dequeue_options_t.dequeue_mode

DBMS_AQ.REMOVE (2)

読んだら、メッセージを削除してください。デフォルト。

dequeue_options_t.dequeue_mode

DBMS_AQ.REMOVE_NODATA (3)

この定数は定義されていますが、使用するとエラーが返されます。

dequeue_options_t.dequeue_mode

DBMS_AQ.FIRST_MESSAGE (0)

検索用語に一致する最初に利用可能なメッセージを返します。

dequeue_options_t.navigation

DBMS_AQ.NEXT_MESSAGE (1)

検索用語に一致する次の利用可能なメッセージを返します。

dequeue_options_t.navigation

DBMS_AQ.NEXT_TRANSACTION (2)

この定数は定義されていますが、使用するとエラーが返されます。

dequeue_options_t.navigation

DBMS_AQ.FOREVER (0)

検索用語に一致するメッセージが見つからない場合は、デフォルトであることを永遠に待ちます。

dequeue_options_t.wait

DBMS_AQ.NO_WAIT (1)

検索語句と一致するメッセージが見つからない場合は待たないでください。

dequeue_options_t.wait

DBMS_AQ.ON_COMMIT (0)

デキューは、現在のトランザクションの一部です。

enqueue_options_t.visibility, dequeue_options_t.visibility

DBMS_AQ.IMMEDIATE (1)

この定数は定義されていますが、使用するとエラーが返されます。

enqueue_options_t.visibility, dequeue_options_t.visibility

DBMS_AQ.PERSISTENT (0)

メッセージはテーブルに格納する必要があります。

enqueue_options_t.delivery_mode

DBMS_AQ.BUFFERED (1)

この定数は定義されていますが、使用するとエラーが返されます。

enqueue_options_t.delivery_mode

DBMS_AQ.READY (0)

メッセージを処理できる状態にすることを指定します。

message_properties_t.state

DBMS_AQ.WAITING (1)

メッセージが処理を待っていることを指定します。

message_properties_t.state

DBMS_AQ.PROCESSED (2)

メッセージが処理されたことを示します。

message_properties_t.state

DBMS_AQ.EXPIRED (3)

メッセージが例外キューにあることを指定します。

message_properties_t.state

DBMS_AQ.NO_DELAY (0)

この定数は定義されていますが、使用されるとエラーが返されます

message_properties_t.delay

DBMS_AQ.NEVER (NULL)

この定数は定義されていますが、使用されるとエラーが返されます

message_properties_t.expiration

DBMS_AQ.NAMESPACE_AQ (0)

DBMS_AQキューからの通知を受け入れます。

sys.aq$_reg_info.namespace

DBMS_AQ.NAMESPACE_ANONYMOUS (1)

この定数は定義されていますが、使用されるとエラーが返されます

sys.aq$_reg_info.namespace

 

3.2.1    ENQUEUE

ENQUEUE プロシージャは、キューにエントリを追加します。署名は次のとおりです。

ENQUEUE(
キュー _ IN VARCHAR2、
エンキュー _ オプション IN DBMS_AQ.ENQUEUE_OPTIONS_T、
メッセージ _ プロパティ IN DBMS_AQ.MESSAGE_PROPERTIES_T、
ペイロード IN < タイプ _ 名前 >、
msgid " RAW")

パラメーター

queue_name

既存のキューの名前(スキーマ修飾名も可)スキーマ名を省略すると、サーバーは SEARCH _ PATH 指定されたスキーマを使用します 。 Oracleとは異なり、引用符で囲まれていない識別子は格納する前に小文字に変換されます。特殊文字を含めるか、大文字小文字を区別する名前を使用するには、名前を二重引用符で囲みます。

キューの作成の詳細については、 DBMS _ AQADM を参照してください CREATE _ QUEUE

enqueue _ options

enqueue _ options は型の値です、 enqueue _ options _ t

DBMS_AQ.ENQUEUE_OPTIONS_T IS RECORD(
visibility BINARY_INTEGER DEFAULT ON_COMMIT,
relative_msgid RAW(16) DEFAULT NULL,
sequence_deviation BINARY INTEGER DEFAULT NULL,
transformation VARCHAR2(61) DEFAULT NULL,
delivery_mode PLS_INTEGER NOT NULL DEFAULT PERSISTENT);

現在、 enqueue _ options_t サポートされている唯一のパラメータ値 は次の options_t です。

visibility

ON_COMMIT.

delivery_mode

PERSISTENT

sequence_deviation

NULL

transformation

NULL

relative_msgid

NULL

message_properties

message_properties タイプの値で、 message _ properties _ t:

message_properties_t IS RECORD(
priority BINARY_INTEGER NOT NULL DEFAULT 1
delay BINARY_INTEGER NOT NULL DEFAULT NO_DELAY,
expiration BINARY_INTEGER NOT NULL DEFAULT NEVER,
correlation VARCHAR2(128) DEFAULT NULL,
attempts BINARY_INTEGER
recipient_list AQ$_RECIPIENT_LIST_T,
exception_queue VARCHAR2(61) DEFAULT NULL,
enqueue_time DATE,
state BINARY_INTEGER,
sender_id SYS.AQ$_AGENT DEFAULT NULL,
original_msgid RAW(16) DEFAULT NULL,
signature aq$_sig_prop DEFAULT NULL,
transaction_group VARCHAR2(30) DEFAULT NULL,
user_property SYS.ANYDATA DEFAULT NULL,
delivery_mode PLS_INTEGER NOT NULL DEFAULT DBMS_AQ.PERSISTENT);

でサポートされる値 message _ properties_t 、次のとおりです。

priority

キュー表定義に priority を参照 する sort _ list 含まれている場合 、このパラメーターはメッセージがデキューされる順序に影響します。値が小さいほどデキュー優先度が高いことを示します。

delay

デキューまたは NO _ DELAY メッセージが使用可能になるまでに経過する秒数を指定します

expiration

メッセージが期限切れになるまでの秒数を指定するには、expirationパラメーターを使用します。

correlation

相関を使用して、エントリに関連付けられるメッセージを指定します。デフォルトは NULL です。

attempts

これは、メッセージをデキューする試行回数を指定するシステム管理の値です。

recipient_list

このパラメータはサポートされていません。

exception_queue

メッセージが期限切れになった場合に移動される例外キューの名前を指定するには exception _ queue パラメータを使用します。または、何度もロールバックするトランザクションによってデキューされます。

enqueue_time

enqueue _ time は、レコードがキューに追加された時刻です。この値はシステムによって提供されます。

state

このパラメータは DBMS _ AQ によって維持され ます。状態は次のとおりです。
DBMS _ AQ WAITING - 遅延に達していません。
DBMS _ AQ READY - キュー項目は処理可能です。
DBMS _ AQ PROCESSED - キューエントリが処理されました。
DBMS _ AQ EXPIRED - キュー項目が例外キューに移動されました。

sender_id

このパラメータはサポートされていません。 NULL 値を指定し NULL

original_msgid

このパラメータは互換性のために受け入れられ、無視されます。

signature

このパラメータはサポートされていません。 NULL 値を指定し NULL

transaction_group

このパラメータは互換性のために受け入れられ、無視されます。

user_property

このパラメータはサポートされていません。 NULL 値を指定し NULL

delivery_mode

このパラメータはサポートされていません。 DBMS _ AQ 値を指定します PERSISTENT

payload

payload パラメータを 使用 して、キュー・エントリに関連付けられるデータを指定します。ペイロードタイプは、対応するキュー・テーブルを作成する際に指定された型と一致しなければならない(参照 DBMS _ AQADM CREATE _ QUEUE _ TABLE )。

msgid

固有の(システム生成の)メッセージIDを取得 するには、 msgid パラメータを 使用 します。

次の無名ブロックは DBMS _ AQ 呼び出します ENQUEUE work _ order という名前のキューにメッセージを追加 order

DECLARE

 

  enqueue_options    DBMS_AQ.ENQUEUE_OPTIONS_T;

  message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;

  message_handle     raw(16);

  payload            work_order;

 

BEGIN

 

  payload := work_order('Smith', 'system upgrade');

 

DBMS_AQ.ENQUEUE(

  queue_name         => 'work_order',

  enqueue_options    => enqueue_options,

  message_properties => message_properties,

  payload            => payload,

  msgid              => message_handle

    );

 END;

 

3.2.2    DEQUEUE

DEQUEUE 手順は、メッセージをデキューします。署名は次のとおりです。

DEQUEUE(
queue _ name IN VARCHAR2,

dequeue_ options IN DBMS_AQ.DEQUEUE_OPTIONS_T,
message _ properties OUT DBMS_AQ.MESSAGE_PROPERTIES_T,
payload OUT type _ name ,
msgid OUT RAW)

パラメーター

queue_name

既存のキューの名前(スキーマ修飾名も可)スキーマ名を省略すると、サーバーは SEARCH _ PATH 指定されたスキーマを使用します 。 Oracleとは異なり、引用符で囲まれていない識別子は格納する前に小文字に変換されます。特殊文字を含めるか、大文字小文字を区別する名前を使用するには、名前を二重引用符で囲みます。

キューの作成の詳細については、 DBMS _ AQADM を参照してください CREATE _ QUEUE

dequeue _ options

dequeue _ options は、タイプの値です dequeue _ options _ t

DEQUEUE_OPTIONS_T IS RECORD(
consumer_name VARCHAR2(30) DEFAULT NULL,
dequeue_mode BINARY_INTEGER DEFAULT REMOVE,
navigation BINARY_INTEGER DEFAULT NEXT_MESSAGE,
visibility BINARY_INTEGER DEFAULT ON_COMMIT,
wait BINARY_INTEGER DEFAULT FOREVER,
msgid RAW(16) DEFAULT NULL,
correlation VARCHAR2(128) DEFAULT NULL,
deq_condition VARCHAR2(4000) DEFAULT NULL,
signature aq$_sig_prop DEFAULT NULL,
transformation VARCHAR2(61) DEFAULT NULL,
delivery_mode PLS_INTEGER DEFAULT PERSISTENT)

現在、 dequeue _ options_t のサポートされているパラメータ値 は次の options_t です。

consumer_name

NULL. 必要があり NULL.

dequeue_mode

デキュー操作のロック動作。次のいずれかである必要があります。
DBMS _ AQ BROWSE - ロックを取得せずにメッセージを読み取ります。
DBMS _ AQ LOCKED - ロックを取得した後でメッセージを読み取ります。
DBMS _ AQ REMOVE - メッセージを削除する前にメッセージを読み取ります。
DBMS _ AQ REMOVE _ NODATA - メッセージを読むが、メッセージは削除しないでください。

navigation

取得されるメッセージを識別します。次のいずれかである必要があります。
FIRST_MESSAGE - 検索用語に一致するキュー内の最初のメッセージ。

NEXT_MESSAGE - 最初の用語に一致する次のメッセージ。

visibility

ON_COMMIT 必要があり ON_COMMIT - 現在のトランザクションをロールバックすると、デキューされたアイテムはキューに残ります。

wait

0より大きい数値である必要があります。

DBMS _ AQ FOREVER - 無期限に待ってください。
DBMS _ AQ NO _ WAIT - 待たないでください。

msgid

デキューされるメッセージのメッセージID。

correlation

互換性のために受け入れられ、無視されます。

deq_condition

VARCHAR2 に評価される式 BOOLEAN メッセージをデキューするかどうかを示す値。

signature

互換性のために受け入れられ、無視されます。

transformation

互換性のために受け入れられ、無視されます。

delivery_mode

PERSISTENT なければなりません 。バッファリングされたメッセージは現時点ではサポートされていません。

message_properties

message_properties タイプの値で、 message _ properties _ t:

message_properties_t IS RECORD(
priority BINARY_INTEGER NOT NULL DEFAULT 1
delay BINARY_INTEGER NOT NULL DEFAULT NO_DELAY,
expiration BINARY_INTEGER NOT NULL DEFAULT NEVER,
correlation VARCHAR2(128) DEFAULT NULL,
attempts BINARY_INTEGER
recipient_list AQ$_RECIPIENT_LIST_T,
exception_queue VARCHAR2(61) DEFAULT NULL,
enqueue_time DATE,
state BINARY_INTEGER,
sender_id SYS.AQ$_AGENT DEFAULT NULL,
original_msgid RAW(16) DEFAULT NULL,
signature aq$_sig_prop DEFAULT NULL,
transaction_group VARCHAR2(30) DEFAULT NULL,
user_property SYS.ANYDATA DEFAULT NULL,
delivery_mode PLS_INTEGER NOT NULL DEFAULT DBMS_AQ.PERSISTENT);

でサポートされる値 message _ properties_t 、次のとおりです。

priority

キュー表定義に priority を参照 する sort _ list 含まれている場合 、このパラメーターはメッセージがデキューされる順序に影響します。値が小さいほどデキュー優先度が高いことを示します。

delay

デキューまたは NO _ DELAY メッセージが使用可能になるまでに経過する秒数を指定します

expiration

メッセージが期限切れになるまでの秒数を指定するには、expirationパラメーターを使用します。

correlation

相関を使用して、エントリに関連付けられるメッセージを指定します。デフォルトは NULL です。

attempts

これは、メッセージをデキューする試行回数を指定するシステム管理の値です。

recipient_list

このパラメータはサポートされていません。

exception_queue

メッセージが期限切れになった場合に移動される例外キューの名前を指定するには exception _ queue パラメータを使用します。または、何度もロールバックするトランザクションによってデキューされます。

enqueue_time

enqueue _ time は、レコードがキューに追加された時刻です。この値はシステムによって提供されます。

state

このパラメータは DBMS _ AQ によって維持され ます。状態は次のとおりです。
DBMS _ AQ WAITING - 遅延に達していません。
DBMS _ AQ READY - キュー項目は処理可能です。
DBMS _ AQ PROCESSED - キューエントリが処理されました。
DBMS _ AQ EXPIRED - キュー項目が例外キューに移動されました。

sender_id

このパラメータはサポートされていません。 NULL 値を指定し NULL

original_msgid

このパラメータは互換性のために受け入れられ、無視されます。

signature

このパラメータはサポートされていません。 NULL 値を指定し NULL

transaction_group

このパラメータは互換性のために受け入れられ、無視されます。

user_property

このパラメータはサポートされていません。 NULL 値を指定し NULL

delivery_mode

このパラメータはサポートされていません。 DBMS _ AQ 値を指定します PERSISTENT

 

 

payload

使用 11.0pt '> payload パラメータを使用して、デキュー操作でメッセージのペイロードを取得します。ペイロードタイプは、キューテーブルの作成時に指定されたタイプと一致する必要があります。

msgid

一意のメッセージ識別子を取得 するには、 msgid パラメータを使用します。

次の無名ブロックは DBMS _ AQ 呼び出します キューとペイロードからメッセージを取得する DEQUEUE

DECLARE

 

  dequeue_options    DBMS_AQ.DEQUEUE_OPTIONS_T;

  message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;

  message_handle     raw(16);

  payload            work_order;

 

BEGIN

  dequeue_options.dequeue_mode := DBMS_AQ.BROWSE;

 

  DBMS_AQ.DEQUEUE(

    queue_name         => 'work_queue',

    dequeue_options    => dequeue_options,

    message_properties => message_properties,

    payload            => payload,

    msgid              => message_handle

  );

 

  DBMS_OUTPUT.PUT_LINE(

  'The next work order is [' || payload.subject || '].'

  );

END;

ペイロードは DBMS _ OUTPUT によって表示され ます。 PUT _ LINE

3.2.3    REGISTER

アイテムがエンキューまたはデキューされたときに通知される電子メールアドレス、プロシージャまたはURLを登録 するには、 REGISTER プロシージャを 使用し ます。署名は次のとおりです。

REGISTER(
reg _ list IN SYS.AQ$_REG_INFO_LIST,

count IN NUMBER)

 

パラメーター

reg_list

reg_list AQ $ _ REG _ INFO_LIST タイプのリスト です。登録する各サブスクリプションに関する情報を提供します。リスト内の各エントリはタイプのものです AQ$_REG_INFO 、および含まれる場合があり ます。

Attribute

Type

Description

name

VARCHAR2(128)

サブスクリプションの(オプションでスキーマ修飾された)名前。

namespace

数字

サポートされている値は DBMS_AQ.NAMESPACE_AQ (0) のみです

callback

VARCHAR2(4000)

通知時に実行されるアクションについて説明します。現在、PL / SQLプロシージャへのコールのみがサポートされています。呼び出しは次の形式になります。
plsql:// schema . procedure
場所:
schema は、プロシージャーが存在するスキーマを指定します。
procedure
は、通知されるプロシージャーの名前を指定します。

context

RAW(16)

コールバックプロシージャに必要なユーザー定義の値。

count

count 内のエントリ数である reg _ list

次の無名ブロックは DBMS _ AQ 呼び出します REGISTER :アイテムがキューに追加または削除されたときに通知されるプロシージャを登録します。 DECLARE セクションで 識別される各サブスクリプションに対して、 sys.aq$_reg_info タイプの) 一連の属性 が提供されます

DECLARE

   subscription1 sys.aq$_reg_info;

   subscription2 sys.aq$_reg_info;

   subscription3 sys.aq$_reg_info;

   subscriptionlist sys.aq$_reg_info_list;

BEGIN

   subscription1 := sys.aq$_reg_info('q', DBMS_AQ.NAMESPACE_AQ, 'plsql://assign_worker?PR=0',HEXTORAW('FFFF'));

   subscription2 := sys.aq$_reg_info('q', DBMS_AQ.NAMESPACE_AQ, 'plsql://add_to_history?PR=1',HEXTORAW('FFFF'));

   subscription3 := sys.aq$_reg_info('q', DBMS_AQ.NAMESPACE_AQ, 'plsql://reserve_parts?PR=2',HEXTORAW('FFFF'));

 

   subscriptionlist := sys.aq$_reg_info_list(subscription1, subscription2, subscription3);

   dbms_aq.register(subscriptionlist, 3);

   commit;

  END;

   /

 

subscriptionlist 型である sys.aq$_reg_info_list 、および前述の含まれてい sys.aq$_reg_info オブジェクトを。リスト名とオブジェクト数は dbms_aq.register 渡され dbms_aq.register

 

3.2.4    UNREGISTER

UNREGISTER プロシージャを 使用して、 エンキューおよびデキューに関する通知をオフにします。署名は次のとおりです。

UNREGISTER(
reg _ list IN SYS.AQ$_REG_INFO_LIST,

count IN NUMBER)

パラメーター

reg_list

reg_list AQ $ _ REG _ INFO_LIST タイプのリスト です。登録する各サブスクリプションに関する情報を提供します。リスト内の各エントリはタイプのものです AQ$_REG_INFO

Attribute

Type

Description

name

VARCHAR2(128)

サブスクリプションの(オプションでスキーマ修飾された)名前。

namespace

数字

サポートされている値は DBMS_AQ.NAMESPACE_AQ (0) のみです

callback

VARCHAR2(4000)

通知時に実行されるアクションについて説明します。現在、PL / SQLプロシージャへのコールのみがサポートされています。呼び出しは次の形式になります。
plsql:// schema . procedure
場所:
schema は、プロシージャーが存在するスキーマを指定します。
procedure
は、通知されるプロシージャーの名前を指定します。

context

RAW(16)

プロシージャーが必要とするユーザー定義の値。

count

count 内のエントリ数である reg _ list

 

次の無名ブロックは DBMS _ AQ 呼び出します UNREGISTER DBMS _ AQ 例で指定されている通知を無効にします REGISTER

DECLARE

   subscription1 sys.aq$_reg_info;

   subscription2 sys.aq$_reg_info;

   subscription3 sys.aq$_reg_info;

   subscriptionlist sys.aq$_reg_info_list;

BEGIN

   subscription1 := sys.aq$_reg_info('q', DBMS_AQ.NAMESPACE_AQ, 'plsql://assign_worker?PR=0',HEXTORAW('FFFF'));

   subscription2 := sys.aq$_reg_info('q', DBMS_AQ.NAMESPACE_AQ, 'plsql://add_to_history?PR=1',HEXTORAW('FFFF'));

   subscription3 := sys.aq$_reg_info('q', DBMS_AQ.NAMESPACE_AQ, 'plsql://reserve_parts?PR=2',HEXTORAW('FFFF'));

 

   subscriptionlist := sys.aq$_reg_info_list(subscription1, subscription2, subscription3);

   dbms_aq.unregister(subscriptionlist, 3);

   commit;

  END;

   /

 

subscriptionlist 型である sys.aq$_reg_info_list 、および前述の含まれてい sys.aq$_reg_info オブジェクトを。リスト名とオブジェクト数は、 dbms_aq.unregister 渡され dbms_aq.unregister

 

3.3      DBMS_AQADM

EDB Postgres Advanced Serverアドバンストキューイングは、Advanced Serverデータベースのメッセージキューイングとメッセージ処理を提供します。ユーザー定義のメッセージはキューに格納されます。キューの集合がキュー表に格納されます。 DBMS_AQADMパッケージのプロシージャは、メッセージ・キューとキュー表を作成および管理します。 DBMS_AQパッケージを使用して、メッセージをキューに追加したり、キューからメッセージを削除したり、PL / SQLコールバック・プロシージャを登録または登録解除したりできます。

Advanced Serverは、SQLコマンドを使用してDBMS_AQパッケージの拡張(非互換)機能も提供します。次のSQLコマンドの詳細は、 「Oracle Developer Reference Guide」の「Database Compatibility 」を参照してください。

      ALTER QUEUE

      ALTER QUEUE TABLE

      CREATE QUEUE

      CREATE QUEUE TABLE

      DROP QUEUE

      DROP QUEUE TABLE

DBMS_AQADMパッケージは、キューおよびキュー表の作成および管理を可能にするプロシージャを提供します。

Function/Procedure

Return Type

Description

ALTER_QUEUE

該当なし

既存のキューを変更します。

ALTER_QUEUE_TABLE

該当なし

既存のキュー表を変更します。

CREATE_QUEUE

該当なし

キューを作成します。

CREATE_QUEUE_TABLE

該当なし

キュー表を作成します。

DROP_QUEUE

該当なし

既存のキューを削除します。

DROP_QUEUE_TABLE

該当なし

既存のキューテーブルを削除します。

PURGE_QUEUE_TABLE

該当なし

キュー表から1つ以上のメッセージを除去する。

START_QUEUE

該当なし

エンキューおよびデキュー手続きにキューを使用できるようにする。

STOP_QUEUE

該当なし

エンキューおよびデキュー手続きにキューを使用不可にする

Advanced Serverの DBMS_AQADM の実装 は、Oracleのバージョンと比較して部分実装です。上記の表にリストされている機能とプロシージャのみがサポートされています。

 

 

Advanced Serverは、以下に示す引数の使用をサポートしています。

Constant

Description

For Parameters

DBMS_AQADM.TRANSACTIONAL(1)

この定数は定義されていますが、使用するとエラーが返されます。

message_grouping

DBMS_AQADM.NONE(0)

に使用 キュー表のメッセージ・グループを指定します。

message_grouping

DBMS_AQADM.NORMAL_QUEUE(0)

使用 create_queue 指定する queue_type

queue_type

DBMS_AQADM.EXCEPTION_QUEUE (1)

使用 create_queue 指定する queue_type

queue_type

DBMS_AQADM.INFINITE(-1)

使用 create_queue 指定する retention_time

retention_time

DBMS_AQADM.PERSISTENT (0)

メッセージはテーブルに格納する必要があります。

enqueue_options_t.delivery_mode

DBMS_AQADM.BUFFERED (1)

この定数は定義されていますが、使用するとエラーが返されます。

enqueue_options_t.delivery_mode

DBMS_AQADM.PERSISTENT_OR_BUFFERED (2)

この定数は定義されていますが、使用するとエラーが返されます。

enqueue_options_t.delivery_mode

 

3.3.1    ALTER_QUEUE

既存のキューを変更 するには、 ALTER_QUEUE プロシージャを 使用し ます。署名は次のとおりです。

ALTER_QUEUE(
max _ INET NUMBER DEFAULT NULL、
再試行 _ 遅延 IN NUMBER DEFAULT 0
保持 時間 IN NUMBER DEFAULT 0、
オート _ コミット BOOLEAN DEFAULT TRUE)
コメント IN VARCHAR2 DEFAULT NULL、

パラメーター

queue_name

新しいキューの名前。

max_retries

max _ retries デキュー文でメッセージを削除しようとする試みの最大数を指定します。値が max _ retries それぞれにインクリメントされ ROLLBACK 声明。失敗の数により指定された値に達したとき max _ retries 、メッセージは例外キューに移動されます。 再試行が許可されていないことを示す場合は 0 指定 します。

retry_delay

retry_delay は、メッセージが ROLLBACK 後に再処理されるまでの秒数を指定し ROLLBACK メッセージをすぐに再試行する必要があることを示すには、 0 指定 します(デフォルト)。

retention_time

retention_time は、メッセージがデキューされた後に格納される時間の長さ(秒単位)を指定します。 デキューした後にメッセージを保持しないことを示す場合は 0 (デフォルト) 、メッセージを永久に保持する 場合は INFINITE 指定することもできます

auto_commit

このパラメータは互換性のために受け入れられ、無視されます。

comment

comment は、キューに関連付けられた comment 指定します。

 

次のコマンドは、というキュー変更 work _ order 5秒にRETRY_DELAYパラメータを設定し、:

EXEC DBMS_AQADM.ALTER_QUEUE(queue_name => 'work_order', retry_delay => 5);

 

3.3.2    ALTER_QUEUE_TABLE

ALTER_QUEUE_TABLE 使用する 署名は次のとおりです。

ALTER_QUEUE_TABLE (
queue_table IN VARCHAR2,
comment IN VARCHAR2 DEFAULT NULL,
primary _ instance IN BINARY_INTEGER DEFAULT 0,
secondary _ instance IN BINARY_INTEGER DEFAULT 0,

パラメーター

queue_table

キュー表の(オプションでスキーマ修飾された)名前。

comment

キュー・テーブルについてのコメントを提供 するには、 comment パラメータを 使用し ます。

primary_instance

primary_instance は互換性のために受け入れられ、保存されますが、無視されます。

secondary_instance

secondary_instance は互換性のために受け入れられますが、無視されます。

次のコマンドは、 work_order_table という名前のキュー表を変更します

EXEC DBMS_AQADM.ALTER_QUEUE_TABLE

      (queue_table => 'work_order_table', comment => 'This queue table contains work orders for the shipping department.');

キュー表の名前は work _ order _ table です。このコマンドは、キュー表の定義にコメントを追加します。

 

3.3.3    CREATE_QUEUE

CREATE_QUEUE プロシージャを 使用 して、既存のキュー表にキューを作成します。署名は次のとおりです。

CREATE_QUEUE(
queue_name
IN VARCHAR2
queue_table IN VARCHAR2、
キュー _ タイプ IN BINARY_INTEGER DEFAULT NORMAL_QUEUE、
max_ retries IN NUMBER DEFAULT 5、
再試行 _ 遅延 IN NUMBER DEFAULT 0
保持 時間 IN NUMBER DEFAULT 0、
依存性 _ 追跡 BOOLEAN DEFAULT FALSE、
コメント IN VARCHAR2 DEFAULT NULL、
オート _ コミット BOOLEAN DEFAULT TRUE)

パラメーター

queue_name

新しいキューの名前。

 

queue_table

新しいキューが存在するテーブルの名前。

queue_type

新しいキューのタイプ。 queue _ type の有効な値 は次のとおりです。

DBMS_AQADM.NORMAL_QUEUE - この値は通常のキューを指定します(デフォルト)。

DBMS_AQADM.EXCEPTION_QUEUE - この値は、新しいキューが例外キューであることを指定します。例外キューは、デキュー操作のみをサポートします。

max_retries

max _ retries デキュー文でメッセージを削除しようとする試みの最大数を指定します。値が max _ retries それぞれにインクリメントされ ROLLBACK 声明。失敗の数により指定された値に達したとき max _ retries 、メッセージは例外キューに移動されます。システムテーブルのデフォルト値は0です。ユーザー作成表のデフォルト値は5です。

retry_delay

retry_delay は、メッセージが ROLLBACK 後に再処理されるまでの秒数を指定し ROLLBACK メッセージをすぐに再試行する必要があることを示すには、 0 指定 します(デフォルト)。

retention_time

retention_time は、メッセージがデキューされた後に格納される時間の長さ(秒単位)を指定します。 デキューした後にメッセージを保持しないことを示す場合は 0 (デフォルト) 、メッセージを永久に保持する 場合は INFINITE 指定することもできます

dependency_tracking

このパラメータは互換性のために受け入れられ、無視されます。

comment

comment は、キューに関連付けられた comment 指定します。

auto_commit

このパラメータは互換性のために受け入れられ、無視されます。

 

以下の匿名ブロックは、キューという名前の作成 work _ order work_order_table 表を:

BEGIN

DBMS_AQADM.CREATE_QUEUE ( queue_name => 'work_order', queue_table => 'work_order_table', comment => 'This queue contains pending work orders.');

END;

 

3.3.4    CREATE_QUEUE_TABLE

キュー表を作成 するには、 CREATE_QUEUE_TABLE プロシージャーを使用してください。署名は次のとおりです。

CREATE_QUEUE_TABLE (
queue_table IN VARCHAR2,
queue _ payload _ type IN VARCHAR2,
storage _ clause IN VARCHAR2 DEFAULT NULL,
sort _ list IN VARCHAR2 DEFAULT NULL,
multiple _ consumers IN BOOLEAN DEFAULT FALSE,
message _ grouping IN BINARY_INTEGER DEFAULT NONE,
comment IN VARCHAR2 DEFAULT NULL,
auto _ commit IN BOOLEAN DEFAULT TRUE,
primary _ instance IN BINARY_INTEGER DEFAULT 0,
secondary _ instance IN BINARY_INTEGER DEFAULT 0,
compatible IN VARCHAR2 DEFAULT NULL,
secure IN BOOLEAN DEFAULT FALSE)

パラメーター

queue_table

キュー表の(オプションでスキーマ修飾された)名前。

queue_payload_type

キュー表に保管されるデータのユーザー定義タイプ。指定することに注意してください RAW あなたが識別するユーザー定義型を作成しなければならない、データ型を RAW タイプを。

storage_clause

Use the storage _ clause parameter to specify attributes for the queue table. Please note that only the TABLESPACE option is enforced; all others are accepted for compatibility and ignored. Use the parameter to specify attributes for the queue table. Please note that only the option is enforced; all others are accepted for compatibility and ignored. Use the parameter to specify attributes for the queue table. Please note that only the option is enforced; all others are accepted for compatibility and ignored. Use the TABLESPACE clause to specify the name of a tablespace in which the table will be created. option is enforced; all others are accepted for compatibility and ignored. Use the clause to specify the name of a tablespace in which the table will be created.

storage _ clause may be one or more of the following:

TABLESPACE tablespace _ name , PCTFREE integer, PCTUSED integer , INITRANS integer , MAXTRANS integer or STORAGE storage _ option.

storage _ option may be one or more of the following:

MINEXTENTS integer , MAXEXTENTS integer , PCTINCREASE integer , INITIAL size _ clause , NEXT , FREELISTS integer , OPTIMAL size _ clause , BUFFER _ POOL { KEEP | RECYCLE | DEFAULT }.

sort_list

sort_list はキューのデキュー順序を制御します。キューをソートするために使用される列の名前を昇順で指定します。現在受け入れられている値は、次の組み合わせです enq _ time priority

enq_time, priority
priority, enq_time
priority
enq_time

multiple_consumers

指定する場合、 multiple_consumers FALSE なければなりません

message_grouping

指定する場合、 message_grouping NONE なければなりません

comment

キュー・テーブルについてのコメントを提供 するには、 comment パラメータを 使用し ます。

auto_commit

auto_commit は互換性のために受け入れられますが、無視されます。

primary_instance

primary_instance は互換性のために受け入れられ、保存されますが、無視されます。

secondary_instance

secondary_instance は互換性のために受け入れられますが、無視されます。

compatible

compatible は認められていますが、無視されます。

secure

secure は互換性の secure に受け入れられますが、無視されます。

 

次の無名ブロックは、最初に型を作成します( 名前( VARCHAR2 )とプロジェクト記述( TEXT を保持する属性を持つ LONG = EN-US style = 'font-size:11.0pt'> work _ order ブロックはそのタイプを使用してキューテーブルを作成します。

BEGIN

 

CREATE TYPE work_order AS (name VARCHAR2, project TEXT, completed BOOLEAN);

 

EXEC DBMS_AQADM.CREATE_QUEUE_TABLE

      (queue_table => 'work_order_table',

       queue_payload_type => 'work_order',

       comment => 'Work order message queue table');

END;

 

キュー表の名前は work _ order _ table 、およびタイプのペイロードが含ま work _ order 。コメントはこれが Work ことに注意します order message queue table

 

3.3.5    DROP_QUEUE

キューを削除 するには、 DROP_QUEUE プロシージャを使用します。署名は次のとおりです。

DROP_QUEUE(
キュー _ IN VARCHAR2、
オート _ コミット BOOLEAN DEFAULT TRUE)

パラメーター

queue_name

ドロップするキューの名前。

auto_commit

auto_commit は互換性のために受け入れられますが、無視されます。

以下の匿名ブロックは、キューという名前の低下 work _ order

BEGIN

DBMS_AQADM.DROP_QUEUE(queue_name => 'work_order');

END;

 

3.3.6    DROP_QUEUE_TABLE

キュー表を削除 するには、 DROP_QUEUE_TABLE プロシージャーを使用します。署名は次のとおりです。

DROP_QUEUE_TABLE(
キュー _ IN VARCHAR2、
BOOLEANデフォルトFALSEの
auto _ commit IN BOOLEANデフォルトTRUE)

パラメーター

queue_table

キュー表の(オプションでスキーマ修飾された)名前。

force

force キーワードは、のふるまいを決定 DROP _ QUEUE _ TABLE エントリを含むテーブルを削除するときのコマンドを:

ターゲット表に項目があり、forceが FALSE 、コマンドは失敗し、サーバーはエラーを出します。

ターゲットテーブルにエントリが含まれていて、forceが TRUE 場合、コマンドはテーブルと依存オブジェクトを削除します。

auto_commit

auto_commit は互換性のために受け入れられますが、無視されます。

次の無名ブロックは、 work _ order _ table という名前のテーブルを削除し table

BEGIN

   DBMS_AQADM.DROP_QUEUE_TABLE ('work_order_table', force => TRUE);

END;

3.3.7    PURGE_QUEUE_TABLE

キュー表からメッセージを削除 するには、 PURGE_QUEUE_TABLE プロシージャーを使用します。署名は次のとおりです。

PURGE_QUEUE_TABLE(
キュー _ IN VARCHAR2、
purge_condition IN VARCHAR2、
purge_options IN aq $ _purge_options_t)

パラメーター

queue_table

queue_table は、メッセージを削除するキューテーブルの名前を指定します。

purge_condition

使用 purge _ condition 条件(SQLを指定するために どのメッセージをパージすることを決定するときに、サーバーが評価するという条項を)。 WHERE

purge_options

purge_options aq$_purge_options_t 型のオブジェクトです aq$_purge_options_t オブジェクトが含まれています。

Attribute

Type

Description

block

ブール

テーブル内のすべてのキューで排他ロックを保持する必要がある場合は TRUE 指定 します。デフォルトは FALSE です。

delivery_mode

整数

delivery _ mode は、パージされるメッセージのタイプを指定します。唯一受け入れられる値は DBMS _ AQ です。 PERSISTENT

 

次の匿名ブロックは completed 列の YES work_order _ table からメッセージをすべて削除します

DECLARE

   purge_options dbms_aqadm.aq$_purge_options_t;

BEGIN

   dbms_aqadm.purge_queue_table('work_order_table', 'completed = YES', purge_options);

  END;

3.3.8    START_QUEUE

START_QUEUE プロシージャを 使用 して、キューをエンキューおよびデキュー可能にします。署名は次のとおりです。

START_QUEUE(
キュー _ IN VARCHAR2、
エンキュー IN BOOLEAN DEFAULT TRUE、
BOOLEAN DEFAULT TRUEのデキュー

パラメーター

queue_name

queue_name は、開始するキューの名前を指定します。

enqueue

エンキュー(デフォルト)を有効に する場合は TRUE 、現在の設定を変更しない FALSE 指定し FALSE

dequeue

デキュー(デフォルト)を有効に する場合は TRUE 、現在の設定を変更しない FALSE 指定し FALSE

以下の匿名ブロックは、指定されたキューになり work _ order エンキューのために利用可能に:

BEGIN

DBMS_AQADM.START_QUEUE

(queue_name => 'work_order);

END;

 

3.3.9    STOP_QUEUE

使用 STOP_QUEUE エンキューまたは指定したキューにデキュー無効にする手順を。署名は次のとおりです。

STOP_QUEUE(
キュー _ IN VARCHAR2、
エンキュー IN BOOLEAN DEFAULT TRUE、
デブイ IN BOOLEAN DEFAULT TRUE、
BOOLEAN DEFAULT TRUEを待ちます

パラメーター

queue_name

queue_name は、停止するキューの名前を指定します。

enqueue

エンキュー(デフォルト)を無効にする場合は TRUE 、現在の設定を変更しない FALSE 指定し FALSE

dequeue

デキューを無効に する場合は TRUE (デフォルト) を、現在の設定を変更しない FALSE 指定し FALSE

wait

TRUE 指定 すると、指定された変更を適用する前に未完了のトランザクションが完了するまでサーバーが待機するように指示されます。キューを停止するのを待つ間に、指定されたキューにエンキューまたはデキューするトランザクションは許可されません。 キューを直ちに停止するには、 FALSE 指定し FALSE

 

以下の匿名ブロックは、エンキューおよびキューの名前からデキュー無効 work _ order

BEGIN

DBMS_AQADM.STOP_QUEUE(queue_name =>'work_order', enqueue=>TRUE, dequeue=>TRUE, wait=>TRUE);

END;

未処理のトランザクションが完了すると、エンキューおよびデキューは停止します。

 

 

 

3.4      DBMS_CRYPTO

DBMS _ CRYPTO パッケージには、暗号化または復号化することを可能にする関数およびプロシージャを提供 RAW BLOB または CLOB データを。 DBMS _ CRYPTO 関数を使用して、暗号的に強力なランダム値を生成 することもでき ます。

表7.7.2 DBMS_CRYPTOの関数とプロシージャ

Function/Procedure

Return Type

Description

DECRYPT( src , typ , key , iv )

RAW

解読 RAW データを。

DECRYPT( dst INOUT, src , typ , key , iv )

N / A

復号化し BLOB データを。

DECRYPT( dst INOUT, src , typ , key , iv )

N / A

復号化し CLOB データを。

ENCRYPT( src , typ , key , iv )

RAW

RAW データを 暗号化し ます。

ENCRYPT( dst INOUT, src , typ , key , iv )

N / A

BLOB データを 暗号化し ます。

ENCRYPT( dst INOUT, src , typ , key , iv )

N / A

CLOB データを 暗号化し ます。

HASH( src , typ )

RAW

RAW データに ハッシュアルゴリズムを適用し ます。

HASH( src )

RAW

CLOB データに ハッシュ・アルゴリズムを適用し ます。

MAC( src , typ , key )

RAW

指定されたハッシュアルゴリズムとキーを使用して、指定された RAW データ のハッシュされた MAC 値を 返します

MAC( src , typ , key )

RAW

指定されたハッシュアルゴリズムとキーを使用して、指定された CLOB データ のハッシュされた MAC 値を 返します

RANDOMBYTES( number _ bytes )

RAW

指定された数の暗号的に強い乱数バイトを返します。

RANDOMINTEGER()

INTEGER

ランダムな INTEGER 返します

RANDOMNUMBER()

NUMBER

ランダムな NUMBER 返します

DBMS_CRYPTO ファンクションおよびプロシージャは、 次のエラー・メッセージを サポートし ます。

ORA-28239 - DBMS_CRYPTO.KeyNull

ORA-28829 - DBMS_CRYPTO.CipherSuiteNull

ORA-28827 - DBMS_CRYPTO.CipherSuiteInvalid

Oracleとは異なり、 以前に暗号化された情報を再暗号化する と、Advanced Serverはエラー ORA-28233 戻しません

RAW BLOB はPostgreSQL BYTEA データ型の 同義語であり CLOB TEXT 同義語である ことに注意してください

 

3.4.1    DECRYPT

DECRYPT 関数またはプロシージャは、ユーザが指定した暗号化アルゴリズム、キーおよびオプションの初期化ベクトルを用いてデータを復号化します。 DECRYPT 関数 のシグネチャは次の DECRYPT です。

DECRYPT
(src IN RAW, typ IN INTEGER, key IN RAW, iv IN RAW
DEFAULT NULL) RETURN RAW

DECRYPT プロシージャ のシグネチャは次の DECRYPT です。

DECRYPT
(dst INOUT BLOB, src IN BLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)

または

DECRYPT
(dst INOUT CLOB, src IN CLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)

プロシージャーとして呼び出されると、 DECRYPT BLOB または CLOB データをユーザー指定の BLOB 戻します

パラメーター

dst

dst は、 DECRYPT プロシージャの 出力 が書き込まれる BLOB の名前を指定します DECRYPT 手順は、現在、既存のデータを上書きします dst

src

src は、復号化されるソースデータを指定します。 DECRYPT を関数として 呼び出す場合は RAW データを 指定し ます。 DECRYPT として DECRYPT 呼び出す場合は BLOB または CLOB データを 指定します

typ

typ はブロック暗号の種類と修飾子を指定します。これは、 src が暗号化 されたときに指定されたタイプと一致する必要 があります。 Advanced Serverは、次のブロック暗号アルゴリズム、修飾子、および暗号スイートをサポートしています。

 

Block Cipher Algorithms

ENCRYPT_DES

CONSTANT INTEGER := 1;

ENCRYPT_3DES

CONSTANT INTEGER := 3;

ENCRYPT_AES

CONSTANT INTEGER := 4;

ENCRYPT_AES128

CONSTANT INTEGER := 6;

Block Cipher Modifiers

CHAIN_CBC

CONSTANT INTEGER := 256;

CHAIN_ECB

CONSTANT INTEGER := 768;

Block Cipher Padding Modifiers

PAD_PKCS5

CONSTANT INTEGER := 4096;

PAD_NONE

CONSTANT INTEGER := 8192;

Block Cipher Suites

DES_CBC_PKCS5

CONSTANT INTEGER := ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5;

DES3_CBC_PKCS5

CONSTANT INTEGER := ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5;

AES_CBC_PKCS5

CONSTANT INTEGER := ENCRYPT_AES + CHAIN_CBC + PAD_PKCS5;

key

key は、ユーザ定義の解読 key 指定します。これは、 src が暗号化 されたときに指定されたキーと一致する必要があります

iv

iv ( 省略可能)は、初期化ベクトルを指定します。とき初期化ベクトルが指定された場合は src 暗号化された復号化の際には、初期化ベクトルを指定する必要があり src 。デフォルトは NULL です。

次の例では、 DBMS_CRYPTO.DECRYPT 関数を使用して、 passwords から取得した暗号化されたパスワードを復号化します

CREATE TABLE passwords
(
  principal  VARCHAR2(90) PRIMARY KEY,  -- username
  ciphertext RAW(9)                     -- encrypted password
);

CREATE FUNCTION get_password(username VARCHAR2) RETURN RAW AS
 typ        INTEGER := DBMS_CRYPTO.DES_CBC_PKCS5;
 key        RAW(128) := 'my secret key';
 iv         RAW(100) := 'my initialization vector';
 password   RAW(2048);
BEGIN

  SELECT ciphertext INTO password FROM passwords WHERE principal = username;

  RETURN dbms_crypto.decrypt(password, typ, key, iv);
END;

DECRYPT 呼び出す DECRYPT ENCRYPTING の目標を。

3.4.2    ENCRYPT

ENCRYPT 関数またはプロシージャは、暗号化するために、ユーザが指定したアルゴリズム、キー、および任意の初期化ベクトルを使用して RAW BLOB または CLOB データを。 ENCRYPT 関数 の署名は次の ENCRYPT です。

ENCRYPT
( src IN RAW, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL) RETURN RAW

ENCRYPT プロシージャ の署名は次の ENCRYPT です。

ENCRYPT
( dst INOUT BLOB, src IN BLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)

または

ENCRYPT
( dst INOUT BLOB, src IN CLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)

プロシージャーとして呼び出されると、 ENCRYPT BLOB または CLOB データをユーザー指定の BLOB 戻します

パラメーター

dst

dst は、 ENCRYPT プロシージャの 出力 が書き込まれる BLOB の名前を指定します ENCRYPT 手順は、現在、既存のデータを上書きします dst

src

src は、暗号化されるソースデータを指定します。 ENCRYPT を関数として 呼び出す場合は RAW データを 指定し ます。 ENCRYPT として ENCRYPT 呼び出す場合は BLOB または CLOB データを 指定します

typ

typ は、 ENCRYPT によって使用されるブロック暗号タイプ と任意の修飾子を指定します。 Advanced Serverは、以下に示すブロック暗号アルゴリズム、修飾子、および暗号スイートをサポートしています。

 

Block Cipher Algorithms

ENCRYPT_DES

CONSTANT INTEGER := 1;

ENCRYPT_3DES

CONSTANT INTEGER := 3;

ENCRYPT_AES

CONSTANT INTEGER := 4;

ENCRYPT_AES128

CONSTANT INTEGER := 6;

Block Cipher Modifiers

CHAIN_CBC

CONSTANT INTEGER := 256;

CHAIN_ECB

CONSTANT INTEGER := 768;

Block Cipher Padding Modifiers

PAD_PKCS5

CONSTANT INTEGER := 4096;

PAD_NONE

CONSTANT INTEGER := 8192;

Block Cipher Suites

DES_CBC_PKCS5

CONSTANT INTEGER := ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5;

DES3_CBC_PKCS5

CONSTANT INTEGER := ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5;

AES_CBC_PKCS5

CONSTANT INTEGER := ENCRYPT_AES + CHAIN_CBC + PAD_PKCS5;

 

key

key は暗号化 key 指定します。

iv

iv (省略可能)は、初期化ベクトルを指定します。デフォルトでは、 iv NULL です。

次の例では、 DBMS_CRYPTO.DES_CBC_PKCS5 ブロック暗号スイート(事前定義 DBMS_CRYPTO.DES_CBC_PKCS5 のアルゴリズムと修飾子のセット)を使用して、 passwords から取得した値を暗号化し ます。

CREATE TABLE passwords
(
  principal  VARCHAR2(90) PRIMARY KEY,  -- username
  ciphertext RAW(9)                     -- encrypted password
);
CREATE PROCEDURE set_password(username VARCHAR2, cleartext RAW) AS
 typ        INTEGER := DBMS_CRYPTO.DES_CBC_PKCS5;
 key        RAW(128) := 'my secret key';
 iv         RAW(100) := 'my initialization vector';
 encrypted  RAW(2048);
BEGIN
  encrypted := dbms_crypto.encrypt(cleartext, typ, key, iv);
  UPDATE passwords SET ciphertext = encrypted WHERE principal = username;
END;

ENCRYPT はキーの値として my secret key my 初期化ベクトル initialization password 暗号化するときの vector password 解読するときに同じキーと初期化ベクトルを指定してください

 

3.4.3    HASH

HASH 関数は、ハッシュ値を返すために、ユーザー指定のアルゴリズムを使用して RAW または CLOB 値。 HASH 関数は、次の3つの形式で提供されています:

HASH
( src IN RAW, typ IN INTEGER) RETURN RAW

HASH
( src IN CLOB, typ IN INTEGER) RETURN RAW

パラメーター

src

src は、ハッシュ値が生成される値を指定します。 RAW BLOB 、または CLOB を指定できます

typ

typ HASH 関数タイプを 指定します 。 Advanced Serverは、 以下に示す HASH 関数タイプを サポートして います。

HASH Functions

HASH_MD4

CONSTANT INTEGER := 1;

HASH_MD5

CONSTANT INTEGER := 2;

HASH_SH1

CONSTANT INTEGER := 3;

次の例では、 DBMS _ CRYPTO 使用してい ます。 HASH 見つけるのは md5 文字列のハッシュ値を、 cleartext source

DECLARE
  typ        INTEGER := DBMS_CRYPTO.HASH_MD5;
  hash_value RAW(100);
BEGIN

  hash_value := DBMS_CRYPTO.HASH('cleartext source', typ);

END;

 

3.4.4    MAC

MAC 機能は、ユーザが指定した使用 MAC ハッシュを返す関数を MAC RAW または CLOB 値。 MAC 機能は、次の3種類の形式で提供されています:

MAC
(src IN RAW, typ IN INTEGER, key IN RAW) RETURN RAW

MAC
(src IN CLOB, typ IN INTEGER, key IN RAW) RETURN RAW

パラメーター

src

src は、 MAC 値が生成される 値を指定します RAW BLOB 、または CLOB 値を 指定し ます。

typ

typ 使用される MAC 機能を 指定します 。 Advanced Serverは 以下 MAC 機能を サポートして います。

MAC Functions

HMAC_MD5

CONSTANT INTEGER := 1;

HMAC_SH1

CONSTANT INTEGER := 2;

key

key は、ハッシュされた MAC を計算するために使用されるキーを指定し ます。

次の例では 、文字列 cleartext ハッシュされた MAC 値を検出します source

DECLARE
  typ       INTEGER := DBMS_CRYPTO.HMAC_MD5;
  key       RAW(100) := 'my secret key';
  mac_value RAW(100);
BEGIN

  mac_value := DBMS_CRYPTO.MAC('cleartext source', typ, key);

END;

DBMS _ CRYPTO MAC my キー値を使用します secret cleartext MAC 値を 計算する際の key source

 

3.4.5    RANDOMBYTES

RANDOMBYTES 関数は戻り RAW 暗号ランダムバイトを含む、指定された長さの値。署名は次のとおりです。

RANDOMBYTES
( number _ bytes IN INTEGER) RETURNS
RAW

パラメーター

number_bytes

number_bytes は、返されるランダムなバイト数を指定します。

次の例では、 RANDOMBYTES 使用 して 1024 バイトの 値を返し ます。

DECLARE
  result RAW(1024);
BEGIN
  result := DBMS_CRYPTO.RANDOMBYTES(1024);
END;

 

3.4.6    RANDOMINTEGER

RANDOMINTEGER() 関数は、ランダム返し INTEGER の間に 0 268,435,455 。署名は次のとおりです。

RANDOMINTEGER() RETURNS INTEGER

次の例では、 RANDOMINTEGER 関数を 使用して 、暗号的に強いランダムな INTEGER を返し ます。

DECLARE
  result INTEGER;
BEGIN
  result := DBMS_CRYPTO.RANDOMINTEGER();
  DBMS_OUTPUT.PUT_LINE(result);
END;

 

 

 

3.4.7    RANDOMNUMBER

RANDOMNUMBER() 関数は、ランダム返し NUMBER 0との間に 268,435,455 。署名は次のとおりです。

RANDOMNUMBER() RETURNS NUMBER

次の例では、 RANDOMNUMBER 関数を 使用し て暗号的に強い乱数を返します。

DECLARE
  result NUMBER;
BEGIN
  result := DBMS_CRYPTO.RANDOMNUMBER();
  DBMS_OUTPUT.PUT_LINE(result);
END;

 

 

3.5      DB MS_JOB

DBMS_JOB パッケージには、雇用の創出、スケジューリング、および管理のために用意されています。ジョブは、以前にデータベースに格納されたストアドプロシージャを実行します。 SUBMIT プロシージャは、ジョブ定義を作成し、保存するために使用されます。ジョブ識別子は、関連するストアドプロシージャと、ジョブの実行時期および実行頻度を記述する属性とともに、ジョブに割り当てられます。

このパッケージは、 pgAgent スケジューラに 依存して います。デフォルトでは、Advanced Serverインストーラは pgAgentを インストールしますが DBMS_JOB を使用する前に手動でpgAgentサービスを起動する必要があります 。このパッケージを使用して pgAgentを アンインストールした後でジョブをスケジュールしようとすると DBMS_JOB はエラーをスローします。 DBMS_JOB pgAgent がインストールされていることを確認しますが、サービスが実行中であることを確認しません。

次の表に、サポートされているDBMS_JOBプロシージャを示します。

Function/Procedure

Return Type

Description

BROKEN( ジョブ , 壊れ [, NEXT_DATE ])

該当なし

特定のジョブが壊れているかどうかを指定する 壊れた。

CHANGE( 仕事 , 何を , NEXT_DATE , 間隔、例えば、力 )

該当なし

ジョブのパラメータを変更します。

INTERVAL( ジョブ , インターバル )

該当なし

ジョブが実行されるたびに再計算される日付関数を使用して、実行頻度を設定します。この値は、次に実行される日付/時刻になります。

NEXT_DATE( 仕事 , NEXT_DATE )

該当なし

ジョブが実行される次の日時を設定します。

REMOVE( ジョブ )

該当なし

データベースからジョブ定義を削除します。

RUN( ジョブ )

該当なし

ジョブが壊れているとマークされていても強制的に実行します。

SUBMIT( ジョブ OUT, what [, next_date [, interval [, no_parse ]]])

該当なし

ジョブを作成し、その定義をデータベースに格納します。

WHAT( 仕事 , )

該当なし

ジョブによって実行されるストアドプロシージャを変更します。

Advanced Serverの DBMS_JOB の実装 は、Oracleのバージョンと比較して部分実装 DBMS_JOB 。上記の表にリストされている機能とプロシージャのみがサポートされています。

ジョブの実行頻度と実行頻度は、 next_date interval 2つの相互作用するパラメータに依存し interval next_date パラメータは、ジョブが実行されると、次の日付/時刻を指定した日付/時刻値です。 interval パラメータは、日付/時刻の値に評価日付関数を含む文字列です。

ジョブの実行直前に、 interval パラメーターの が評価されます。結果の値は、 next_date 格納されている next_date 値を置き換え ます。ジョブが実行されます。このようにして、 各ジョブの実行に先立って interval の式 が繰り返し評価さ れ、次の実行のために next_date 日時が 与えられ ます。

次の例では、次のストアド・プロシージャである job_proc 使用しています。このプロシージャは 、単一の VARCHAR2 を含む jobrun タイムスタンプを挿入するだけ です。

CREATE TABLE jobrun (

    runtime         VARCHAR2(40)

);

 

CREATE OR REPLACE PROCEDURE job_proc

IS

BEGIN

    INSERT INTO jobrun VALUES ('job_proc run at ' || TO_CHAR(SYSDATE,

        'yyyy-mm-dd hh24:mi:ss'));

END;

 

3.5.1    BROKEN

BROKEN 手順が壊れたり、壊れていないのいずれかにジョブの状態を設定します。 RUN プロシージャ を使用する以外は、破損したジョブは実行できません

BROKEN( job BINARY_INTEGER, broken BOOLEAN [, next_date DATE ])

パラメーター

job

破損しているか破損していないと設定されるジョブの識別子。

broken

TRUE 設定すると 、ジョブの状態はbrokenに設定されます。 FALSE 設定すると 、ジョブの状態は破損しないように設定されます。破損したジョブは、 RUN プロシージャ を使用する以外は実行できません

next_date

ジョブを実行する日時。デフォルトは SYSDATE です。

ジョブID 104のジョブの状態を破損に設定する:

BEGIN

    DBMS_JOB.BROKEN(104,true);

END;

状態を壊れていない状態に戻します。

BEGIN

    DBMS_JOB.BROKEN(104,false);

END;

 

3.5.2    CHANGE

CHANGE 手順は、特定の仕事を修正し、次の日付/時刻、実行するストアドプロシージャを含む属性ジョブが実行されるようになり、どのように頻繁にそれを実行することです。

CHANGE( job BINARY_INTEGER what VARCHAR2, next_date DATE,

  interval VARCHAR2, instance BINARY_INTEGER, force BOOLEAN)

パラメーター

job

変更するジョブの識別子。

what

ストアドプロシージャ名。既存の値を変更しない場合は、このパラメータをnullに設定します。

next_date

ジョブを次に実行する日時。既存の値を変更しない場合は、このパラメータをnullに設定します。

interval

評価されると、ジョブが実行される次の日付/時刻を提供する日付関数。既存の値を変更しない場合は、このパラメータをnullに設定します。

instance

この引数は無視されますが、互換性のために含まれています。

force

この引数は無視されますが、互換性のために含まれています。

 

2007年12月13日にジョブを次に実行するように変更します。他のパラメータは変更しないでください。

BEGIN

    DBMS_JOB.CHANGE(104,NULL,TO_DATE('13-DEC-07','DD-MON-YY'),NULL, NULL,

    NULL);

END;

 

3.5.3    INTERVAL

INTERVAL 手順では、ジョブを実行する頻度の周波数を設定します。

INTERVAL( job BINARY_INTEGER, interval VARCHAR2)

パラメーター

job

変更するジョブの識別子。

interval

評価されると、ジョブが実行される次の日付/時刻を提供する日付関数。

1週間に1回実行するようにジョブを変更する:

BEGIN

    DBMS_JOB.INTERVAL(104,'SYSDATE + 7');

END;

 

3.5.4    NEXT_DATE

NEXT_DATE 手順は、ジョブが次に実行されるときの日付/時刻を設定します。

NEXT_DATE( job BINARY_INTEGER, next_date DATE)

パラメーター

job

次の実行日が設定されるジョブの識別子。

next_date

ジョブを次に実行する日時。

2007年12月14日に次のジョブを実行するように変更します。

BEGIN

    DBMS_JOB.NEXT_DATE(104, TO_DATE('14-DEC-07','DD-MON-YY'));

END;

 

3.5.5    REMOVE

REMOVE 手順は、データベースから指定したジョブを削除します。ジョブを再 実行するには SUBMIT プロシージャ を使用してジョブを再送信する必要があります 。ジョブに関連付けられたストアドプロシージャは削除されないことに注意してください。

REMOVE( job BINARY_INTEGER)

パラメーター

job

データベースから削除されるジョブの識別子。

データベースからジョブを削除する:

BEGIN

    DBMS_JOB.REMOVE(104);

END;

 

3.5.6    RUN

RUN 手順は、その状態が壊れている場合でも、ジョブが実行されるように強制します。

RUN( job BINARY_INTEGER)

パラメーター

job

実行されるジョブの識別子。

強制的にジョブを実行します。

BEGIN

    DBMS_JOB.RUN(104);

END;

 

3.5.7    SUBMIT

SUBMIT プロシージャは、データベース内のジョブ定義および格納を作成します。ジョブは、ジョブ識別子、実行されるストアドプロシージャ、ジョブが最初に実行されるとき、およびジョブが実行される次の日時を計算する日付関数で構成されます。

SUBMIT( job OUT BINARY_INTEGER, what VARCHAR2

  [, next_date DATE [, interval VARCHAR2 [, no_parse BOOLEAN ]]])

パラメーター

job

ジョブに割り当てられた識別子。

what

ジョブによって実行されるストアドプロシージャの名前。

next_date

ジョブを次に実行する日時。デフォルトは SYSDATE です。

interval

評価されると、ジョブが実行される次の日付/時刻を提供する日付関数。場合は interval nullに設定されている場合、ジョブは1回だけ実行されます。 Nullがデフォルトです。

no_parse

TRUE 設定 されている場合は、ジョブ作成時にストアドプロシージャを構文チェックしないでください。ジョブが最初に実行されたときにのみチェックしてください。 FALSE 設定されている FALSE 、ジョブ作成時の手順を確認してください。デフォルトは FALSE です。

注:この SUBMIT()の 実装では no_parse オプションはサポートされていません 。互換性のためにのみ含まれています。

次の例では、ストアド・プロシージャ job_proc を使用してジョブを作成します 。ジョブは直ちに実行され、 interval パラメータ SYSDATE + 1 設定された SYSDATE + 1 回実行され ます

DECLARE

    jobid           INTEGER;

BEGIN

    DBMS_JOB.SUBMIT(jobid,'job_proc;',SYSDATE,

        'SYSDATE + 1');

    DBMS_OUTPUT.PUT_LINE('jobid: ' || jobid);

END;

                    

jobid: 104

ジョブはすぐにプロシージャ job_proc 実行し、 テーブル jobrun に行を jobrun ます

SELECT * FROM jobrun;

 

               runtime

-------------------------------------

 job_proc run at 2007-12-11 11:43:25

(1 row)

 

3.5.8    WHAT

WHAT 手順ジョブが実行されるストアドプロシージャを変更します。

WHAT( job BINARY_INTEGER, what VARCHAR2)

パラメーター

job

ストアドプロシージャを変更するジョブの識別子。

what

実行するストアドプロシージャの名前。

list_emp プロシージャ を実行するようにジョブを変更し ます。

BEGIN

    DBMS_JOB.WHAT(104,'list_emp;');

END;

 

3.6      DB MS_LOB

DBMS_LOB パッケージには、大きなオブジェクトを操作する機能を提供します。次の表に、サポートされている機能と手順を示します。

Function/Procedure

Return Type

Description

APPEND( dest_lob IN OUT, src_lob )

該当なし

ある大きなオブジェクトを別のオブジェクトに追加します。

COMPARE( lob_1 , lob_2 [, amount [, offset_1 [, offset_2 ]]])

INTEGER

2つの大きなオブジェクトを比較します。

CONVERTOBLOB CONVERTOBLOB( dest_lob IN OUT, src_clob , amount , dest_offset IN OUT, src_offset IN OUT, blob_csid , lang_context IN OUT, 警告出力 OUT)

該当なし

文字データをバイナリに変換します。

CONVERTTOCLOB( dest_lob IN OUT, src_blob , amount , dest_offset IN OUT, src_offset IN OUT, blob_csid , lang_context IN OUT, 警告出力 OUT)

該当なし

バイナリデータを文字に変換します。

COPY( dest_lob IN OUT, src_lob , amount [, dest_offset [, src_offset ]])

該当なし

大きなオブジェクトを別のオブジェクトにコピーします。

ERASE(lob_loc IN OUT, IN OUT [, オフセット ])

該当なし

大きなオブジェクトを消去します。

GET_STORAGE_LIMIT( lob_loc )

INTEGER

ラージオブジェクトのストレージ制限を取得します。

GETLENGTH( lob_loc )

INTEGER

ラージオブジェクトの長さを取得します。

INSTR( lob_loc , pattern [, offset [, nth ]])

INTEGER

パターンのn番目の位置の位置を取得する オフセットで始まる大きなオブジェクトに格納されます。

READ( lob_loc , IN OUT, オフセット , バッファ OUT)

該当なし

大きなオブジェクトを読み込みます。

SUBSTR( lob_loc [, [, オフセット ]])

RAW VARCHAR2

大きなオブジェクトの一部を取得します。

TRIM( lob_loc IN OUT, newlen )

該当なし

大きなオブジェクトを指定された長さにトリムします。

WRITE( lob_loc IN OUT, , オフセット , バッファ )

該当なし

大きなオブジェクトにデータを書き込みます。

WRITEAPPEND( lob_loc IN OUT, , バッファ )

該当なし

バッファからラージオブジェクトの末尾にデータを書き込みます。

Advanced Serverの DBMS_LOB の実装 は、Oracleのバージョンと比較して部分実装です。上記の表にリストされている機能とプロシージャのみがサポートされています。

次の表に、パッケージで使用可能なパブリック変数を示します。

Public Variables

Data Type

Value

compress off

INTEGER

0

compress_on

INTEGER

1

deduplicate_off

INTEGER

0

deduplicate_on

INTEGER

4

default_csid

INTEGER

0

default_lang_ctx

INTEGER

0

encrypt_off

INTEGER

0

encrypt_on

INTEGER

1

file_readonly

INTEGER

0

lobmaxsize

INTEGER

1073741823

lob_readonly

INTEGER

0

lob_readwrite

INTEGER

1

no_warning

INTEGER

0

opt_compress

INTEGER

1

opt_deduplicate

INTEGER

4

opt_encrypt

INTEGER

2

warn_inconvertible_char

INTEGER

1

次のセクションでは、ラージ・オブジェクトが BLOB 場合は、長さとオフセットがバイト単位で測定されます 。ラージ・オブジェクトが CLOB 場合、長さとオフセットは文字単位で測定されます

 

3.6.1    APPEND

APPEND 手順は、別のラージオブジェクトを追加する能力を提供します。両方の大きなオブジェクトは同じタイプでなければなりません。

APPEND( dest_lob IN OUT { BLOB | CLOB }, src_lob { BLOB | CLOB })

パラメーター

dest_lob

宛先オブジェクトのラージオブジェクトロケータ。 src_lob と同じデータ型でなければなりません

src_lob

ソースオブジェクトのラージオブジェクトロケータ。 dest_lob と同じデータ型でなければなりません

 

3.6.2    COMPARE

COMPARE

status INTEGER COMPARE( lob_1 { BLOB | CLOB },

  lob_2 { BLOB | CLOB }

  [, amount INTEGER [, offset_1 INTEGER [, offset_2 INTEGER ]]])

パラメーター

lob_1

比較される最初のラージオブジェクトのラージオブジェクトロケータ。 lob_2 と同じデータ型である必要があります

lob_2

比較される第2ラージオブジェクトのラージオブジェクトロケータ。 lob_1 と同じデータ型である必要があります

amount

ラージ・オブジェクトのデータ型が BLOB 場合、 amount バイト に対して比較が行われ ます。ラージオブジェクトのデータ型が CLOB の場合は、 amount 文字 に対して比較が行われ ます。デフォルトでは、大きなオブジェクトの最大サイズです。

offset_1

比較を開始する最初の大きなオブジェクト内の位置。最初のバイト/文字はオフセット1です。デフォルトは1です。

offset_2

比較を開始する2番目の大きなオブジェクト内の位置。最初のバイト/文字はオフセット1です。デフォルトは1です。

status

両方のラージオブジェクトが、指定されたオフセットの指定された長さで正確に同じ場合はゼロ。オブジェクトが同じでない場合は非ゼロです。 NULL 場合は amount offset_1 、または offset_2 ゼロ未満です。

3.6.3    CONVERTTOBLOB

CONVERTTOBLOB 手順は、バイナリに文字データを変換する機能を提供します。

CONVERTTOBLOB( dest_lob OUT BLOB、 src_clob CLOB、

  amount INTEGER、 dest_offset IN OUT INTEGER、

  src_offset IN OUT INTEGER、 blob_csid NUMBER、

  lang_context IN OUT INTEGER、 warning OUT INTEGER)

パラメーター

dest_lob

文字データが変換される BLOB ラージ・オブジェクト・ロケータ。

src_clob

変換される文字データの CLOB ラージ・オブジェクト・ロケータ。

amount

文字の数 src_clob 変換されます。

dest_offset IN

ソース CLOB 書き込みが 開始 される宛先 BLOB バイト単位の位置 。最初のバイトはオフセット1です。

dest_offset OUT

書込み操作が完了した後の 宛先 BLOB バイト単位の位置 。最初のバイトはオフセット1です。

src_offset IN

CLOB BLOB への変換を 開始 するソース CLOB 内の文字の位置 。最初の文字は1です。

src_offset OUT

変換操作が完了した後の ソース CLOB 内の文字の位置 。最初の文字は1です。

blob_csid

変換された宛先 BLOB キャラクタ・セットID

lang_context IN

コンバージョンの言語コンテキスト。通常、この設定にはデフォルト値の0が使用されます。

lang_context OUT

変換後の言語コンテキスト。

warning

変換が成功した場合は0、変換不可能な文字が見つかった場合は1。

 

3.6.4    CONVERTTOCLOB

CONVERTTOCLOB 手順では、文字にバイナリデータを変換する機能を提供します。

CONVERTTOCLOB( dest_lob IN OUT CLOB、 src_blob BLOB、

  amount INTEGER、 dest_offset IN OUT INTEGER、

  src_offset IN OUT INTEGER、 blob_csid NUMBER、

  lang_context IN OUT INTEGER、 warning OUT INTEGER)

パラメーター

dest_lob

バイナリ・データを変換する CLOB ラージ・オブジェクト・ロケータ。

src_blob

変換されるバイナリ・データの BLOB ラージ・オブジェクト・ロケータ。

amount

変換される src_blob のバイト数

dest_offset IN

ソース BLOB 書き込みが 開始 される宛先 CLOB 内の文字の位置 。最初の文字は1です。

 

dest_offset OUT

書込み操作が完了した後 に、宛先 CLOB に文字を配置します 。最初の文字は1です。

src_offset IN

ソース BLOB バイト単位での位置 宛先 CLOB への変換 が開始されます。最初のバイトはオフセット1です。

src_offset OUT

変換操作が完了した後の ソース BLOB バイト単位の位置 。最初のバイトはオフセット1です。

blob_csid

変換された宛先 CLOB キャラクタ・セットID

lang_context IN

コンバージョンの言語コンテキスト。通常、この設定にはデフォルト値の0が使用されます。

lang_context OUT

変換後の言語コンテキスト。

warning

変換が成功した場合は0、変換不可能な文字が見つかった場合は1。

 

 

 

 

 

 

3.6.5    COPY

COPY 手順は、別の大きなオブジェクトをコピーする機能を提供します。ソースラージオブジェクトと宛先ラージオブジェクトは、同じデータ型でなければなりません。

COPY( dest_lob src_lob
{BLOB | CLOB}、
amount INTEGER

[、 dest_offset INTEGER [、 src_offset INTEGER]])

パラメーター

dest_lob

src_lob をコピーする ラージオブジェクトのラージオブジェクトロケータ src_lob と同じデータ型でなければなりません

src_lob

dest_lob にコピーされるラージオブジェクトのラージオブジェクトロケータ dest_lob と同じデータ型でなければなりません

amount

コピーされる src_lob のバイト数/文字数

dest_offset

ソースラージオブジェクトの書き込みを開始する宛先ラージオブジェクト内の位置。最初の位置はオフセット1です。デフォルトは1です。

src_offset

送り先のラージオブジェクトへのコピーを開始する元のラージオブジェクト内の位置。最初の位置はオフセット1です。デフォルトは1です。

 

 

 

 

 

3.6.6    ERASE

ERASE 手順は、ラージ・オブジェクトの部分を消去する能力を提供します。ラージ・オブジェクトを消去するとは、指定された部分を BLOB 用のゼロバイト・フィラー または CLOB スペースで 置き換えることを意味 します 。ラージオブジェクトの実際のサイズは変更されません。

ERASE( lob_loc IN OUT {BLOB | CLOB}、 amount IN OUT INTEGER

[、 offset INTEGER])

パラメーター

lob_loc

消去される大きなオブジェクトのラージオブジェクトロケータ。

amount IN

消去するバイト数/文字数。

amount OUT

実際に消去されたバイト数/文字数。 amount バイト/文字が消去さ れる前に大きなオブジェクトの終わりに達すると、この値は入力値よりも小さくなり ます。

offset

消去を開始する大きなオブジェクトの位置。最初のバイト/文字は位置1です。デフォルトは1です。

 

3.6.7    GET_STORAGE_LIMIT

GET_STORAGE_LIMIT 機能は、最大許容ラージオブジェクトの制限を返します。

size INTEGER GET_STORAGE_LIMIT(BLOBのlob_loc

 

size INTEGER GET_STORAGE_LIMIT( lob_loc CLOB)

パラメーター

size

このデータベース内のラージオブジェクトの最大許容サイズ。

lob_loc

このパラメータは無視されますが、互換性のために含まれています。

 

3.6.8    GETLENGTH

GETLENGTH

amount INTEGER GETLENGTH( lob_loc BLOB)

 

amount INTEGER GETLENGTH( lob_loc CLOB)

パラメーター

lob_loc

長さを取得するラージオブジェクトのラージオブジェクトロケータ。

amount

BLOB の場合 のラージ・オブジェクトの長さ(バイト単位) または CLOB 場合の文字数

 

3.6.9    INSTR

INSTR 機能は、ラージ・オブジェクト内の指定されたパターンのn番目の発生の位置を返します。

position INTEGER INSTR( lob_loc {BLOB | CLOB}、

  pattern {RAW | VARCHAR2} [、 offset INTEGER [、 nth INTEGER]])

パラメーター

lob_loc

パターンを検索するラージオブジェクトのラージオブジェクトロケータ。

pattern

ラージオブジェクト lob と照合するバイトまたは文字のパターン lob_loc BLOB 場合、 pattern RAW なければなりません lob_loc CLOB 場合、 patternは VARCHAR2 なければなりません

offset

pattern 検索を開始する lob_loc 内の位置 。最初のバイト/文字は位置1です。デフォルトは1です。

nth

検索 pattern nth 回数によって所定の位置から始まる offset 。デフォルトは1です。

position

ラージ・オブジェクト内の位置 pattern で指定されたn番目の時間表示され nth によって与えられる位置から offset

 

3.6.10                  READ

READ 手順は、バッファにラージ・オブジェクトの部分を読み取る能力を提供します。

READ( lob_loc {BLOB | CLOB}、 amount IN OUT BINARY_INTEGER、

  offset INTEGER、 buffer OUT {RAW | VARCHAR2})

パラメーター

lob_loc

読み込まれるラージオブジェクトのラージオブジェクトロケータ。

amount IN

読み込むバイト数/文字数。

amount OUT

実際に読み取られたバイト数/文字数。読み込むデータがそれ以上存在しない場合、 amount は0を返し、 DATA_NOT_FOUND 例外がスローされます。

offset

読書を開始する位置。最初のバイト/文字は位置1です。

buffer

大きなオブジェクトを受け取る変数。場合 lob_loc ある BLOB 、その後、 buffer なければなりません RAW 。場合 lob_loc ある CLOB 、その後、 buffer なければなりません VARCHAR2

 

3.6.11                  SUBSTR

SUBSTR 機能は、大きなオブジェクトの一部を戻す能力を提供します。

data lob_loc {BLOB | CLOB}

[、 amount INTEGER [、 offset INTEGER]])

パラメーター

lob_loc

読み込まれるラージオブジェクトのラージオブジェクトロケータ。

amount

返されるバイト数/文字数。デフォルトは32,767です。

offset

大きなオブジェクト内の位置でデータを返す。最初のバイト/文字は位置1です。デフォルトは1です。

data

読み取られる大きなオブジェクトの返された部分。場合 lob_loc ある BLOB 、戻り値のデータ型がある RAW 。場合 lob_loc ある CLOB 、戻り値のデータ型がある VARCHAR2

3.6.12                  TRIM

TRIM 手順は、指定された長さにラージ・オブジェクトを切り捨てるする能力を提供します。

TRIM( lob_loc IN OUT {BLOB | CLOB}、 newlen INTEGER)

パラメーター

lob_loc

トリミングするラージオブジェクトのラージオブジェクトロケータ。

newlen

ラージオブジェクトをトリミングするバイト数/文字数。

 

3.6.13                  WRITE

WRITE 手順は、ラージ・オブジェクトにデータを書き込むための能力を提供します。指定された長さの指定されたオフセットのラージオブジェクト内の既存のデータは、バッファに指定されたデータによって上書きされます。

WRITE( lob_loc IN OUT {BLOB | CLOB}、
amount BINARY_INTEGER、

  offset INTEGER、 buffer {RAW | VARCHAR2})

パラメーター

lob_loc

書き込まれるラージオブジェクトのラージオブジェクトロケータ。

amount

ラージオブジェクトに書き込まれる buffer 内のバイト数または文字数

offset

書き込み操作を開始するためのラージオブジェクトの先頭からのバイト数/文字単位のオフセット(原点は1)。

buffer

ラージオブジェクトに書き込まれるデータが格納されます。場合 lob_loc ある BLOB 、その後、 buffer なければなりません RAW 。場合 lob_loc ある CLOB 、その後、 buffer なければなりません VARCHAR2

 

3.6.14                  WRITEAPPEND

WRITEAPPEND 手順は、ラージ・オブジェクトの末尾にデータを追加する機能を提供します。

WRITEAPPEND( lob_loc IN OUT {BLOB | CLOB}、

  amount BINARY_INTEGER、 buffer {RAW | VARCHAR2})

パラメーター

lob_loc

データを追加するラージオブジェクトのラージオブジェクトロケータ。

amount

ラージオブジェクトに追加される buffer からのバイト数/文字数

buffer

ラージオブジェクトに追加されるデータ。もし lang = EN-US style = 'font-size:11.0pt'> lob_loc BLOB で、 buffer RAW なければなりません 。場合 lob_loc ある CLOB 、その後、 buffer なければなりません VARCHAR2

 

 

3.7      DBMS_LOCK

Advanced Serverは DBMS_LOCK をサポートしてい DBMS_LOCK SLEEP 手順。

Function/Procedure

Return Type

Description

SLEEP( )

該当なし

指定した 数だけセッションを中断します

Advanced Serverの DBMS_LOCK の実装 は、Oracleのバージョンと比較して部分実装です。 DBMS_LOCK.SLEEP のみ がサポートされています。

 

3.7.1    SLEEP

SLEEP 手順は、指定した秒数のため、現在のセッションを中断します。

SLEEP( seconds NUMBER)

パラメーター

seconds

seconds セッションを中断する秒数を指定します。 seconds は分数値にすることができます。たとえば、 1.75 入力 して1秒の3分の1秒を指定します。

 

 

3.8      DBMS_MVIEW

マテリアライズド・ビューおよびその依存関係を管理およびリフレッシュするに は、 DBMS_MVIEW パッケージの プロシージャを使用します 。 Advanced Serverは、次の DBMS_MVIEW プロシージャを サポートしてい ます。

Procedure

Return Type

Description

GET_MV_DEPENDENCIES( list VARCHAR2, deplist VARCHAR2);

n/a

GET_MV_DEPENDENCIES 手順は、指定されたビューの依存関係のリストを返します。

REFRESH( list VARCHAR2, method VARCHAR2, rollback_seg VARCHAR2 , push_deferred_rpc BOOLEAN, refresh_after_errors BOOLEAN , purge_option NUMBER, parallelism NUMBER, heap_size NUMBER , atomic_refresh BOOLEAN , nested BOOLEAN);

n/a

REFRESH プロシージャーの このバリエーションは、 コンマで区切られたビュー名のリストにあるすべてのビューをリフレッシュします。

REFRESH( tab dbms_utility.uncl_array, method VARCHAR2, rollback_seg VARCHAR2, push_deferred_rpc BOOLEAN, refresh_after_errors BOOLEAN, purge_option NUMBER, parallelism NUMBER, heap_size NUMBER, atomic_refresh BOOLEAN, nested BOOLEAN);

n/a

REFRESH プロシージャの このバリエーションは、 dbms_utility.uncl_array 値の 表に dbms_utility.uncl_array されたすべてのビューをリフレッシュします

REFRESH_ALL_MVIEWS( number_of_failures BINARY_INTEGER, method VARCHAR2, rollback_seg VARCHAR2, refresh_after_errors BOOLEAN, atomic_refresh BOOLEAN);

n/a

REFRESH_ALL_MVIEWS 手順は、すべてのマテリアライズド・ビューをリフレッシュします。

REFRESH_DEPENDENT( number_of_failures BINARY_INTEGER, list VARCHAR2, method VARCHAR2, rollback_seg VARCHAR2, refresh_after_errors BOOLEAN, atomic_refresh BOOLEAN, nested BOOLEAN);

n/a

REFRESH_DEPENDENT プロシージャーの このバリエーションは、 コンマ区切りのリストにリストされたビューに依存するすべてのビューをリフレッシュします。

REFRESH_DEPENDENT( number_of_failures BINARY_INTEGER, tab dbms_utility.uncl_array, method VARCHAR2, rollback_seg VARCHAR2, refresh_after_errors BOOLEAN, atomic_refresh BOOLEAN, nested BOOLEAN);

n/a

REFRESH_DEPENDENT プロシージャの このバリエーションは、 dbms_utility.uncl_array 値の 表にリストされているビューに依存するすべてのビューをリフレッシュします

高度なサーバーの実装 11.0pt '> DBMS_MVIEW はOracleのバージョンと比較して部分的に実装されています。上記の表にリストされている機能とプロシージャのみがサポートされています。

 

3.8.1    GET_MV_DEPENDENCIES

マテリアライズド・ビューの名前が指定されると、 GET_MV_DEPENDENCIES は、指定されたビューに依存するアイテムのリストを戻します。署名は次のとおりです。

GET_MV_DEPENDENCIES(
list IN VARCHAR2,
deplist OUT VARCHAR2);

パラメーター

list

list は、マテリアライズド・ビューの名前、またはマテリアライズド・ビュー名のカンマ区切り list 指定します。

deplist

deplist は、スキーマ修飾された依存関係のコンマ区切りのリストです。 deplist VARCHAR2 値です。

次の例:

DECLARE
  deplist VARCHAR2(1000);
BEGIN
  DBMS_MVIEW.GET_MV_DEPENDENCIES('public.emp_view', deplist);
  DBMS_OUTPUT.PUT_LINE('deplist: ' || deplist);
END;

public.emp_view というマテリアライズド・ビューの依存関係のリストを表示します

 

3.8.2    REFRESH

REFRESH プロシージャを 使用して 、コンマで区切られたビュー名のリストまたは DBMS_UTILITY.UNCL_ARRAY 値の 表のいずれかに指定されたすべてのビューをリフレッシュします 。手順には2つの署名があります。カンマ区切りのビュー名のリストを指定する場合は、最初の形式を使用します。

REFRESH(
list IN VARCHAR2,
method IN VARCHAR2 DEFAULT NULL,
rollback_seg IN VARCHAR2 DEFAULT NULL,
push_deferred_rpc IN BOOLEAN DEFAULT TRUE,
refresh_after_errors IN BOOLEAN DEFAULT FALSE,
purge_option IN NUMBER DEFAULT 1,
parallelism IN NUMBER DEFAULT 0,
heap_size IN NUMBER DEFAULT 0,
atomic_refresh IN BOOLEAN DEFAULT TRUE,
nested IN BOOLEAN DEFAULT FALSE);

2番目の形式を使用して、 DBMS_UTILITY.UNCL_ARRAY 値の 表にビュー名を指定し ます。

REFRESH(
tab IN OUT DBMS_UTILITY.UNCL_ARRAY,
method IN VARCHAR2 DEFAULT NULL,
rollback_seg IN VARCHAR2 DEFAULT NULL,
push_deferred_rpc IN BOOLEAN DEFAULT TRUE,
refresh_after_errors IN BOOLEAN DEFAULT FALSE,
purge_option IN NUMBER DEFAULT 1,
parallelism IN NUMBER DEFAULT 0,
heap_size IN NUMBER DEFAULT 0,
atomic_refresh IN BOOLEAN DEFAULT TRUE,
nested IN BOOLEAN DEFAULT FALSE);

パラメーター

list

list は、 マテリアライズド・ビューの名前、またはマテリアライズド・ビュー名のコンマ区切りリストを指定 する VARCHAR2 値です。名前はスキーマで修飾されています。

tab

tab は、 マテリアライズド・ビューの名前(複数 DBMS_UTILITY.UNCL_ARRAY を指定する DBMS_UTILITY.UNCL_ARRAY 値の DBMS_UTILITY.UNCL_ARRAY

 

method

method 、指定されたビュー(またはビュー)に適用されるリフレッシュ・メソッドを指定 する VARCHAR2 値です。サポートされる唯一の方法は C です。ビューの完全リフレッシュが実行されます。

rollback_seg

rollback _ seg は互換性のために受け入れられ、無視されます。デフォルトは NULL です。

push_deferred_rpc

push_deferred_rpc は互換性のために受け入れられ、無視されます。デフォルトは TRUE です。

refresh_after_errors

refresh_after_errors は互換性のために受け入れられ、無視されます。デフォルトは FALSE です。

purge_option

purge_option は互換性のために受け入れられ、無視されます。デフォルトは 1 です。

parallelism

parallelism は互換性のために受け入れられ、無視される。デフォルトは 0 です。

heap_size IN NUMBER DEFAULT 0,

heap_size は互換性のために受け入れられ、無視されます。デフォルトは 0 です。

atomic_refresh

atomic_refresh は互換性のために受け入れられ、無視されます。デフォルトは TRUE です。

nested

nested FALSE です。

次の例では、 DBMS _ MVIEW 使用し ます。 REFRESH 実行するために COMPLETE のリフレッシュ public.emp_view マテリアライズド・ビューを:

EXEC DBMS_MVIEW.REFRESH(list => 'public.emp_view', method => 'C');

 

3.8.3    REFRESH_ALL_MVIEWS

REFRESH_ALL_MVIEWS プロシージャを 使用 して、ビューが依存する表またはビューが変更されてからリフレッシュされていないマテリアライズド・ビューをリフレッシュします。署名は次のとおりです。

REFRESH_ALL_MVIEWS(
number_of_failures OUT BINARY_INTEGER,
method IN VARCHAR2 DEFAULT NULL,
rollback _ seg IN VARCHAR2 DEFAULT NULL,
refresh _ after _ errors IN BOOLEAN DEFAULT FALSE,
atomic_refresh IN BOOLEAN DEFAULT TRUE);

パラメーター

number_of_failures

number_of_failures 、リフレッシュ操作中に発生した失敗の数を指定 する BINARY_INTEGER です。

method

method 、指定されたビュー(またはビュー)に適用されるリフレッシュ・メソッドを指定 する VARCHAR2 値です。サポートされる唯一の方法は C です。ビューの完全リフレッシュが実行されます。

rollback_seg

rollback _ seg は互換性のために受け入れられ、無視されます。デフォルトは NULL です。

refresh_after_errors

refresh_after_errors は互換性のために受け入れられ、無視されます。デフォルトは FALSE です。

atomic_refresh

atomic_refresh は互換性のために受け入れられ、無視されます。デフォルトは TRUE です。

次の例では、 すべてのマテリアライズド・ビュー に対して COMPLETE リフレッシュを 実行し ます。

DECLARE
  errors INTEGER;
BEGIN
  DBMS_MVIEW.REFRESH_ALL_MVIEWS(errors, method => 'C');
END;

完了すると、 errors には失敗の数が含まれます。

 

3.8.4    REFRESH_DEPENDENT

REFRESH _ DEPENDENT プロシージャを 使用し て、プロシージャのコールで指定されたビューに依存するすべてのマテリアル・ビューをリフレッシュします。カンマ区切りリストを指定するか、 DBMS_UTILITY.UNCL_ARRAY 値の 表にビュー名を指定できます

プロシージャの最初の形式を使用して、コンマ区切りのリストで指定されたビューに依存するすべてのマテリアル・ビューをリフレッシュします。

REFRESH_DEPENDENT(
number_of_failures OUT BINARY_INTEGER,
list IN VARCHAR2,
method IN VARCHAR2 DEFAULT NULL,
rollback_seg IN VARCHAR2 DEFAULT NULL
  refresh_after_errors IN BOOLEAN DEFAULT FALSE,
  atomic_refresh IN BOOLEAN DEFAULT TRUE,
nested IN BOOLEAN DEFAULT FALSE);

プロシージャの2番目の形式を使用して、 DBMS_UTILITY.UNCL_ARRAY 値の 表に指定されたビューに依存するすべてのマテリアル・ビューをリフレッシュし ます。

REFRESH_DEPENDENT(
number_of_failures OUT BINARY_INTEGER,
tab IN DBMS_UTILITY.UNCL_ARRAY,
method IN VARCHAR2 DEFAULT NULL,
rollback_seg IN VARCHAR2 DEFAULT NULL,
refresh_after_errors IN BOOLEAN DEFAULT FALSE,
atomic_refresh IN BOOLEAN DEFAULT TRUE,
nested IN BOOLEAN DEFAULT FALSE);

パラメーター

number_of_failures

number_of_failures 、リフレッシュ操作中に発生した失敗の数を含む BINARY_INTEGER です。

list

list は、 マテリアライズド・ビューの名前、またはマテリアライズド・ビュー名のコンマ区切りリストを指定 する VARCHAR2 値です。名前はスキーマで修飾されています。

tab

tab は、 マテリアライズド・ビューの名前(複数 DBMS_UTILITY.UNCL_ARRAY を指定する DBMS_UTILITY.UNCL_ARRAY 値の DBMS_UTILITY.UNCL_ARRAY

method

method 、指定されたビュー(またはビュー)に適用されるリフレッシュ・メソッドを指定 する VARCHAR2 値です。サポートされる唯一の方法は C です。ビューの完全リフレッシュが実行されます。

rollback_seg

rollback _ seg は互換性のために受け入れられ、無視されます。デフォルトは NULL です。

refresh_after_errors

refresh_after_errors は互換性のために受け入れられ、無視されます。デフォルトは FALSE です。

atomic_refresh

atomic_refresh は互換性のために受け入れられ、無視されます。デフォルトは TRUE です。

nested

nested は互換性のために受け入れられ、無視される。デフォルトは FALSE です。

次の例では public スキーマ にある emp_view という マテリアライズド・ビューに依存するすべてのマテリアライズド・ビュー に対して COMPLETE リフレッシュを 実行し ます。

DECLARE
  errors INTEGER;
BEGIN
  DBMS_MVIEW.REFRESH_DEPENDENT(errors, list => 'public.emp_view', method => 'C');
END;

完了すると、 errors には失敗の数が含まれます。

 

3.9      DBMS_OUTPUT

DBMS_OUTPUT パッケージには、メッセージバッファにメッセージ(テキストの行)を送ったり、メッセージバッファからメッセージを取得するための機能を提供します。メッセージバッファは、単一のセッションに対してローカルです。 DBMS_PIPE パッケージを 使用して、 セッション間でメッセージを送信します。

DBMS_OUTPUT パッケージで 使用可能なプロシージャおよびファンクションを 次の表に示します。

Function/Procedure

Return Type

Description

DISABLE

該当なし

メッセージの送受信機能を無効にする。

ENABLE( buffer_size )

該当なし

メッセージを送受信する機能を有効にします。

GET_LINE( ライン OUT, ステータス OUT)

該当なし

メッセージバッファから行を取得します。

GET_LINES( ライン OUT, NUMLINES IN OUT)

該当なし

メッセージバッファから複数の行を取得します。

NEW_LINE

該当なし

行末の文字シーケンスを挿入します。

PUT( アイテム )

該当なし

行末の文字シーケンスを含まない部分行を挿入します。

PUT_LINE( アイテム )

該当なし

完全な行に行末の文字シーケンスを挿入します。

SERVEROUTPUT( stdout )

該当なし

PUT PUT_LINE 、または NEW_LINE から標準出力またはメッセージバッファに メッセージをダイレクトします

次の表に、 DBMS_OUTPUT パッケージで 使用可能なパブリック変数を示し ます。

Public Variables

Data Type

Value

Description

chararr

TABLE

 

メッセージ行の場合。

 

3.9.1    CHARARR

CHARARR 複数のメッセージ行を格納するためのものです。

TYPE chararr IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;

 

3.9.2    DISABLE

DISABLE 手順は、メッセージバッファをクリアします。 DISABLE プロシージャの実行 時にバッファ内のメッセージに アクセスできなくなります。その後、 PUT PUT_LINE 、または NEW_LINE プロシージャで 送信されたメッセージ は破棄されます。 PUT PUT_LINE 、または NEW_LINE プロシージャが実行され、メッセージが無効になっている ときに、エラーは送信者に返されません

メッセージの送受信を再び有効にするには ENABLE プロシージャーまたは SERVEROUTPUT(TRUE) プロシージャーを 使用し ます。

DISABLE

この匿名ブロックは、現在のセッションでの送受信メッセージを無効にします。

BEGIN

    DBMS_OUTPUT.DISABLE;

END;

 

3.9.3    ENABLE

ENABLE 手順メッセージバッファにメッセージを送信したり、メッセージバッファからメッセージを取得する機能を可能にします。実行 SERVEROUTPUT(TRUE) 暗黙的に行い、 ENABLE プロシージャを。

PUT PUT_LINE 、または NEW_LINE 送信されるメッセージの宛先は、 SERVEROUTPUT の状態に依存します

      SERVEROUTPUT の最後の状態 TRUE 場合、メッセージはコマンド行の標準出力に送られます。

      SERVEROUTPUT の最後の状態 FALSE 、メッセージはメッセージバッファに送られます。

ENABLE [( buffer_size INTEGER)]

パラメーター

buffer_size

メッセージバッファの最大長(バイト単位)。場合 buffer_size 2000未満のが指定され、バッファ・サイズは2000に設定されています。

次の匿名ブロックはメッセージを有効にします。 SERVEROUTPUT(TRUE) 設定 すると、標準出力に強制されます。

BEGIN

    DBMS_OUTPUT.ENABLE;

    DBMS_OUTPUT.SERVEROUTPUT(TRUE);

    DBMS_OUTPUT.PUT_LINE('Messages enabled');

END;

 

Messages enabled

単純に SERVEROUTPUT(TRUE) を使用すると、同じ効果が得られます

BEGIN

    DBMS_OUTPUT.SERVEROUTPUT(TRUE);

    DBMS_OUTPUT.PUT_LINE('Messages enabled');

END;

 

Messages enabled

次の匿名ブロックはメッセージを有効にしますが、 SERVEROUTPUT(FALSE) 設定するとメッセージが メッセージバッファに SERVEROUTPUT(FALSE)

BEGIN

    DBMS_OUTPUT.ENABLE;

    DBMS_OUTPUT.SERVEROUTPUT(FALSE);

    DBMS_OUTPUT.PUT_LINE('Message sent to buffer');

END;

 

3.9.4    GET_LINE

GET_LINE 手順は、メッセージ・バッファからテキストの行を取得する能力を提供します。行末の文字シーケンスで終了したテキストのみが取得 され ます。 これ は、 PUT_LINE を使用して生成された完全な行 、または一連の PUT 呼び出しに続いて NEW_LINE 呼び出し が生成された行 です。

GET_LINE( line OUT VARCHAR2、 status OUT INTEGER)

パラメーター

line

メッセージバッファからテキストの行を受け取る変数。

status

メッセージバッファから行が戻された場合は0、戻す行がない場合は1。

次の無名ブロックは、 emp テーブルを各行のカンマ区切り文字列としてメッセージバッファに書き出します。

EXEC DBMS_OUTPUT.SERVEROUTPUT(FALSE);

 

DECLARE

    v_emprec        VARCHAR2(120);

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    DBMS_OUTPUT.ENABLE;

    FOR i IN emp_cur LOOP

        v_emprec := i.empno || ',' || i.ename || ',' || i.job || ',' ||

            NVL(LTRIM(TO_CHAR(i.mgr,'9999')),'') || ',' || i.hiredate ||

            ',' || i.sal || ',' ||

            NVL(LTRIM(TO_CHAR(i.comm,'9990.99')),'') || ',' || i.deptno;

        DBMS_OUTPUT.PUT_LINE(v_emprec);

    END LOOP;

END;

次の無名ブロックは、メッセージバッファを読み取り、先の例で書き込まれた messages という名前のテーブルに挿入し messages messages の行 が表示されます。

CREATE TABLE messages (

    status          INTEGER,

    msg             VARCHAR2(100)

);

 

DECLARE

    v_line          VARCHAR2(100);

    v_status        INTEGER := 0;

BEGIN

    DBMS_OUTPUT.GET_LINE(v_line,v_status);

    WHILE v_status = 0 LOOP

        INSERT INTO messages VALUES(v_status, v_line);

        DBMS_OUTPUT.GET_LINE(v_line,v_status);

    END LOOP;

END;

 

SELECT msg FROM messages;

 

                               msg

-----------------------------------------------------------------

 7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

 7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

 7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

 7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

 7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

 7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

 7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

 7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

 7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

 7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

 7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

 7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

 7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

 7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

(14 rows)

 

3.9.5    GET_LINES

GET_LINES 手順では、コレクションにメッセージバッファから1行または複数行のテキストを検索する機能を提供します。行末の文字シーケンスで終了したテキストのみが取得 され ます。 これ は、 PUT_LINE を使用して生成された完全な行 、または一連の PUT 呼び出しに続いて NEW_LINE 呼び出し が生成された行 です。

GET_LINES( lines OUT CHARARR、 numlines IN OUT INTEGER)

パラメーター

lines

メッセージバッファからのテキスト行を受け取るテーブル。 lines 説明については、 CHARARR 参照してください

numlines IN

メッセージバッファから取得する行数。

numlines OUT

メッセージバッファから取得された実際の行数。 numlines の出力値が 入力値よりも小さい場合、メッセージバッファにはそれ以上線が残っていません。

次の例では、 GET_LINES プロシージャを 使用 して、メッセージ・バッファに配置され emp 表の すべての行を 配列に格納します。

EXEC DBMS_OUTPUT.SERVEROUTPUT(FALSE);

 

DECLARE

    v_emprec        VARCHAR2(120);

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    DBMS_OUTPUT.ENABLE;

    FOR i IN emp_cur LOOP

        v_emprec := i.empno || ',' || i.ename || ',' || i.job || ',' ||

            NVL(LTRIM(TO_CHAR(i.mgr,'9999')),'') || ',' || i.hiredate ||

            ',' || i.sal || ',' ||

            NVL(LTRIM(TO_CHAR(i.comm,'9990.99')),'') || ',' || i.deptno;

        DBMS_OUTPUT.PUT_LINE(v_emprec);

    END LOOP;

END;

 

DECLARE

    v_lines         DBMS_OUTPUT.CHARARR;

    v_numlines      INTEGER := 14;

    v_status        INTEGER := 0;

BEGIN

    DBMS_OUTPUT.GET_LINES(v_lines,v_numlines);

    FOR i IN 1..v_numlines LOOP

        INSERT INTO messages VALUES(v_numlines, v_lines(i));

    END LOOP;

END;

 

SELECT msg FROM messages;

 

                               msg

-----------------------------------------------------------------

 7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

 7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

 7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

 7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

 7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

 7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

 7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

 7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

 7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

 7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

 7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

 7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

 7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

 7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

(14 rows)

 

3.9.6    NEW_LINE

NEW_LINE 手順は、メッセージバッファに行末文字列を書き込みます。

NEW_LINE

パラメーター

NEW_LINE 手順は、パラメータを期待していません。

 

3.9.7    PUT

PUT 手順は、メッセージバッファに文字列を書き込みます。文字列の最後には、行末の文字シーケンスは書き込まれません。 NEW_LINE プロシージャーを 使用して、 行末の文字シーケンスを追加します。

PUT( item VARCHAR2)

パラメーター

item

メッセージバッファに書き込まれたテキスト。

次の例では、 PUT プロシージャを 使用して emp からカンマ区切りの従業員リストを表示します

DECLARE

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    FOR i IN emp_cur LOOP

        DBMS_OUTPUT.PUT(i.empno);

        DBMS_OUTPUT.PUT(',');

        DBMS_OUTPUT.PUT(i.ename);

        DBMS_OUTPUT.PUT(',');

        DBMS_OUTPUT.PUT(i.job);

        DBMS_OUTPUT.PUT(',');

        DBMS_OUTPUT.PUT(i.mgr);

        DBMS_OUTPUT.PUT(',');

        DBMS_OUTPUT.PUT(i.hiredate);

        DBMS_OUTPUT.PUT(',');

        DBMS_OUTPUT.PUT(i.sal);

        DBMS_OUTPUT.PUT(',');

        DBMS_OUTPUT.PUT(i.comm);

        DBMS_OUTPUT.PUT(',');

        DBMS_OUTPUT.PUT(i.deptno);

        DBMS_OUTPUT.NEW_LINE;

    END LOOP;

END;

 

7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

 

3.9.8    PUT_LINE

PUT_LINE 手順は、行末文字シーケンスを含むメッセージバッファへの単一の行を書き込みます。

PUT_LINE( item VARCHAR2)

パラメーター

item

メッセージバッファに書き込まれるテキスト。

次の例では、 PUT_LINE プロシージャを 使用して emp からカンマ区切りの従業員リストを表示します

DECLARE

    v_emprec        VARCHAR2(120);

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    FOR i IN emp_cur LOOP

        v_emprec := i.empno || ',' || i.ename || ',' || i.job || ',' ||

            NVL(LTRIM(TO_CHAR(i.mgr,'9999')),'') || ',' || i.hiredate ||

            ',' || i.sal || ',' ||

            NVL(LTRIM(TO_CHAR(i.comm,'9990.99')),'') || ',' || i.deptno;

        DBMS_OUTPUT.PUT_LINE(v_emprec);

    END LOOP;

END;

 

7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

 

3.9.9    SERVEROUTPUT

SERVEROUTPUT 手順は、コマンドラインの標準出力またはメッセージ・バッファにメッセージを指示する能力を提供します。 SERVEROUTPUT(TRUE) 設定すると ENABLE 暗黙の実行も実行され ます。

SERVEROUTPUT のデフォルト設定 は実装に依存します。たとえば、 Oracle SQL * Plusでは、 SERVEROUTPUT(FALSE) がデフォルトです。 PSQLでは、 SERVEROUTPUT(TRUE) がデフォルトです。また、 Oracle SQL * Plusでは Advanced Serverで実装されているストアド・プロシージャではなく 、SQL * Plusの SET コマンド を使用してこの設定を制御し ます

SERVEROUTPUT( stdout ブール)

パラメーター

stdout

後続の PUT PUT_LINE 、または NEW_LINE コマンドがコマンドラインの標準出力に直接テキストを送信する 場合は TRUE 設定し ます。テキストをメッセージバッファに送る場合は、FALSEに設定します。

次の無名ブロックは、最初のメッセージをコマンドラインに送信し、2番目のメッセージをメッセージバッファに送信します。

BEGIN

    DBMS_OUTPUT.SERVEROUTPUT(TRUE);

    DBMS_OUTPUT.PUT_LINE('This message goes to the command line');

    DBMS_OUTPUT.SERVEROUTPUT(FALSE);

    DBMS_OUTPUT.PUT_LINE('This message goes to the message buffer');

END;

 

This message goes to the command line

同じセッション内で次の匿名ブロックが実行された場合、前の例のメッセージバッファに格納されたメッセージはフラッシュされ、新しいメッセージと同様にコマンドラインに表示されます。

BEGIN

    DBMS_OUTPUT.SERVEROUTPUT(TRUE);

    DBMS_OUTPUT.PUT_LINE('Flush messages from the buffer');

END;

 

This message goes to the message buffer

Flush messages from the buffer

 

3.10 DBMS_PIPE

DBMS_PIPE パッケージ内または同一のデータベース・クラスタに接続されたセッションの間にパイプを介してメッセージを送信する能力を提供します。

DBMS_PIPE パッケージで 使用可能なプロシージャおよびファンクションを 次の表に示します。

Function/Procedure

Return Type

Description

CREATE_PIPE( pipename [, maxpipesize ] [, private ])

INTEGER

プライベートが 「偽」で あれば 、民間が 「true」(デフォルト)またはパブリック・パイプで あれば、明示的にプライベート・パイプを作成します

NEXT_ITEM_TYPE

INTEGER

受信したメッセージの次の項目のデータ型を決定します。

PACK_MESSAGE( アイテム )

該当なし

セッションのローカル・メッセージ・バッファ内 の項目を 配置し ます。

PURGE( パイプ名 )

該当なし

指定されたパイプから未受信メッセージを削除します。

RECEIVE_MESSAGE( pipename [, timeout ])

INTEGER

指定されたパイプからメッセージを取得します。

REMOVE_PIPE( pipename )

INTEGER

明示的に作成されたパイプを削除します。

RESET_BUFFER

該当なし

ローカルメッセージバッファをリセットします。

SEND_MESSAGE( pipename [, timeout ] [, maxpipesize ])

INTEGER

パイプでメッセージを送信します。

UNIQUE_SESSION_NAME

VARCHAR2

一意のセッション名を取得します。

UNPACK_MESSAGE( アイテム OUT)

該当なし

メッセージから次のデータ項目を型互換性のある変数itemに取得し ます

パイプは、暗黙的または明示的に分類されます。 参照が以前で作成されていないパイプ名に行われた場合 、暗黙的なパイプが 作成された CREATE_PIPE 機能。たとえば、 存在しないパイプ名を使用し SEND_MESSAGE 関数を実行すると、その名前で新しい暗黙のパイプが作成されます。 明示的なパイプを 使用して作成された CREATE_PIPE 最初のパラメータは、新しいパイプのパイプ名を指定することにより、機能を。

パイプは、プライベートまたはパブリックとして分類されます。 プライベート・パイプ 、パイプを作成したユーザーがアクセスすることができます。スーパーユーザーであっても、他のユーザーが作成したプライベートパイプにはアクセスできません。 パブリック・パイプは へのアクセス権があるすべてのユーザーがアクセスすることができ DBMS_PIPE パッケージを。

パブリック・パイプは、 CREATE_PIPE ファンクションを 使用 して3番目のパラメータを FALSE 設定する ことによってのみ作成でき FALSE CREATE_PIPE 機能は、第3のパラメータを設定することにより、プライベート・パイプを作成するために使用することができる TRUE または三番目のパラメータを省略することによって。すべての暗黙のパイプはプライベートです。

メッセージの個々のデータ項目または「行」は、最初 に、現在のセッションに固有の ローカルメッセージバッファ 組み込まれ ます PACK_MESSAGE 手順では、セッションのローカルメッセージバッファにメッセージを構築します。 SEND_MESSAGE 関数は、パイプを介してメッセージを送信するために使用されます。

メッセージの受信には、逆の操作が含まれます。 RECEIVE_MESSAGE 関数は、指定されたパイプからメッセージを取得するために使用されます。メッセージは、セッションのローカルメッセージバッファに書き込まれます。 UNPACK_MESSAGE 手順は、次に変数をプログラムするメッセージバッファからメッセージデータ項目を転送するために使用されます。パイプに複数のメッセージが含まれている場合、 RECEIVE_MESSAGE FIFO (first-in-first-out)順 のメッセージを取得します

各セッションは、 PACK_MESSAGE プロシージャで 作成されたメッセージ用の個別のメッセージバッファと RECEIVE_MESSAGE 関数で 取得されたメッセージを保持します 。したがって、メッセージは同じセッションで構築され、受信されることができます。ただし、連続した RECEIVE_MESSAGE 呼び出しが行われた 場合 、最後の RECEIVE_MESSAGE 呼び出し からのメッセージだけ がローカルメッセージバッファに保存されます。

 

3.10.1                  CREATE_PIPE

CREATE_PIPE 関数は、指定した名前で明示的にパブリック・パイプまたは明示的なプライベート・パイプを作成します。

status INTEGER CREATE_PIPE( pipename VARCHAR2

[、 maxpipesize INTEGER] [、 private BOOLEAN])

パラメーター

pipename

パイプの名前。

maxpipesize

パイプの最大容量(バイト単位)。デフォルトは8192バイトです。

private

FALSE 設定されている場合はパブリックパイプを作成し FALSE TRUE 設定されている場合、プライベートパイプを作成します 。これがデフォルトです。

status

操作によって返されるステータスコード。 0は作成が成功したことを示します。

次の例では、 messages という名前のプライベートパイプを作成し messages

DECLARE

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.CREATE_PIPE('messages');

    DBMS_OUTPUT.PUT_LINE('CREATE_PIPE status: ' || v_status);

END;

CREATE_PIPE status: 0

次の例では、 mailbox という名前のパブリックパイプを作成し mailbox

DECLARE

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.CREATE_PIPE('mailbox',8192,FALSE);

    DBMS_OUTPUT.PUT_LINE('CREATE_PIPE status: ' || v_status);

END;

CREATE_PIPE status: 0

 

3.10.2                  NEXT_ITEM_TYPE

NEXT_ITEM_TYPE 機能は、セッションのローカルメッセージバッファに取り出されたメッセージの次のデータ項目のデータ型を識別する整数コードを返します。 UNPACK_MESSAGE プロシージャを使用 して各アイテムがローカル・メッセージ・バッファから移動されると、 NEXT_ITEM_TYPE ファンクションは、次に使用可能なアイテムのデータ型コードを戻します。メッセージにアイテムが残っていない場合は、コード0が返されます。

typecode INTEGER NEXT_ITEM_TYPE

パラメーター

typecode

7 -3-1 に示すように、コードは、次のデータ項目のデータタイプを識別する

7 - 1 - 3つの NEXT_ITEM_TYPEデータ型コード

Type Code

Data Type

0

データ項目はこれ以上ありません

9

NUMBER

11

VARCHAR2

13

DATE

23

RAW

注意 Oracleデータベースと互換性がありません。 Oracleはデータ型に異なる番号付けシーケンスを割り当てます。

次の例は、 NUMBER 項目、 VARCHAR2 項目、 DATE 項目、および RAW 項目で パックされたパイプを示してい ます。 2番目の匿名ブロックは、 NEXT_ITEM_TYPE 関数を 使用して 各項目のタイプコードを表示します。

DECLARE

    v_number        NUMBER := 123;

    v_varchar       VARCHAR2(20) := 'Character data';

    v_date          DATE := SYSDATE;

    v_raw           RAW(4) := '21222324';

    v_status        INTEGER;

BEGIN

    DBMS_PIPE.PACK_MESSAGE(v_number);

    DBMS_PIPE.PACK_MESSAGE(v_varchar);

    DBMS_PIPE.PACK_MESSAGE(v_date);

    DBMS_PIPE.PACK_MESSAGE(v_raw);

    v_status := DBMS_PIPE.SEND_MESSAGE('datatypes');

    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);

EXCEPTION

    WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

        DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);

END;

 

SEND_MESSAGE status: 0

 

DECLARE

    v_number        NUMBER;

    v_varchar       VARCHAR2(20);

    v_date          DATE;

    v_timestamp     TIMESTAMP;

    v_raw           RAW(4);

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.RECEIVE_MESSAGE('datatypes');

    DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);

    DBMS_OUTPUT.PUT_LINE('----------------------------------');

 

    v_status := DBMS_PIPE.NEXT_ITEM_TYPE;

    DBMS_OUTPUT.PUT_LINE('NEXT_ITEM_TYPE: ' || v_status);

    DBMS_PIPE.UNPACK_MESSAGE(v_number);

    DBMS_OUTPUT.PUT_LINE('NUMBER Item   : ' || v_number);

    DBMS_OUTPUT.PUT_LINE('----------------------------------');

 

    v_status := DBMS_PIPE.NEXT_ITEM_TYPE;

    DBMS_OUTPUT.PUT_LINE('NEXT_ITEM_TYPE: ' || v_status);

    DBMS_PIPE.UNPACK_MESSAGE(v_varchar);

    DBMS_OUTPUT.PUT_LINE('VARCHAR2 Item : ' || v_varchar);

    DBMS_OUTPUT.PUT_LINE('----------------------------------');

 

    v_status := DBMS_PIPE.NEXT_ITEM_TYPE;

    DBMS_OUTPUT.PUT_LINE('NEXT_ITEM_TYPE: ' || v_status);

    DBMS_PIPE.UNPACK_MESSAGE(v_date);

    DBMS_OUTPUT.PUT_LINE('DATE Item     : ' || v_date);

    DBMS_OUTPUT.PUT_LINE('----------------------------------');

 

    v_status := DBMS_PIPE.NEXT_ITEM_TYPE;

    DBMS_OUTPUT.PUT_LINE('NEXT_ITEM_TYPE: ' || v_status);

    DBMS_PIPE.UNPACK_MESSAGE(v_raw);

    DBMS_OUTPUT.PUT_LINE('RAW Item      : ' || v_raw);

    DBMS_OUTPUT.PUT_LINE('----------------------------------');

 

    v_status := DBMS_PIPE.NEXT_ITEM_TYPE;

    DBMS_OUTPUT.PUT_LINE('NEXT_ITEM_TYPE: ' || v_status);

    DBMS_OUTPUT.PUT_LINE('---------------------------------');

EXCEPTION

    WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

        DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);

END;

 

RECEIVE_MESSAGE status: 0

----------------------------------

NEXT_ITEM_TYPE: 9

NUMBER Item   : 123

----------------------------------

NEXT_ITEM_TYPE: 11

VARCHAR2 Item : Character data

----------------------------------

NEXT_ITEM_TYPE: 13

DATE Item     : 02-OCT-07 11:11:43

----------------------------------

NEXT_ITEM_TYPE: 23

RAW Item      : 21222324

----------------------------------

NEXT_ITEM_TYPE: 0

 

3.10.3                  PACK_MESSAGE

PACK_MESSAGE 手順では、セッションのローカル・メッセージ・バッファにデータの項目を配置します。 PACK_MESSAGE は、 SEND_MESSAGE 呼び出しを 発行する前に少なくとも1回実行する必要があります

PACK_MESSAGE( item {DATE | NUMBER | VARCHAR2 | RAW})

RECEIVE_MESSAGE コール を使用してメッセージが取得されると UNPACK_MESSAGE プロシージャを 使用 してデータ項目を取得し ます。

パラメーター

item

許容可能なパラメーター・データ・タイプのいずれかに評価される式。この値は、セッションのローカルメッセージバッファに追加されます。

 

3.10.4                  PURGE

PURGE 手順は、指定された暗黙のパイプから未受信メッセージを削除します。

PURGE( pipename VARCHAR2)

明示的なパイプを削除 するには、 REMOVE_PIPE 関数を 使用し ます。

パラメーター

pipename

パイプの名前。

パイプ上に2つのメッセージが送信されます。

DECLARE

    v_status        INTEGER;

BEGIN

    DBMS_PIPE.PACK_MESSAGE('Message #1');

    v_status := DBMS_PIPE.SEND_MESSAGE('pipe');

    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);

 

    DBMS_PIPE.PACK_MESSAGE('Message #2');

    v_status := DBMS_PIPE.SEND_MESSAGE('pipe');

    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);

END;

 

SEND_MESSAGE status: 0

SEND_MESSAGE status: 0

最初のメッセージを受信して​​解凍する:

DECLARE

    v_item          VARCHAR2(80);

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.RECEIVE_MESSAGE('pipe',1);

    DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);

    DBMS_PIPE.UNPACK_MESSAGE(v_item);

    DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);

END;

 

RECEIVE_MESSAGE status: 0

Item: Message #1

パイプをパージします。

EXEC DBMS_PIPE.PURGE('pipe');

次のメッセージを取得しようとします。 RECEIVE_MESSAGE コールには、メッセージが利用できなかったので、それがタイムアウトを示すステータスコード1を返します。

DECLARE

    v_item          VARCHAR2(80);

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.RECEIVE_MESSAGE('pipe',1);

    DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);

END;

 

RECEIVE_MESSAGE status: 1

 

3.10.5                  RECEIVE_MESSAGE

RECEIVE_MESSAGE 関数は、指定されたパイプからメッセージを取得します。

status INTEGER RECEIVE_MESSAGE( pipename VARCHAR2

[、 timeout INTEGER])

パラメーター

pipename

パイプの名前。

timeout

待機時間(秒)。デフォルトは86400000(1000日)です。

status

操作によって返されるステータスコード。

可能なステータスコードは次のとおりです。

7 - 3から 2 RECEIVE_MESSAGEステータスコード

Status Code

Description

0

成功

1

タイムアウト

2

バッファーのメッセージが大きすぎます

 

3.10.6                  REMOVE_PIPE

REMOVE_PIPE 機能は、明示的なプライベートまたは明示的なパブリック・パイプを削除します。

status INTEGER REMOVE_PIPE( pipename VARCHAR2)

明示的に作成されたパイプ、つまり CREATE_PIPE 関数で 作成されたパイプを削除 するには、 REMOVE_PIPE 関数を 使用し ます。

パラメーター

pipename

パイプの名前。

status

操作によって返されるステータスコード。名前付きパイプが存在しない場合でも、ステータスコード0が返されます。

パイプ上に2つのメッセージが送信されます。

DECLARE

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.CREATE_PIPE('pipe');

    DBMS_OUTPUT.PUT_LINE('CREATE_PIPE status : ' || v_status);

 

    DBMS_PIPE.PACK_MESSAGE('Message #1');

    v_status := DBMS_PIPE.SEND_MESSAGE('pipe');

    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);

 

    DBMS_PIPE.PACK_MESSAGE('Message #2');

    v_status := DBMS_PIPE.SEND_MESSAGE('pipe');

    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);

END;

 

CREATE_PIPE status : 0

SEND_MESSAGE status: 0

SEND_MESSAGE status: 0

最初のメッセージを受信して​​解凍する:

DECLARE

    v_item          VARCHAR2(80);

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.RECEIVE_MESSAGE('pipe',1);

    DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);

    DBMS_PIPE.UNPACK_MESSAGE(v_item);

    DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);

END;

 

RECEIVE_MESSAGE status: 0

Item: Message #1

パイプを取り外す:

SELECT DBMS_PIPE.REMOVE_PIPE('pipe') FROM DUAL;

 

remove_pipe

-------------

           0

(1 row)

次のメッセージを取得しようとします。 RECEIVE_MESSAGE コールは、パイプが削除されていたので、それがタイムアウトを示すステータスコード1を返します。

DECLARE

    v_item          VARCHAR2(80);

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.RECEIVE_MESSAGE('pipe',1);

    DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);

END;

 

RECEIVE_MESSAGE status: 1

 

3.10.7                  RESET_BUFFER

RESET_BUFFER 手順は、バックバッファの先頭にセッションのローカル・メッセージ・バッファへの「ポインタ」にリセットされます。これは、後続の PACK_MESSAGE 呼び出しが、 RESET_BUFFER 呼び出しの 前にメッセージバッファーに存在していたデータ項目を上書きする PACK_MESSAGE となります

RESET_BUFFER

Johnへのメッセージは、ローカルメッセージバッファに書き込まれます。これは、 RESET_BUFFER を呼び出すことによってBobへのメッセージに置き換えられます 。メッセージはパイプで送信されます。

DECLARE

    v_status        INTEGER;

BEGIN

    DBMS_PIPE.PACK_MESSAGE('Hi, John');

    DBMS_PIPE.PACK_MESSAGE('Can you attend a meeting at 3:00, today?');

    DBMS_PIPE.PACK_MESSAGE('If not, is tomorrow at 8:30 ok with you?');

    DBMS_PIPE.RESET_BUFFER;

    DBMS_PIPE.PACK_MESSAGE('Hi, Bob');

    DBMS_PIPE.PACK_MESSAGE('Can you attend a meeting at 9:30, tomorrow?');

    v_status := DBMS_PIPE.SEND_MESSAGE('pipe');

    DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE status: ' || v_status);

END;

 

SEND_MESSAGE status: 0

Bobへのメッセージは、受信したメッセージに含まれています。

DECLARE

    v_item          VARCHAR2(80);

    v_status        INTEGER;

BEGIN

    v_status := DBMS_PIPE.RECEIVE_MESSAGE('pipe',1);

    DBMS_OUTPUT.PUT_LINE('RECEIVE_MESSAGE status: ' || v_status);

    DBMS_PIPE.UNPACK_MESSAGE(v_item);

    DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);

    DBMS_PIPE.UNPACK_MESSAGE(v_item);

    DBMS_OUTPUT.PUT_LINE('Item: ' || v_item);

END;

 

RECEIVE_MESSAGE status: 0

Item: Hi, Bob

Item: Can you attend a meeting at 9:30, tomorrow?

 

3.10.8                  SEND_MESSAGE

SEND_MESSAGE 関数は、指定されたパイプにセッションのローカルメッセージバッファからメッセージを送信します。

status SEND_MESSAGE( pipename VARCHAR2 [、 timeout INTEGER]

[、 maxpipesize INTEGER])

パラメーター

pipename

パイプの名前。

timeout

待機時間(秒)。デフォルトは86400000(1000日)です。

maxpipesize

パイプの最大容量(バイト単位)。デフォルトは8192バイトです。

status

操作によって返されるステータスコード。

可能なステータスコードは次のとおりです。

7 - 3から3つの SEND_MESSAGEステータスコード

Status Code

Description

0

成功

1

タイムアウト

3

機能が中断されました

 

3.10.9                  UNIQUE_SESSION_NAME

UNIQUE_SESSION_NAME 関数は、現在のセッションに固有の名前を返します。

name VARCHAR2 UNIQUE_SESSION_NAME

パラメーター

name

一意のセッション名。

次の匿名ブロックは一意のセッション名を取得して表示します。

DECLARE

    v_session       VARCHAR2(30);

BEGIN

    v_session := DBMS_PIPE.UNIQUE_SESSION_NAME;

    DBMS_OUTPUT.PUT_LINE('Session Name: ' || v_session);

END;

 

Session Name: PG$PIPE$5$2752

 

3.10.10               UNPACK_MESSAGE

UNPACK_MESSAGE 手順コピー指定されたプログラム変数にローカルメッセージバッファからメッセージのデータ項目。メッセージは、 UNPACK_MESSAGE を使用する前に RECEIVE_MESSAGE 関数を使用 してローカルメッセージバッファに配置する必要があります

UNPACK_MESSAGE( item OUT {DATE | NUMBER | VARCHAR2 | RAW})

パラメーター

item

ローカルメッセージバッファからデータ項目を受け取る型互換変数。

 

 

3.10.11               Comprehensive Example

次の例では、パイプを「メールボックス」として使用しています。メールボックスの作成、メールボックスへの複数項目メッセージの追加(最大3項目)、およびメールボックスの全内容の表示は、 mailbox という名前のパッケージに含まれてい mailbox

CREATE OR REPLACE PACKAGE mailbox

IS

    PROCEDURE create_mailbox;

    PROCEDURE add_message (

        p_mailbox   VARCHAR2,

        p_item_1    VARCHAR2,

        p_item_2    VARCHAR2 DEFAULT 'END',

        p_item_3    VARCHAR2 DEFAULT 'END'

    );

    PROCEDURE empty_mailbox (

        p_mailbox   VARCHAR2,

        p_waittime  INTEGER DEFAULT 10

    );

END mailbox;

 

CREATE OR REPLACE PACKAGE BODY mailbox

IS

    PROCEDURE create_mailbox

    IS

        v_mailbox   VARCHAR2(30);

        v_status    INTEGER;

    BEGIN

        v_mailbox := DBMS_PIPE.UNIQUE_SESSION_NAME;

        v_status := DBMS_PIPE.CREATE_PIPE(v_mailbox,1000,FALSE);

        IF v_status = 0 THEN

            DBMS_OUTPUT.PUT_LINE('Created mailbox: ' || v_mailbox);

        ELSE

            DBMS_OUTPUT.PUT_LINE('CREATE_PIPE failed - status: ' ||

                v_status);

        END IF;

    END create_mailbox;

 

    PROCEDURE add_message (

        p_mailbox   VARCHAR2,

        p_item_1    VARCHAR2,

        p_item_2    VARCHAR2 DEFAULT 'END',

        p_item_3    VARCHAR2 DEFAULT 'END'

    )

    IS

        v_item_cnt  INTEGER := 0;

        v_status    INTEGER;

    BEGIN

        DBMS_PIPE.PACK_MESSAGE(p_item_1);

        v_item_cnt := 1;

        IF p_item_2 != 'END' THEN

            DBMS_PIPE.PACK_MESSAGE(p_item_2);

            v_item_cnt := v_item_cnt + 1;

        END IF;

        IF p_item_3 != 'END' THEN

            DBMS_PIPE.PACK_MESSAGE(p_item_3);

            v_item_cnt := v_item_cnt + 1;

        END IF;

        v_status := DBMS_PIPE.SEND_MESSAGE(p_mailbox);

        IF v_status = 0 THEN

            DBMS_OUTPUT.PUT_LINE('Added message with ' || v_item_cnt ||

                ' item(s) to mailbox ' || p_mailbox);

        ELSE

            DBMS_OUTPUT.PUT_LINE('SEND_MESSAGE in add_message failed - ' ||

                'status: ' || v_status);

        END IF;

    END add_message;

 

    PROCEDURE empty_mailbox (

        p_mailbox   VARCHAR2,

        p_waittime  INTEGER DEFAULT 10

    )

    IS

        v_msgno     INTEGER DEFAULT 0;

        v_itemno    INTEGER DEFAULT 0;

        v_item      VARCHAR2(100);

        v_status    INTEGER;

    BEGIN

        v_status := DBMS_PIPE.RECEIVE_MESSAGE(p_mailbox,p_waittime);

        WHILE v_status = 0 LOOP

            v_msgno := v_msgno + 1;

            DBMS_OUTPUT.PUT_LINE('****** Start message #' || v_msgno ||

                ' ******');

            BEGIN

                LOOP

                    v_status := DBMS_PIPE.NEXT_ITEM_TYPE;

                    EXIT WHEN v_status = 0;

                    DBMS_PIPE.UNPACK_MESSAGE(v_item);

                    v_itemno := v_itemno + 1;

                    DBMS_OUTPUT.PUT_LINE('Item #' || v_itemno || ': ' ||

                        v_item);

                END LOOP;

                DBMS_OUTPUT.PUT_LINE('******* End message #' || v_msgno ||

                    ' *******');

                DBMS_OUTPUT.PUT_LINE('*');

                v_itemno := 0;

                v_status := DBMS_PIPE.RECEIVE_MESSAGE(p_mailbox,1);

            END;

        END LOOP;

        DBMS_OUTPUT.PUT_LINE('Number of messages received: ' || v_msgno);

        v_status := DBMS_PIPE.REMOVE_PIPE(p_mailbox);

        IF v_status = 0 THEN

            DBMS_OUTPUT.PUT_LINE('Deleted mailbox ' || p_mailbox);

        ELSE

            DBMS_OUTPUT.PUT_LINE('Could not delete mailbox - status: '

                || v_status);

        END IF;

    END empty_mailbox;

END mailbox;

以下は、 mailbox 内のプロシージャの実行を示してい mailbox 。最初のプロシージャは、 UNIQUE_SESSION_NAME ファンクション によって生成された名前を使用してパブリック・パイプを作成し ます。

EXEC mailbox.create_mailbox;

 

Created mailbox: PG$PIPE$13$3940

メールボックス名と同じデータベース内の、 mailbox パッケージと DBMS_PIPE パッケージ へのアクセス権を持つユーザーは、 メッセージを追加できます。

EXEC mailbox.add_message('PG$PIPE$13$3940','Hi, John','Can you attend a meeting at 3:00、今日? '、' - メアリー ');

 

Added message with 3 item(s) to mailbox PG$PIPE$13$3940

 

EXEC mailbox.add_message('PG$PIPE$13$3940','Don''t forget to submit your report','Thanks,','-- Joe');

 

Added message with 3 item(s) to mailbox PG$PIPE$13$3940

最後に、メールボックスの内容を空にすることができます。

EXEC mailbox.empty_mailbox('PG$PIPE$13$3940');

 

****** Start message #1 ******

Item #1: Hi, John

Item #2: Can you attend a meeting at 3:00, today?

Item #3: -- Mary

******* End message #1 *******

*

****** Start message #2 ******

Item #1: Don't forget to submit your report

Item #2: Thanks,

Item #3: Joe

******* End message #2 *******

*

Number of messages received: 2

Deleted mailbox PG$PIPE$13$3940

 

 

 

 

 

 

 

 

 

 

 

 

 

3.11 DBMS_PROFILER

DBMS_PROFILER パッケージには、PL / pgSQLのとセッションをプロファイリングパフォーマンス中に実行されているSPL文に関するパフォーマンス情報を収集し、保存します。以下の機能と手順を使用してプロファイリングツールを制御してください。

Function/Procedure

Return Type

Description

FLUSH_DATA

ステータスコードまたは例外

セッションを終了することなく、現在のセッションで収集されたパフォーマンスデータをフラッシュします(プロファイリングが続行されます)。

GET_VERSION( メジャー OUT, マイナー OUT)

該当なし

このパッケージのバージョン番号を返します。

INTERNAL_VERSION_CHECK

ステータスコード

プロファイラの現在のバージョンが現在のデータベースで動作することを確認します。

PAUSE_PROFILER

ステータスコードまたは例外

データ収集を一時停止する。

RESUME_PROFILER

ステータスコードまたは例外

データ収集を再開します。

START_PROFILER( run_comment , run_comment1 [, run_number OUT ])

ステータスコードまたは例外

データ収集を開始する。

STOP_PROFILER

ステータスコードまたは例外

データ収集を停止し、パフォーマンス・データを PLSQL_PROFILER_RAWDATA 表に フラッシュし ます。

DBMS_PROFILER パッケージ 内の関数は、 成功または失敗を示すステータスコードを返します。 DBMS_PROFILER 手順は、彼らが故障が発生した場合にのみ、例外を発生させます。関数によって返されるステータスコードとメッセージ、およびプロシージャによって生成された例外は、以下の表にリストされています。

Status Code

Message

Exception

Description

-1

error version

version_mismatch

プロファイラーのバージョンとデータベースは互換性がありません。

0

success

該当なし

操作は正常に完了しました。

1

error_param

profiler_error

操作のパラメータが正しくありません。

2

error_io

profiler_error

データフラッシュ操作が失敗しました。

 

3.11.1                  FLUSH_DATA

FLUSH_DATA 機能/手順は、プロファイラセッションを終了せずに、現在のセッションで収集されたデータをフラッシュします。データは、「Advanced Server Performance Features Guide」で説明されている表にフラッシュされます。関数とプロシージャのシグネチャは次のとおりです。

status INTEGER FLUSH_DATA

 

FLUSH_DATA

パラメーター

status

操作によって返されるステータスコード。

 

3.11.2                  GET_VERSION

GET_VERSION 手順は、のバージョンを返し DBMS_PROFILER 。プロシージャのシグネチャは次のとおりです。

GET_VERSION( major OUT INTEGER, minor OUT INTEGER)

パラメーター

major

DBMS_PROFILER のメジャー・バージョン番号

minor

DBMS_PROFILER のマイナー・バージョン番号

 

3.11.3                  INTERNAL_VERSION_CHECK

INTERNAL_VERSION_CHECK 機能は、現在のバージョンのことを確認 DBMS_PROFILER 現在のデータベースで動作します。関数のシグネチャは次のとおりです。

status INTEGER INTERNAL_VERSION_CHECK

 

パラメーター

status

操作によって返されるステータスコード。

 

3.11.4                  PAUSE_PROFILER

PAUSE_PROFILER 機能/手順は、プロファイリングセッションを一時停止します。関数とプロシージャのシグネチャは次のとおりです。

status INTEGER PAUSE_PROFILER

 

PAUSE_PROFILER

パラメーター

status

操作によって返されるステータスコード。

 

3.11.5                  RESUME_PROFILER

RESUME_PROFILER 機能/手順は、プロファイリングセッションを一時停止します。関数とプロシージャのシグネチャは次のとおりです。

status INTEGER RESUME_PROFILER

 

RESUME_PROFILER

パラメーター

status

操作によって返されるステータスコード。

3.11.6                  START_PROFILER

START_PROFILER 機能/手順は、データ収集セッションを開始します。関数とプロシージャのシグネチャは次のとおりです。

status lang = EN-US> INTEGER START_PROFILER( run_comment TEXT:= SYSDATE、

  run_comment1 TEXT:= '' [、 run_number OUT INTEGER])

 

START_PROFILER( run_comment TEXT:= SYSDATE、

  run_comment1 TEXT:= '' [、 run_number OUT INTEGER])

パラメーター

run_comment

プロファイラセッションのユーザー定義のコメント。デフォルト値は SYSDATE です。

run_comment1

プロファイラセッションの追加のユーザ定義コメント。デフォルト値は '' です。

run_number

プロファイラセッションのセッション番号。

status

操作によって返されるステータスコード。

 

3.11.7                  STOP_PROFILER

STOP_PROFILER 機能/手順は、プロファイリングセッションを停止しにパフォーマンス情報をフラッシュ DBMS_PROFILER テーブルとビュー。関数とプロシージャのシグネチャは次のとおりです。

status INTEGER STOP_PROFILER

 

STOP_PROFILER

パラメーター

status

操作によって返されるステータスコード。

 

3.11.8                  Using DBMS_PROFILER

DBMS_PROFILERパッケージは、プロファイリング・セッション中に実行されるPL / pgSQLおよびSPL文に関するパフォーマンス情報を収集して格納します。プロファイラによって提供されるテーブルとビューのパフォーマンス情報を確認できます。

DBMS_PROFILERは、プロファイリング・セッション内で実行されるPL / pgSQLまたはSPL文の各行に対して、パフォーマンス関連のカウンタおよびタイマーのセットを記録することによって機能します。カウンタとタイマーは、 SYS という名前のテーブルに格納されます PLSQL _ PROFILER _ DATA 。プロファイリング・セッションを完了すると、DBMS_PROFILERはセッション内で実行されるPL / pgSQLまたはSPLコードの各行のパフォーマンス統計表に行を書き込みます。たとえば、次の関数を実行するとします。

1 - CREATE OR REPLACE FUNCTION getBalance(acctNumber INTEGER)

2 - RETURNS NUMERIC AS $$

3 - DECLARE

4 -   result NUMERIC;

5 - BEGIN

6 -   SELECT INTO result balance FROM acct WHERE id = acctNumber;

7 -

8 -   IF (result IS NULL) THEN

9 -       RAISE INFO 'Balance is null';

10-   END IF;

11-

12-   RETURN result;

13- END;

14- $$ LANGUAGE 'plpgsql';

DBMS_PROFILERは、1つのを加算 PLSQL _ PROFILER _ DATA 内のコードの各行のエントリ getBalance (空白行およびコメントを含む)()関数。 SELECT 文に 対応するエントリは 正確に1回実行されます。実行には非常に短い時間が必要でした。一方、 RAISE INFO 文に 対応するエントリは、 一度実行されるか、まったく実行されません( balance 列の 値に応じて )。

この関数の行には実行可能なコードが含まれていないため、これらの行のパフォーマンス統計には常にゼロ値が含まれます。

プロファイリングセッションを開始するには、 style = 'font-size:11.0pt'> DBMS _ PROFILER START _ PROFILER 機能(または手順)。あなたが呼び出されたら START _ PROFILER 、Advanced Serverは、すべてのPL / pgSQLのか、SPL機能のプロファイル、プロシージャ、トリガ、またはあなたが停止または一時停止プロファイラを(呼び出すことによって、どちらかまで、あなたのセッションが実行される無名ブロックします STOP _ PROFILER または PAUSE _ PROFILER )。

プロファイラを起動(または再開)すると、プロファイラは、 START _ PROFILER (または RESUME _ PROFILER の呼び出し後に開始する関数/プロシージャ/トリガのパフォーマンス統計のみを収集することに注意することが重要 です。

プロファイラがアクティブな間、Advanced Serverはメモリ内に多数のタイマとカウンタを記録します。 STOP _ PROFILER (または FLUSH _ DATA )ファンクション/プロシージャ を起動すると DBMS _ PROFILER はこれらのタイマーおよびカウンタを3つのテーブルのセットに書き込みます。

さらに、DBMS_PROFILERはビュー SYS 定義します PLSQL _ PROFILER _ DATA のサブセット含まれ、 PLSQL _ PROFILER _ RAWDATA テーブル。

スーパーユーザー以外のユーザーはプロファイリング情報を収集することがありますが、スーパーユーザーがプロファイリングテーブル( SYS スキーマに 格納されている に対して特定の権限を付与しない限り、プロファイル情報は表示されません 。これにより、特権を持たないユーザーは、管理者が秘密を保持したいかもしれない情報を公開することなく、パフォーマンス統計を収集することができます。

 

3.11.8.1             Querying the DBMS_PROFILER Tables and View

次のステップバイステップの例では、DBMS_PROFILERを使用して、Advanced Serverとともに配布されたサンプル・データに含まれるプロシージャ、ファンクション、およびトリガーのパフォーマンス情報を取得します。

  1. EDB-PSQLコマンドラインを開き、Advanced Serverデータベースへの接続を確立します。 プロファイリングセッションを開始 するには、 EXEC ステートメントを 使用します

 

acctg=# EXEC dbms_profiler.start_profiler('profile list_emp');

 

EDB-SPL Procedure successfully completed

 

(注意: start_profiler() コールに は、DBMS_PROFILERがプロファイラー・セッションに関連付けるコメントが含まれています)。

 

  1. その後、呼び出し list _ emp 機能を:

 

acctg=# SELECT list_emp();

INFO:  EMPNO    ENAME

INFO:  -----    -------

INFO:  7369     SMITH

INFO:  7499     ALLEN

INFO:  7521     WARD

INFO:  7566     JONES

INFO:  7654     MARTIN

INFO:  7698     BLAKE

INFO:  7782     CLARK

INFO:  7788     SCOTT

INFO:  7839     KING

INFO:  7844     TURNER

INFO:  7876     ADAMS

INFO:  7900     JAMES

INFO:  7902     FORD

INFO:  7934     MILLER

 list_emp

----------

 

(1 row)

  1. dbms_profiler.stop_profiler 呼び出してプロファイリング・セッションを停止し dbms_profiler.stop_profiler

 

acctg=# EXEC dbms_profiler.stop_profiler;

 

EDB-SPL Procedure successfully completed

  1. dbms_profiler を使用して新しいセッションを開始し ます。 start_profiler 関数(その後に新しいコメントが続く):

 

acctg=# EXEC dbms_profiler.start_profiler('profile get_dept_name and emp_sal_trig');

 

EDB-SPL Procedure successfully completed

  1. get_dept_name 関数を 呼び出し ます。

 

acctg=# SELECT get_dept_name(10);         

 get_dept_name

---------------

 ACCOUNTING

(1 row)

 

  1. 実行 UPDATE 実行するトリガーを起こし文を:

 

acctg=# UPDATE memp SET sal = 500 WHERE empno = 7902;

INFO:  Updating employee 7902

INFO:  ..Old salary: 3000.00

INFO:  ..New salary: 500.00

INFO:  ..Raise     : -2500.00

INFO:   User enterprisedb updated employee(s) on 04-FEB-14

UPDATE 1

  1. プロファイリングセッションを終了し、パフォーマンス情報をプロファイリングテーブルにフラッシュします。

 

acctg=# EXEC dbms_profiler.stop_profiler;

 

EDB-SPL Procedure successfully completed

  1. さて、照会 plsql _ profiler _は runs ことで配置され、プロファイリングセッションのリストを表示するには、テーブルを runid

 

acctg=# SELECT * FROM plsql_profiler_runs;

 runid | related_run |  run_owner   |         run_date          |              run_comment               | run_total_time | run_system_info | run_comment1 | spare1

-------+-------------+--------------+---------------------------+----------------------------------------+----------------+-----------------+--------------+--------

     1 |             | enterprisedb | 04-FEB-14 09:32:48.874315 | profile list_emp                       |           4154 |                 |              |

     2 |             | enterprisedb | 04-FEB-14 09:41:30.546503 | profile get_dept_name and emp_sal_trig |           2088 |                 |              |

(2 rows)

  1. 照会 plsql _ profiler _ units 各ユニット(各関数、プロシージャ、またはトリガー)によって消費される時間の量を表示する表:

 

acctg=# SELECT * FROM plsql_profiler_units;

 runid | unit_number | unit_type |  unit_owner  |            unit_name            | unit_timestamp | total_time | spare1 | spare2

-------+-------------+-----------+--------------+---------------------------------+----------------+------------+--------+--------

     1 |       16999 | FUNCTION  | enterprisedb | list_emp()                      |                |          4 |        |      

     2 |       17002 | FUNCTION  | enterprisedb | user_audit_trig()               |                |          1 |        |      

     2 |       17000 | FUNCTION  | enterprisedb | get_dept_name(p_deptno numeric) |                |          1 |        |      

     2 |       17004 | FUNCTION  | enterprisedb | emp_sal_trig()                  |                |          1 |        |      

(4 rows)

  1. 照会 plsql _ profiler _ rawdata 待機イベント・カウンタのリストを表示し、イベント時間を待つために、テーブルを:

 

acctg=# SELECT runid, sourcecode, func_oid, line_number, exec_count, tuples_returned, time_total FROM plsql_profiler_rawdata;

runid |                            sourcecode                            | func_oid | line_number | exec_count | tuples_returned | time_total

-------+------------------------------------------------------------------+----------+-------------+------------+-----------------+------------

     1 | DECLARE                                                          |    16999 |           1 |          0 |               0 |          0

     1 |     v_empno         NUMERIC(4);                                  |    16999 |           2 |          0 |               0 |          0

     1 |     v_ename         VARCHAR(10);                                 |    16999 |           3 |          0 |               0 |          0

     1 |     emp_cur CURSOR FOR                                           |    16999 |           4 |          0 |               0 |          0

     1 |         SELECT empno, ename FROM memp ORDER BY empno;            |    16999 |           5 |          0 |               0 |          0

     1 | BEGIN                                                            |    16999 |           6 |          0 |               0 |          0

     1 |     OPEN emp_cur;                                                |    16999 |           7 |          0 |               0 |          0

     1 |     RAISE INFO 'EMPNO    ENAME';                                 |    16999 |           8 |          1 |               0 |   0.001621

     1 |     RAISE INFO '-----    -------';                               |    16999 |           9 |          1 |               0 |   0.000301

     1 |     LOOP                                                         |    16999 |          10 |          1 |               0 |    4.6e-05

     1 |         FETCH emp_cur INTO v_empno, v_ename;                     |    16999 |          11 |          1 |               0 |   0.001114

     1 |         EXIT WHEN NOT FOUND;                                     |    16999 |          12 |         15 |               0 |   0.000206

     1 |         RAISE INFO '%     %', v_empno, v_ename;                  |    16999 |          13 |         15 |               0 |    8.3e-05

     1 |     END LOOP;                                                    |    16999 |          14 |         14 |               0 |   0.000773

     1 |     CLOSE emp_cur;                                               |    16999 |          15 |          0 |               0 |          0

     1 |     RETURN;                                                      |    16999 |          16 |          1 |               0 |      1e-05

     1 | END;                                                             |    16999 |          17 |          1 |               0 |          0

     1 |                                                                  |    16999 |          18 |          0 |               0 |          0

     2 | DECLARE                                                          |    17002 |           1 |          0 |               0 |          0

     2 |     v_action        VARCHAR(24);                                 |    17002 |           2 |          0 |               0 |          0

     2 |     v_text          TEXT;                                        |    17002 |           3 |          0 |               0 |          0

     2 | BEGIN                                                            |    17002 |           4 |          0 |               0 |          0

     2 |     IF TG_OP = 'INSERT' THEN                                     |    17002 |           5 |          0 |               0 |          0

     2 |         v_action := ' added employee(s) on ';                    |    17002 |           6 |          1 |               0 |   0.000143

     2 |     ELSIF TG_OP = 'UPDATE' THEN                                  |    17002 |           7 |          0 |               0 |          0

     2 |         v_action := ' updated employee(s) on ';                  |    17002 |           8 |          0 |               0 |          0

     2 |     ELSIF TG_OP = 'DELETE' THEN                                  |    17002 |           9 |          1 |               0 |    3.2e-05

     2 |         v_action := ' deleted employee(s) on ';                  |    17002 |          10 |          0 |               0 |          0

     2 |     END IF;                                                      |    17002 |          11 |          0 |               0 |          0

     2 |     v_text := 'User ' || USER || v_action || CURRENT_DATE;       |    17002 |          12 |          0 |               0 |          0

     2 |     RAISE INFO ' %', v_text;                                     |    17002 |          13 |          1 |               0 |   0.000383

     2 |     RETURN NULL;                                                 |    17002 |          14 |          1 |               0 |    6.3e-05

     2 | END;                                                             |    17002 |          15 |          1 |               0 |    3.6e-05

     2 |                                                                  |    17002 |          16 |          0 |               0 |          0

     2 | DECLARE                                                          |    17000 |           1 |          0 |               0 |          0

     2 |     v_dname         VARCHAR(14);                                 |    17000 |           2 |          0 |               0 |          0

     2 | BEGIN                                                            |    17000 |           3 |          0 |               0 |          0

     2 |     SELECT INTO v_dname dname FROM dept WHERE deptno = p_deptno; |    17000 |           4 |          0 |               0 |          0

     2 |     RETURN v_dname;                                              |    17000 |           5 |          1 |               0 |   0.000647

     2 |     IF NOT FOUND THEN                                            |    17000 |           6 |          1 |               0 |    2.6e-05

     2 |         RAISE INFO '無効な部門番号%'、p_deptno; | 17000 | 7 | 0 | 0 | 0

     2 |         RETURN '';                                               |    17000 |           8 |          0 |               0 |          0

     2 |     END IF;                                                      |    17000 |           9 |          0 |               0 |          0

     2 | END;                                                             |    17000 |          10 |          0 |               0 |          0

     2 |                                                                  |    17000 |          11 |          0 |               0 |          0

     2 | DECLARE                                                          |    17004 |           1 |          0 |               0 |          0

     2 |     sal_diff       NUMERIC(7,2);                                 |    17004 |           2 |          0 |               0 |          0

     2 | BEGIN                                                            |    17004 |           3 |          0 |               0 |          0

     2 |     IF TG_OP = 'INSERT' THEN                                     |    17004 |           4 |          0 |               0 |          0

     2 |         RAISE INFO 'Inserting employee %', NEW.empno;            |    17004 |           5 |          1 |               0 |    8.4e-05

     2 |         RAISE INFO '..New salary: %', NEW.sal;                   |    17004 |           6 |          0 |               0 |          0

     2 |         RETURN NEW;                                              |    17004 |           7 |          0 |               0 |          0

     2 |     END IF;                                                      |    17004 |           8 |          0 |               0 |          0

     2 |     IF TG_OP = 'UPDATE' THEN                                     |    17004 |           9 |          0 |               0 |          0

     2 |         sal_diff := NEW.sal - OLD.sal;                           |    17004 |          10 |          1 |               0 |   0.000355

     2 |         RAISE INFO 'Updating employee %', OLD.empno;             |    17004 |          11 |          1 |               0 |   0.000177

     2 |         RAISE INFO '..Old salary: %', OLD.sal;                   |    17004 |          12 |          1 |               0 |    5.5e-05

     2 |         RAISE INFO '..New salary: %', NEW.sal;                   |    17004 |          13 |          1 |               0 |    3.1e-05

     2 |         RAISE INFO '..Raise     : %', sal_diff;                  |    17004 |          14 |          1 |               0 |    2.8e-05

     2 |         RETURN NEW;                                              |    17004 |          15 |          1 |               0 |    2.7e-05

     2 |     END IF;                                                      |    17004 |          16 |          1 |               0 |      1e-06

     2 |     IF TG_OP = 'DELETE' THEN                                     |    17004 |          17 |          0 |               0 |          0

     2 |         RAISE INFO 'Deleting employee %', OLD.empno;             |    17004 |          18 |          0 |               0 |          0

     2 |         RAISE INFO '..Old salary: %', OLD.sal;                   |    17004 |          19 |          0 |               0 |          0

     2 |         RETURN OLD;                                              |    17004 |          20 |          0 |               0 |          0

     2 |     END IF;                                                      |    17004 |          21 |          0 |               0 |          0

     2 | END;                                                             |    17004 |          22 |          0 |               0 |          0

     2 |                                                                  |    17004 |          23 |          0 |               0 |          0

(68 rows)

                                                                                                                   

  1. 照会 plsql _ profiler _ data で見つかった情報のサブセット確認するビュー plsql _ profiler _ rawdata テーブル:

 

acctg=# SELECT * FROM plsql_profiler_data;

runid | unit_number | line# | total_occur | total_time | min_time | max_time | spare1 | spare2 | spare3 | spare4

-------+-------------+-------+-------------+------------+----------+----------+--------+--------+--------+--------

     1 |       16999 |     1 |           0 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |     2 |           0 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |     3 |           0 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |     4 |           0 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |     5 |           0 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |     6 |           0 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |     7 |           0 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |     8 | 1 | 0.001621 | 0.001621 | 0.001621 | | | |

     1 |       16999 |     9 |           1 |   0.000301 | 0.000301 | 0.000301 |        |        |        |      

     1 |       16999 |    10 |           1 |    4.6e-05 |  4.6e-05 |  4.6e-05 |        |        |        |      

     1 |       16999 |    11 |           1 |   0.001114 | 0.001114 | 0.001114 |        |        |        |      

     1 |       16999 |    12 |          15 |   0.000206 |    5e-06 |  7.8e-05 |        |        |        |      

     1 |       16999 |    13 |          15 |    8.3e-05 |    2e-06 |  4.7e-05 |        |        |        |      

     1 |       16999 |    14 |          14 |   0.000773 |  4.7e-05 | 0.000116 |        |        |        |      

     1 |       16999 |    15 |           0 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |    16 |           1 |      1e-05 |    1e-05 |    1e-05 |        |        |        |      

     1 |       16999 |    17 |           1 |          0 |        0 |        0 |        |        |        |      

     1 |       16999 |    18 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |     1 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |     2 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |     3 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |     4 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |     5 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |     6 |           1 |   0.000143 | 0.000143 | 0.000143 |        |        |        |      

     2 |       17002 |     7 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |     8 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |     9 |           1 |    3.2e-05 |  3.2e-05 |  3.2e-05 |        |        |        |      

     2 |       17002 |    10 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |    11 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17002 |    12 |           0 |          0 |        0 |        0 |        |        |        |       

     2 |       17002 |    13 |           1 |   0.000383 | 0.000383 | 0.000383 |        |        |        |      

     2 |       17002 |    14 |           1 |    6.3e-05 |  6.3e-05 |  6.3e-05 |        |        |        |      

     2 |       17002 |    15 |           1 |    3.6e-05 |  3.6e-05 |  3.6e-05 |        |        |        |      

     2 |       17002 |    16 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |     1 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |     2 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |     3 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |     4 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |     5 |           1 |   0.000647 | 0.000647 | 0.000647 |        |        |        |       

     2 |       17000 |     6 |           1 |    2.6e-05 |  2.6e-05 |  2.6e-05 |        |        |        |      

     2 |       17000 |     7 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |     8 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |     9 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |    10 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17000 |    11 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |     1 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |     2 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |     3 |           0 |          0 |        0 |        0 |        |        |        |       

     2 |       17004 |     4 | 0 | 0 | 0 | 0 | | | |

     2 |       17004 |     5 |           1 |    8.4e-05 |  8.4e-05 |  8.4e-05 |        |        |        |      

     2 |       17004 |     6 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |     7 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |     8 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |     9 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |    10 |           1 |   0.000355 | 0.000355 | 0.000355 |        |        |        |      

     2 |       17004 |    11 |           1 |   0.000177 | 0.000177 | 0.000177 |        |        |        |      

     2 |       17004 |    12 |           1 |    5.5e-05 |  5.5e-05 |  5.5e-05 |        |        |        |      

     2 |       17004 |    13 |           1 |    3.1e-05 |  3.1e-05 |  3.1e-05 |        |        |        |       

     2 |       17004 |    14 |           1 |    2.8e-05 |  2.8e-05 |  2.8e-05 |        |        |        |      

     2 |       17004 |    15 |           1 |    2.7e-05 |  2.7e-05 |  2.7e-05 |        |        |        |      

     2 |       17004 |    16 |           1 |      1e-06 |    1e-06 |    1e-06 |        |        |        |      

     2 |       17004 |    17 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |    18 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |    19 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |    20 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |    21 |           0 |          0 |        0 |        0 |        |        |        |      

     2 |       17004 |    22 |           0 |          0 |        0 |        0 |        |        |        |       

     2 |       17004 |    23 |           0 |          0 |        0 |        0 |        |        |        |      

(68 rows)

 

 

3.11.8.2             DBMS_PROFILER - Reference

Advanced Serverインストーラは、PL / SQLパフォーマンス・プロファイル情報を確認するために問合せできる次の表およびビューを作成します。

Table Name

Description

PLSQL_PROFILER_RUNS

runid で整理されたすべてのプロファイラ実行に関する情報を含むテーブル

PLSQL_PROFILER_UNITS

ユニットごとに整理されたすべてのプロファイラ実行に関する情報を含むテーブル。

PLSQL_PROFILER_DATA

パフォーマンス統計を含むビュー。

PLSQL_PROFILER_RAWDATA

DRITAカウンタとタイマー のパフォーマンス統計 拡張パフォーマンス統計を 含むテーブル

 

3.11.8.2.1           PLSQL_PROFILER_RUNS

PLSQL_PROFILER_RUNS テーブルには、次の列が含まれています。

Column

Data Type

Description

runid

INTEGER (NOT NULL)

一意の識別子( スタイル= 'フォントサイズ:9.0pt'> plsql_profiler_runnumber

related_run

INTEGER

関連する実行 runid

run_owner

TEXT

プロファイリングセッションを記録した役割。

run_date

TIMESTAMP WITHOUT TIME ZONE

プロファイリングセッション開始時刻。

run_comment

TEXT

この実行に関連するユーザーのコメント

run_total_time

BIGINT

実行時間(マイクロ秒単位)

run_system_info

TEXT

現在未使用

run_comment1

TEXT

追加のユーザーコメント

spare1

TEXT

現在未使用

 

3.11.8.2.2           PLSQL_PROFILER_UNITS

PLSQL _ PROFILER _ UNITS テーブルには、次の列が含まれています。

Column

Data Type

Description

runid

INTEGER

一意の識別子( plsql_profiler_runnumber

unit_number

OID

ユニットを識別するpg_procテーブルの行のOIDに対応します。

unit_type

TEXT

PL / SQLファンクション、プロシージャ、トリガーまたは無名ブロック

unit_owner

TEXT

ユニットを所有する役割のアイデンティティ。

unit_name

TEXT

ユニットの完全な署名。

unit_timestamp

TIMESTAMP WITHOUT TIME ZONE

ユニットの作成日(現在はNULL)。

total_time

BIGINT

ユニット内で費やされた時間(ミリ秒単位)

spare1

BIGINT

現在未使用

spare2

BIGINT

現在未使用

 

3.11.8.2.3           PLSQL_PROFILER_DATA

PLSQL _ PROFILER _ DATA ビューには、次の列が含まれています。

Column

Data Type

Description

runid

INTEGER

一意の識別子( plsql_profiler_runnumber

unit_number

OID

現在の行を含むユニットのオブジェクトID。

line#

INTEGER

プロファイルされたワークロードの現在の行番号。

total_occur

BIGINT

行が実行された回数。

total_time

DOUBLE PRECISION

行の実行に費やされた時間(秒単位)

min_time

DOUBLE PRECISION

行の最小実行時間。

max_time

DOUBLE PRECISION

行の最大実行時間。

spare1

NUMBER

現在未使用

spare2

NUMBER

現在未使用

spare3

NUMBER

現在未使用

spare4

NUMBER

現在未使用

 

3.11.8.2.4           PLSQL_PROFILER_RAWDATA

PLSQL _ PROFILER _ RAWDATA テーブルには、中に発見された統計情報が含まれてい PLSQL _ PROFILER _ DATA ビューだけでなく、DRITAカウンタとタイマーによって返されたパフォーマンス統計を。

Column

Data Type

Description

runid

INTEGER

実行識別子(plsql_profiler_runnumber)。

sourcecode

TEXT

プロファイルされたコードの個々の行。

func_oid

OID

現在の行を含むユニットのオブジェクトID。

line_number

INTEGER

プロファイルされたワークロードの現在の行番号。

exec_count

BIGINT

行が実行された回数。

time_total

DOUBLE PRECISION

行の実行に費やされた時間(秒単位)

time_shortest

DOUBLE PRECISION

行の最小実行時間。

time_longest

DOUBLE PRECISION

行の最大実行時間。

tuples_returned

BIGINT

現在未使用

num_scans

BIGINT

現在未使用

tuples_fetched

BIGINT

現在未使用

tuples_inserted

BIGINT

現在未使用

tuples_updated

BIGINT

現在未使用

tuples_deleted

BIGINT

現在未使用

blocks_fetched

BIGINT

現在未使用

blocks_hit

BIGINT

現在未使用

wal_write

BIGINT

サーバは、先読みログバッファへの書き込みを待っています(この値が高いと予想します)。

wal_flush

BIGINT

サーバーは先読みログがディスクにフラッシュするまで待機しています。

wal_file_sync

BIGINT

サーバーは先読みログが(デフォルトでは 'fsync'であるwal_sync_methodパラメーターに関連して)ディスクに同期するのを待っていました。このパラメーターをopen_syncに変更するとパフォーマンスが向上します。

buffer_free_list_lock_acquire

BIGINT

サーバーは、フリー・バッファーのリスト(共用メモリー内)へのアクセスを同期させる短期間のロックを待っていました。

shmem_index_lock_acquire

BIGINT

サーバーは共有メモリー・マップへのアクセスを同期させる短期間のロックを待っていました。

oid_gen_lock_acquire

BIGINT

サーバーは、次に利用可能なOID(オブジェクトID)へのアクセスを同期させる短期間のロックを待機しました。

xid_gen_lock_acquire

BIGINT

サーバーは、次に利用可能なトランザクションIDへのアクセスを同期させる短期間のロックを待機しました。

proc_array_lock_acquire

BIGINT

  サーバーは、プロセスアレイへのアクセスを同期させる短期間のロックを待っていました

sinval_lock_acquire

BIGINT

サーバーは、キャッシュ無効化状態へのアクセスを同期させる短期間のロックを待機しました。

freespace_lock_acquire

BIGINT

サーバーは、フリースペースマップへのアクセスを同期させる短期間のロックを待っていました。

wal_insert_lock_acquire

BIGINT

サーバーは、先読みログへの書き込みアクセスを同期させる短期間のロックを待機しました。数値が大きいと、WALバッファのサイズが小さすぎる可能性があります。

wal_write_lock_acquire

BIGINT

サーバーは、先読みログのフラッシュを同期する短期間のロックを待機しています。

control_file_lock_acquire

BIGINT

サーバーは、制御ファイルへの書き込みアクセスを同期する短期間のロックを待っていました(これは通常は低い数値です)。

checkpoint_lock_acquire

BIGINT

サーバープロセスは、同時のチェックポイントを防止する短期間のロックを待機しました。

clog_control_lock_acquire

BIGINT

サーバーは、コミット・ログへのアクセスを同期させる短期間のロックを待機しました。

subtrans_control_lock_acquire

BIGINT

サーバーは、サブトランザクション・ログへのアクセスを同期させる短期ロックを待機しました。

multi_xact_gen_lock_acquire

BIGINT

サーバーは、次の利用可能なマルチトランザクションIDへのアクセスを同期する短期間のロックを待っていました(SELECT ... FOR SHAREステートメントが実行されたとき)。

multi_xact_offset_lock_acquire

BIGINT

サーバーは、(SELECT ... FOR SHAREステートメントが実行されたときに)マルチトランザクション・オフセット・ファイルへのアクセスを同期させる短期間のロックを待機しました。

multi_xact_member_lock_acquire

BIGINT

サーバーは、(SELECT ... FOR SHAREステートメントが実行されたときに)マルチトランザクションメンバーファイルへのアクセスを同期する短期間のロックを待機しました。

rel_cache_init_lock_acquire

BIGINT

サーバーは、同時リレーションキャッシュのロード/アンロードを防ぐ短期間のロックを待機しました。

bgwriter_communication_lock_acquire

BIGINT

bgwriter(バックグラウンドライター)プロセスは、bgwriterとバックエンドプロセスの間でメッセージを同期させる短期間のロックを待っていました。

two_phase_state_lock_acquire

BIGINT

サーバーは、準備されたトランザクションのリストへのアクセスを同期させる短期間のロックを待機しました。

tablespace_create_lock_acquire

BIGINT

サーバーは、CREATE TABLESPACEまたはDROP TABLESPACEコマンドの同時実行を妨げる短期間のロックを待っていました。

btree_vacuum_lock_acquire

BIGINT

サーバーは、次の使用可能な真空サイクルIDへのアクセスを同期させる短期間のロックを待機しました。

add_in_shmem_lock_acquire

BIGINT

現在未使用

autovacuum_lock_acquire

BIGINT

サーバは、共有自動バキューム状態へのアクセスを同期させる短期間のロックを待っていました。

autovacuum_schedule_lock_acquire

BIGINT

サーバーは、自動バキューム・スケジュールへのアクセスを同期させる短期間のロックを待機しました。

syncscan_lock_acquire

BIGINT

サーバーは、同期スキャンを調整する短期間のロックを待っていました。

icache_lock_acquire

BIGINT

サーバーは、InfiniteCache状態へのアクセスを同期させる短期間のロックを待機しました

breakpoint_lock_acquire

BIGINT

サーバーは、デバッガのブレークポイントリストへのアクセスを同期させる短期間のロックを待機しました。

lwlock_acquire

BIGINT

サーバーは、このセクションの他の場所では説明されていない短期間のロックを待機しています。

db_file_read

BIGINT

サーバープロセスが(ディスクからの)読み取りの完了を待っています。

db_file_write

BIGINT

サーバープロセスがディスクへの書き込みの完了を待っています。

db_file_sync

BIGINT

サーバープロセスは、オペレーティングシステムがディスクへのすべての変更をフラッシュするのを待っていました。

db_file_extend

BIGINT

サーバープロセスがオペレーティングシステムを待っていて、新しいページをファイルの最後に追加しました。

sql_parse

BIGINT

現在未使用

query_plan

BIGINT

サーバーがクエリプランを生成しました。

infinitecache_read

BIGINT

サーバーは、無限キャッシュ読み取り要求を待機しています。

infinitecache_write

BIGINT

サーバーは、無限キャッシュ書き込み要求を待機しています。

wal_write_time

BIGINT

サーバが先読みログバッファへの書き込みを待っていた時間(この値が高いと想定)。

wal_flush_time

BIGINT

サーバーが先読みログがディスクにフラッシュするまで待機した時間。

wal_file_sync_time

BIGINT

サーバがwrite-aheadログをディスクに同期するまで待機した時間(デフォルトでは 'fsync'であるwal_sync_methodパラメータに関連します。このパラメータをopen_syncに変更するとパフォーマンスが向上します)。

buffer_free_list_lock_acquire_time

BIGINT

空きバッファのリスト(共有メモリ内)へのアクセスを同期させる短期ロックがサーバーによって待機された時間。

shmem_index_lock_acquire_time

BIGINT

サーバーが共有メモリー・マップへのアクセスを同期させる短期ロックを待った時間。

oid_gen_lock_acquire_time

BIGINT

次回使用可能なOID(オブジェクトID)へのアクセスを同期させる短期間のロックをサーバーが待機した時間。

xid_gen_lock_acquire_time

BIGINT

次回使用可能なトランザクションIDへのアクセスを同期させる短期間のロックをサーバーが待機した時間。

proc_array_lock_acquire_time

BIGINT

プロセスアレイへのアクセスを同期させる短期間のロックをサーバーが待機した時間。

sinval_lock_acquire_time

BIGINT

サーバーがキャッシュ無効化状態へのアクセスを同期させる短期間のロックを待機した時間。

freespace_lock_acquire_time

BIGINT

空き領域マップへのアクセスを同期する短期間のロックをサーバーが待機した時間。

wal_insert_lock_acquire_time

BIGINT

先読みログへの書き込みアクセスを同期させる短期ロックがサーバーによって待機された時間。数値が大きいと、WALバッファのサイズが小さすぎる可能性があります。

wal_write_lock_acquire_time

BIGINT

先読みログのフラッシュを同期する短期ロックがサーバーによって待機された時間。

control_file_lock_acquire_time

BIGINT

サーバーが制御ファイルへの書き込みアクセスを同期する短期間のロックを待っていた時間(通常は、これは低い数値です)。

checkpoint_lock_acquire_time

BIGINT

同時チェックポイントを防ぐ短期間のロックをサーバープロセスが待機した時間。

clog_control_lock_acquire_time

BIGINT

コミット・ログへのアクセスを同期させる短期ロックがサーバーによって待機された時間。

subtrans_control_lock_acquire_time

BIGINT

サーバーがサブトランザクション・ログへのアクセスを同期させる短期ロックを待った時間。

multi_xact_gen_lock_acquire_time

BIGINT

次の使用可能なマルチトランザクションIDへのアクセスを同期する短期間のロックをサーバーが待機した時間(SELECT ... FOR SHAREステートメントが実行されたとき)。

multi_xact_offset_lock_acquire_time

BIGINT

(SELECT ... FOR SHARE文が実行されたときに)マルチトランザクション・オフセット・ファイルへのアクセスを同期する短期ロックがサーバーによって待機された時間。

multi_xact_member_lock_acquire_time

BIGINT

(SELECT ... FOR SHARE文が実行されたときに)マルチ・トランザクション・メンバー・ファイルへのアクセスを同期する短期ロックがサーバーによって待機された時間。

rel_cache_init_lock_acquire_time

BIGINT

同時のリレーションキャッシュのロード/アンロードを防ぐ短期ロックがサーバーによって待機された時間。

bgwriter_communication_lock_acquire_time

BIGINT

bgwriter(バックグラウンドライター)プロセスがbgwriterとバックエンドプロセスの間でメッセージを同期させる短期間のロックを待っていた時間。

two_phase_state_lock_acquire_time

BIGINT

準備されたトランザクションのリストへのアクセスを同期させる短期間のロックをサーバーが待機した時間。

tablespace_create_lock_acquire_time

BIGINT

サーバーがCREATE TABLESPACEコマンドまたはDROP TABLESPACEコマンドを同時に実行できない短期間のロックを待機した時間。

btree_vacuum_lock_acquire_time

BIGINT

次回使用可能な真空サイクルIDへのアクセスを同期させる短期間のロックをサーバーが待機した時間。

add_in_shmem_lock_acquire_time

BIGINT

廃止/未使用

autovacuum_lock_acquire_time

BIGINT

共有自動バキューム状態へのアクセスを同期する短期間のロックをサーバーが待機した時間。

autovacuum_schedule_lock_acquire_time

BIGINT

自動バキューム・スケジュールへのアクセスを同期させる短期間のロックをサーバーが待機した時間。

syncscan_lock_acquire_time

BIGINT

同期スキャンを調整する短期間のロックをサーバーが待機した時間。

icache_lock_acquire_time

BIGINT

InfiniteCache状態へのアクセスを同期させる短期間のロックをサーバーが待機した時間。

breakpoint_lock_acquire_time

BIGINT

サーバーがデバッガー・ブレークポイント・リストへのアクセスを同期させる短期ロックを待った時間。

lwlock_acquire_time

BIGINT

サーバーがこのセクションの他の場所で説明されていない短期間のロックを待機した時間。

db_file_read_time

BIGINT

サーバープロセスが(ディスクからの)読み取りの完了を待っていた時間。

db_file_write_time

BIGINT

サーバー処理がディスクへの書き込みの完了を待っていた時間。

db_file_sync_time

BIGINT

オペレーティングシステムがディスクへのすべての変更をフラッシュするのをサーバープロセスが待機した時間。

db_file_extend_time

BIGINT

サーバープロセスがオペレーティングシステムを待機していた時間。 ファイルの最後に新しいページを追加する。

sql_parse_time

BIGINT

サーバーがSQLステートメントを解析した時間。

query_plan_time

BIGINT

サーバーがSQLステートメントの実行計画を計算した時間。

infinitecache_read_time

BIGINT

サーバーが無期限キャッシュ読み取り要求を待機していた時間。

infinitecache_write_time

BIGINT

サーバーが無期限キャッシュ書き込み要求を待機していた時間。

totalwaits

BIGINT

イベント待機の合計数。

Totalwaittime

BIGINT

イベントの待機に費やされた合計時間。

 

3.12 DBMS_RANDOM

DBMS _ RANDOM パッケージには、ランダムな値を生成するための多くの方法を提供します。 DBMS _ RANDOM パッケージで 使用可能なプロシージャおよびファンクションを 次の表に示します。

Function/Procedure

Return Type

Description

INITIALIZE( val )

該当なし

指定したシード value 使用し DBMS_RANDOM パッケージを 初期化し value 。非推奨ですが、下位互換性のためにサポートされています。

NORMAL()

NUMBER

ランダムな NUMBER 返します

RANDOM

INTEGER

-2 ^ 31以上2 ^ 31未満の値を持つ ランダムな INTEGER 返します 。非推奨ですが、下位互換性のためにサポートされています。

SEED( val )

該当なし

指定された value シードをリセットします

SEED( val )

該当なし

指定された value シードをリセットします

STRING( opt , len )

VARCHAR2

返す ランダムな文字列。

TERMINATE

該当なし

TERMINATE は効果がありません。非推奨ですが、下位互換性のためにサポートされています。

VALUE

NUMBER

38桁の精度で、 0 以上 1 未満の 値を持つ乱数を返します

VALUE( low , high )

NUMBER

low 以上 high 未満の 値を持つ乱数を返します

 

3.12.1                  INITIALIZE

INITIALIZE 手順は、初期化 DBMS_RANDOM シード値を持つパッケージ。署名は次のとおりです。

INITIALIZE( val の整数)

この手順は推奨されなくなりました。下位互換性のためにのみ含まれています。

パラメーター

val

val DBMS _ RANDOM パッケージ・アルゴリズムで 使用されるシード値 です。

 

次のコード・スニペットは DBMS _ RANDOM パッケージをシード値 6475 で初期化する INITIALIZE プロシージャの コールを示しています

DBMS_RANDOM.INITIALIZE(6475);

 

3.12.2                  NORMAL

NORMAL 機能は、型の乱数を返し NUMBER 。署名は次のとおりです。

結果 NUMBER NORMAL()

パラメーター

result

result NUMBER 型のランダム値です

次のコードスニペットは、 NORMAL 関数の 呼び出しを示しています

x:= DBMS_RANDOM.NORMAL();

 

3.12.3                  RANDOM

RANDOM 関数 は、 -2 ^ 31以上2 ^ 31未満の ランダムな INTEGER 値を 返します 。署名は次のとおりです。

result INTEGER RANDOM()

この関数は推奨されなくなりました。下位互換性のためにのみ含まれています。

パラメーター

result

result INTEGER 型のランダム値 INTEGER

 

次のコードスニペットは、 RANDOM 関数の 呼び出しを示しています 。この呼び出しは乱数を返します:

x := DBMS_RANDOM.RANDOM();

 

3.12.4                  SEED

SEED プロシージャ の最初の形式は、 DBMS _ RANDOM パッケージの シード値を INTEGER 値で リセットし ます。 SEED 手順は、次の2つの形式で提供されています。最初の形式の署名は次のとおりです。

SEED( val IN INTEGER)

パラメーター

val

val DBMS _ RANDOM パッケージ・アルゴリズムで 使用されるシード値 です。

次のコードスニペットは、 SEED プロシージャの 呼び出しを示してい ます。コールはシード値を 8495 設定します

DBMS_RANDOM.SEED(8495);

 

3.12.5                  SEED

2番目の形式の SEED プロシージャは、 DBMS _ RANDOM パッケージの シード値を 文字列値で リセットし ます。 SEED 手順は、次の2つの形式で提供されています。 2番目の形式の署名は次のとおりです。

SEED( val IN VARCHAR2)

パラメーター

val

val DBMS _ RANDOM パッケージ・アルゴリズムで 使用されるシード値 です。

次のコードスニペットは、 SEED プロシージャの 呼び出しを示してい ます。コールはシード値を abc123 設定します

DBMS_RANDOM.SEED('abc123');

3.12.6                  STRING

STRING 機能は、ランダム返し VARCHAR2 ユーザー指定のフォーマットで文字列を。 STRING 関数 のシグネチャ は次のとおりです。

result VARCHAR2 STRING( opt IN CHAR, len IN NUMBER)

パラメーター

opt

返される文字列の書式設定オプション。 option は次のとおりです。

オプション

書式設定オプションを指定する

u または U

大文字アルファ文字列

l または L

アルファベットの小文字

a または A

混合ケースストリング

x または X

大文字の英数字の文字列

p または P

印刷可能な文字

len

返される文字列の長さ。

result

result VARCHAR2 型のランダム値です

次のコードスニペットは、 STRING 関数の 呼び出しを示しています 。この呼び出しは10文字の英数字のランダムな文字列を返します。

x := DBMS_RANDOM.STRING('X', 10);

 

3.12.7                  TERMINATE

TERMINATE 手順は効果がありません。署名は次のとおりです。

TERMINATE

TERMINATE プロシージャは非推奨と考えるべきです。この手順は互換性のためだけにサポートされています。

 

3.12.8                  VALUE

VALUE 関数 は、 38桁の精度で0以上、1未満の 乱数 NUMBER 返します VALUE 機能は、2つの形式があります。最初の形式の署名は次のとおりです。

result NUMBER VALUE()

パラメーター

result

result NUMBER 型のランダム値です

次のコードスニペットは、 VALUE 関数の 呼び出しを示しています 。呼び出しは乱数 NUMBER 返します

x := DBMS_RANDOM.VALUE();

 

3.12.9                  VALUE

VALUE 関数 は、 ユーザが指定した境界の間の値を持つ 乱数 NUMBER 返します VALUE 機能は、2つの形式があります。 2番目の形式の署名は次のとおりです。

result NUMBER VALUE( low IN NUMBER, high IN NUMBER)

パラメーター

low

low は、ランダム値の下限を指定します。ランダム値は low 値に等しくてもよい

high

high はランダム値の上限を指定します。乱数値は high なりません

result

result NUMBER 型のランダム値です

次のコードスニペットは、 VALUE 関数の 呼び出しを示しています 。呼び出しは、 1以上100未満の値を持つ 乱数 NUMBER 返します

x := DBMS_RANDOM.VALUE(1, 100);

 

 

3.13 DBMS_RLS

DBMS_RLS パッケージには、特定のAdvanced Serverのデータベース・オブジェクト上の仮想プライベート・データベースの実装を可能にします。

Function/Procedure

Function or Procedure

Return Type

Description

ADD_POLICY( object_schema , object_name , policy_name , function_schema , policy_function [, statement_types [, update_check [, enable [, static_policy [, policy_type [, long_predicate [, sec_relevant_cols [, sec_relevant_cols_opt ]]]]]]]])

手順

該当なし

データベースオブジェクトにセキュリティポリシーを追加します。

DROP_POLICY( object_schema , object_name , policy_name )

手順

該当なし

データベースオブジェクトからセキュリティポリシーを削除します。

ENABLE_POLICY( object_schema , object_name , policy_name , enable )

手順

該当なし

セキュリティポリシーを有効または無効にします。

Advanced Serverの DBMS_RLS の実装 は、Oracleのバージョンと比較して部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。

仮想プライベート・データベース は、セキュリティ・ポリシーを使用したファイングレイン・アクセス制御の一種です。 バーチャルプライベートデータベースでの きめ細かなアクセス制御と は、データへのアクセスをセキュリティポリシーで定義されている特定の行まで制御できることを意味します。

セキュリティポリシーをエンコードするルール は、特定の入力パラメータと戻り値を持つSPL関数である ポリシー関数 定義され ます。 セキュリティポリシーは、 特定のデータベース・オブジェクトにポリシー関数の名前付きアソシエーション、典型的テーブルです。

注意: Advanced Serverでは、SQL、PL / pgSQL、 SPL などのAdvanced Serverでサポートされている言語でポリシー関数を記述できます

注意: Advanced Server Virtual Private Databaseで現在サポートされているデータベースオブジェクトはテーブルです。ポリシーをビューまたは同義語に適用することはできません。

仮想プライベートデータベースを使用する利点は次のとおりです。

      細かいレベルのセキュリティを提供します。 GRANT コマンドで 指定されたデータベース・オブジェクト・レベルの権限 は、データベース・オブジェクトのインスタンス全体に対するアクセス権限を決定し、仮想プライベート・データベースはデータベース・オブジェクト・インスタンスの個々の行に対するアクセス制御を提供します。

      SQLコマンドのタイプ( INSERT UPDATE DELETE 、または SELECT )に 応じて、異なるセキュリティポリシーを適用できます

      セキュリティポリシーは、データベースオブジェクトにアクセスするアプリケーションのセッションユーザなどの要因に応じて、データベースオブジェクトに影響を及ぼす適用可能なSQLコマンドごとに動的に変化し得る。

      セキュリティポリシーの呼び出しは、データベースオブジェクトにアクセスするすべてのアプリケーションに対して透過的であるため、個々のアプリケーションを変更してセキュリティポリシーを適用する必要はありません。

      セキュリティポリシーを有効にすると、次のようなシステム特権以外のアプリケーション(新しいアプリケーションを含む)がセキュリティポリシーを迂回することはできません。

      スーパーユーザであっても、次のようなシステム特権以外のセキュリティポリシーを迂回することはできません。

注: セキュリティーポリシーを迂回させる唯一の方法は 、ユーザーに EXEMPT ACCESS POLICY システム特権が与えられている場合です。 EXEMPT ACCESS POLICY この権限を持つユーザーは、データベース内のすべてのポリシーを免除される特典は、細心の注意を払って付与してください。

DBMS_RLS パッケージには、ポリシーを、ポリシーを作成したポリシーを削除し、ポリシーを有効、または無効にする手順を説明します。

仮想プライベートデータベースを実装するプロセスは次のとおりです。

      ポリシー機能を作成します。このファンクションには、 VARCHAR2 型の2つの入力パラメータが必要 です。最初の入力パラメーターは、ポリシーが適用されるデータベース・オブジェクトを含むスキーマ用であり、2番目の入力パラメーターは、そのデータベース・オブジェクトの名前用です。このファンクションには VARCHAR2 戻り型 が必要 です。関数は、 WHERE 節述部の 形式でストリングを戻す必要があり ます。この述部は 、データベース・オブジェクトに作用するSQLコマンドに AND 条件 として動的に追加され ます。したがって、ポリシー関数述語を満たさない行は、SQLコマンドの結果セットから除外されます。

      ADD_POLICY プロシージャを 使用して 、ポリシー・ファンクションとデータベース・オブジェクトとの関連付けである新しいポリシーを定義します。 ADD_POLICY 手順、あなたはまた、SQLコマンド(の種類を指定することができ INSERT UPDATE DELETE 、または SELECT )ポリシーは、作成時のポリシーを有効にするかどうか、適用することであり、これに政策あれば新しく挿入された行または更新された行の変更されたイメージに適用する必要があります。

      既存のポリシーを無効または有効にするに は、 ENABLE_POLICY プロシージャを使用します。

      既存のポリシーを削除 するには、 DROP_POLICY プロシージャーを 使用し ます。 DROP_POLICY 手順は、ポリシー機能または関連するデータベース・オブジェクトを削除しません。

ポリシーが作成されると、カタログ・ビューで表示され、Oracleデータベースと互換性があります( ALL_POLICIES DBA_POLICIES 、または USER_POLICIES 。サポートされている互換ビューは、Enterprise Developerの Webサイトで提供されているOracle Developer Reference GuideのDatabase Compatibilityにリストされています

http://www.enterprisedb.com/products-services-training/products/documentation

SYS_CONTEXT 機能は、多くの場合で使用されている DBMS _ RLS 。署名は次のとおりです。

SYS_CONTEXT( namespace , attribute )

場所:

namespace VARCHAR2 です。唯一受け入れられる値は USERENV です。他の値は NULL を返し NULL

attribute VARCHAR2 です。 attribute は次のとおりです。

attribute Value

Equivalent Value

SESSION_USER

pg_catalog.session_user

CURRENT_USER

pg_catalog.current_user

CURRENT_SCHEMA

pg_catalog.current_schema

HOST

pg_catalog.inet_host

IP_ADDRESS

pg_catalog.inet_client_addr

SERVER_HOST

pg_catalog.inet_server_addr

 

注意: DBMS_RLS パッケージの 説明に使用されている例 は、Advanced Serverで提供されて いるサンプル emp 表の 変更されたコピーと、 表に対する すべての権限が付与 された salesmgr という 名前の salesmgr ています。あなたはの修正コピーを作成することができ emp テーブルの名前 vpemp salesmgr 以下で示すような役割を:

CREATE TABLE public.vpemp AS SELECT empno, ename, job, sal, comm, deptno FROM emp;

ALTER TABLE vpemp ADD authid VARCHAR2(12);

UPDATE vpemp SET authid = 'researchmgr' WHERE deptno = 20;

UPDATE vpemp SET authid = 'salesmgr' WHERE deptno = 30;

SELECT * FROM vpemp;

 

empno | ename  |    job    |   sal   |  comm   | deptno |   authid   

-------+--------+-----------+---------+---------+--------+-------------

  7782 | CLARK  | MANAGER   | 2450.00 |         |     10 |

  7839 | KING   | PRESIDENT | 5000.00 |         |     10 |

  7934 | MILLER | CLERK     | 1300.00 |         |     10 |

  7369 | SMITH  | CLERK     |  800.00 |         |     20 | researchmgr

  7566 | JONES  | MANAGER   | 2975.00 |         |     20 | researchmgr

  7788 | SCOTT  | ANALYST   | 3000.00 |         |     20 | researchmgr

  7876 | ADAMS  | CLERK     | 1100.00 |         |     20 | researchmgr

  7902 | FORD   | ANALYST   | 3000.00 |         |     20 | researchmgr

  7499 | ALLEN  | SALESMAN  | 1600.00 |  300.00 |     30 | salesmgr

  7521 | WARD   | SALESMAN  | 1250.00 |  500.00 |     30 | salesmgr

  7654 | MARTIN | SALESMAN  | 1250.00 | 1400.00 |     30 | salesmgr

  7698 | BLAKE  | MANAGER   | 2850.00 |         |     30 | salesmgr

  7844 | TURNER | SALESMAN  | 1500.00 |    0.00 |     30 | salesmgr

  7900 | JAMES  | CLERK     |  950.00 |         |     30 | salesmgr

(14 rows)

 

CREATE ROLE salesmgr WITH LOGIN PASSWORD 'password';

GRANT ALL ON vpemp TO salesmgr;

 

3.13.1                  ADD_POLICY

ADD_POLICY 手順は、データベース・オブジェクトとポリシー機能を関連付けることによって、新しいポリシーを作成します。

この手順を実行するには、スーパーユーザーでなければなりません。

ADD_POLICY( object_schema VARCHAR2、 object_name VARCHAR2、

  policy_name VARCHAR2、 function_schema VARCHAR2、

  policy_function VARCHAR2

[、 statement_types VARCHAR2

[、 update_check ブール

[、 BOOLEANを enable

[、 static_policy

[、 policy_type INTEGER

[、 long_predicate ブール

[、 sec_relevant_cols VARCHAR2

[、 sec_relevant_cols_opt INTEGER]]]]]]])

パラメーター

object_schema

ポリシーが適用されるデータベース・オブジェクトを含むスキーマの名前。

object_name

ポリシーが適用されるデータベースオブジェクトの名前。特定のデータベースオブジェクトに複数のポリシーが適用されている可能性があります。

policy_name

ポリシーに割り当てられた名前。データベースオブジェクト( object_schema object_name によって識別される )とポリシー名 の組み合わせは、データベース 内で一意である必要があります。

function_schema

ポリシー関数を含むスキーマの名前。

注: ポリシー関数はパッケージに属してもよく、その場合、 function_schema は、パッケージが定義されているスキーマの名前が含まれていなければなりません。

policy_function

セキュリティポリシーのルールを定義するSPL関数の名前。複数のポリシーで同じ関数を指定することができます。

注: ポリシー関数は、ケースたパッケージに属していてもよい policy_function また、ドット表記のパッケージ名を含まなければならない(つまり、 package_name . function_name )。

statement_types

ポリシーが適用されるSQLコマンドのカンマ区切りリスト。有効なSQLコマンドは、 INSERT UPDATE DELETE 、および SELECT です。デフォルトは INSERT,UPDATE,DELETE,SELECT です。

注: Advanced Serverは INDEX を文タイプとして 受け入れます が、無視されます。ポリシーはAdvanced Serverのインデックス操作には適用されません。

update_check

INSERT および UPDATE SQLコマンドにのみ 適用され ます。

TRUE 設定する と、ポリシーは新しく挿入された行と更新された行の変更されたイメージに適用されます。新しい行または変更された行のいずれかがポリシー関数述語に従って修飾されない場合、 INSERT または UPDATE コマンドは例外をスローし、 INSERT または UPDATE コマンド によって行が挿入または変更されることはありません

FALSE 設定する と、ポリシーは新しく挿入された行または更新された行の変更されたイメージに適用されません。したがって、同じポリシーを呼び出す後続のSQLコマンドの結果セットに、新たに挿入された行が表示されないことがあります。同様に、 UPDATE コマンドの 前にポリシーに従って修飾された行 は、同じポリシーを呼び出す後続のSQLコマンドの結果セットには現れません。

デフォルトは FALSE です。

enable

TRUE 設定する と、ポリシーは有効になり、 statement_types パラメータで指定 されたSQLコマンドに適用され ます。 FALSE 設定すると 、ポリシーは無効になり、SQLコマンドには適用されません。このポリシーは、 ENABLE_POLICY プロシージャー を使用して使用可能にすることができ ます。デフォルトは TRUE です。

static_policy

Oracleでは、 TRUE に設定すると ポリシーは 静的 になります。つまり、ポリシー関数は、そのデータベースオブジェクトのポリシーによって最初に呼び出されたときにデータベースオブジェクトごとに評価されます。結果のポリシー関数述語文字列はメモリに保存され、データベースサーバインスタンスの実行中に、そのデータベースオブジェクトのそのポリシーのすべての呼び出しに対して再利用されます。

FALSE 設定する と、ポリシーは 動的 です。つまり、ポリシー関数の再評価が行われ、ポリシーのすべての呼び出しに対してポリシー関数述語文字列が再生成されます。

デフォルトは FALSE です。

注意: Oracle 10gでは、 policy_type パラメータを置き換えるための static_policy パラメータ が導入されました 。 Oracleでは、 policy_type パラメータがデフォルト値の NULL 設定されていない 場合、 policy_type パラメータの設定は static_policy 設定 よりも static_policy ます。

注: Advanced Server static_policy static_policy の設定 は無視されます。 Advanced Serverは、 static_policy パラメータの 設定に関係なく、動的ポリシーのみを実装し ます。

policy_type

Oracleでは、ポリシー関数がいつ再評価されるかを決定します。したがって、ポリシー関数によって返された述語文字列が変更された場合、およびいつ変更されるかを決定します。デフォルトは NULL です。

注意: このパラメータの設定は、Advanced Serverでは無視されます。 Advanced Serverは常に動的ポリシーを前提としています。

long_predicate

Oracleでは、述 部が TRUE 設定されている場合は32KBまで 、それ以外の場合は4000バイトに制限されます。デフォルトは FALSE です。

注意: このパラメータの設定は、Advanced Serverでは無視されます。 Advanced Serverポリシー関数は、すべての実用的な目的のために、無限の長さの述語を返すことができます。

 

sec_relevant_cols

object_name カンマ区切りの列のリスト リストされた列に対して、列 レベルの仮想プライベート・データベース 提供し ます。リストされた列のいずれかが statement_types リストされているタイプのSQLコマンドで参照されている場合、ポリシーは強制されます 。そのような列が参照されない場合、ポリシーは強制されません。

デフォルトは NULL で、データベースオブジェクトのすべての列が sec_relevant_cols に含まれていた場合と同じ効果があります

sec_relevant_cols_opt

場合Oracleでは、 sec_relevant_cols_opt に設定されている DBMS_RLS.ALL_ROWS INTEGER 値1の定数)、その後に記載されている列 sec_relevant_cols 返す NULL 適用されたポリシーの述語が偽であるすべての行に。 ( sec_relevant_cols_opt DBMS_RLS.ALL_ROWS 設定されていない 場合 、結果セット内のこれらの行はまったく返されません)。デフォルトは NULL です。

注意: Advanced Serverは、 DBMS_RLS.ALL_ROWS 機能を サポートしていません sec_relevant_cols_opt DBMS_RLS.ALL_ROWS INTEGER 値が1)に 設定されていると 、Advanced Serverはエラーをスローします

この例では、次のポリシー関数を使用します。

CREATE OR REPLACE FUNCTION verify_session_user (

    p_schema        VARCHAR2,

    p_object        VARCHAR2

)

RETURN VARCHAR2

IS

BEGIN

    RETURN 'authid = SYS_CONTEXT(''USERENV'', ''SESSION_USER'')';

END;

このファンクションは、述語 authid = SYS_CONTEXT('USERENV', 'SESSION_USER') ADD_POLICY ます。これ は、 ADD_POLICY プロシージャで 指定されたタイプのSQLコマンドの WHERE 句に 追加 され ます。

これにより、 authid 列の 内容が セッションユーザーと同じ 行にSQLコマンドの効果が制限さ れます。

注: この例では、 SYS_CONTEXT 関数を 使用し てログインユーザー名を返します。 Oracleでは、 SYS_CONTEXT 関数を使用して アプリケーション・コンテキストの 属性を戻します SYS_CONTEXT ファンクション の最初のパラメータは アプリケーション・コンテキストの名前であり、2番目のパラメータはアプリケーション・コンテキスト内の属性セットの名前です。 USERENV は、現在のセッションを記述する特殊な組み込み名前空間です。 Advanced Serverはアプリケーション・コンテキストをサポートしていませんが、 SYS_CONTEXT 機能の この特定の使用方法のみをサポートしてい ます。

以下の匿名ブロックを呼び出し ADD_POLICY 名前のポリシーを作成する手順を secure_update に適用する vpemp 機能を使用してテーブル verify_session_user するたびに INSERT UPDATE 、または DELETE SQLコマンドを参照して与えられている vpemp テーブルを。

DECLARE

    v_object_schema         VARCHAR2(30) := 'public';

    v_object_name           VARCHAR2(30) := 'vpemp';

    v_policy_name           VARCHAR2(30) := 'secure_update';

    v_function_schema       VARCHAR2(30) := 'enterprisedb';

    v_policy_function       VARCHAR2(30) := 'verify_session_user';

    v_statement_types       VARCHAR2(30) := 'INSERT,UPDATE,DELETE';

    v_update_check          BOOLEAN      := TRUE;

    v_enable                BOOLEAN      := TRUE;

BEGIN

    DBMS_RLS.ADD_POLICY(

        v_object_schema,

        v_object_name,

        v_policy_name,

        v_function_schema,

        v_policy_function,

        v_statement_types,

        v_update_check,

        v_enable

    );

END;

ポリシーの作成が成功した後、端末セッションはユーザ salesmgr によって開始されます 。次のクエリは、 vpemp テーブルの 内容を示し ます。

edb=# \c edb salesmgr

Password for user salesmgr:

You are now connected to database "edb" as user "salesmgr".

edb=> SELECT * FROM vpemp;

 empno | ename  |    job    |   sal   |  comm   | deptno |   authid   

-------+--------+-----------+---------+---------+--------+-------------

  7782 | CLARK  | MANAGER   | 2450.00 |         |     10 |

  7839 | KING   | PRESIDENT | 5000.00 |         |     10 |

  7934 | MILLER | CLERK     | 1300.00 |         |     10 |

  7369 | SMITH  | CLERK     |  800.00 |         |     20 | researchmgr

  7566 | JONES  | MANAGER   | 2975.00 |         |     20 | researchmgr

  7788 | SCOTT  | ANALYST   | 3000.00 |         |     20 | researchmgr

  7876 | ADAMS  | CLERK     | 1100.00 |         |     20 | researchmgr

  7902 | FORD   | ANALYST   | 3000.00 |         |     20 | researchmgr

  7499 | ALLEN  | SALESMAN  | 1600.00 |  300.00 |     30 | salesmgr

  7521 | WARD   | SALESMAN  | 1250.00 |  500.00 |     30 | salesmgr

  7654 | MARTIN | SALESMAN  | 1250.00 | 1400.00 |     30 | salesmgr

  7698 | BLAKE  | MANAGER   | 2850.00 |         |     30 | salesmgr

  7844 | TURNER | SALESMAN  | 1500.00 |    0.00 |     30 | salesmgr

  7900 | JAMES  | CLERK     |  950.00 |         |     30 | salesmgr

(14 rows)

 

修飾されていない UPDATE コマンド(なし WHERE 句が)によって発行された salesmgr ユーザー:

edb=> UPDATE vpemp SET comm = sal * .75;

UPDATE 6

ポリシーは、表のすべての行を更新するのではなく 、ポリシーの機能述語 authid = SYS_CONTEXT('USERENV', 'SESSION_USER') 指定さ れた値 salesmgr authid 列に含まれる 行のみに、更新の影響を制限します

次のクエリは、ことを示して comm 列が行のみのために変更された authid 含まれてい salesmgr 。その他の行はすべて変更されません。

edb=> SELECT * FROM vpemp;

 empno | ename  |    job    |   sal   |  comm   | deptno |   authid   

-------+--------+-----------+---------+---------+--------+-------------

  7782 | CLARK  | MANAGER   | 2450.00 |         |     10 |

  7839 | KING   | PRESIDENT | 5000.00 |         |     10 |

  7934 | MILLER | CLERK     | 1300.00 |         |     10 |

  7369 | SMITH  | CLERK     |  800.00 |         |     20 | researchmgr

  7566 | JONES  | MANAGER   | 2975.00 |         |     20 | researchmgr

  7788 | SCOTT  | ANALYST   | 3000.00 |         |     20 | researchmgr

  7876 | ADAMS  | CLERK     | 1100.00 |         |     20 | researchmgr

  7902 | FORD   | ANALYST   | 3000.00 |         |     20 | researchmgr

  7499 | ALLEN  | SALESMAN  | 1600.00 | 1200.00 |     30 | salesmgr

  7521 | WARD   | SALESMAN  | 1250.00 |  937.50 |     30 | salesmgr

  7654 | MARTIN | SALESMAN  | 1250.00 |  937.50 |     30 | salesmgr

  7698 | BLAKE  | MANAGER   | 2850.00 | 2137.50 |     30 | salesmgr

  7844 | TURNER | SALESMAN  | 1500.00 | 1125.00 |     30 | salesmgr

  7900 | JAMES  | CLERK     |  950.00 |  712.50 |     30 | salesmgr

(14 rows)

ので、 update_check パラメータに設定した TRUE ADD_POLICY 手順は、次 INSERT のために指定された値ので、コマンドは例外をスロー authid カラム、 researchmgr 、あるセッションのユーザ、一致しない salesmgr 、したがって、ポリシーに失敗します。

edb=> INSERT INTO vpemp VALUES (9001,'SMITH','ANALYST',3200.00,NULL,20, 'researchmgr');

ERROR:  policy with check option violation

DETAIL:  Policy predicate was evaluated to FALSE with the updated values

場合 update_check に設定された FALSE 、直前 INSERT コマンドが成功しただろう。

次の例は、 特定の列がSQLコマンドで参照されている場合にのみ、ポリシーを適用する ために sec_relevant_cols パラメーターを 使用する方法を示して います。従業員給与が 2000 未満の行を選択するこの例では、次のポリシー関数が使用されています

CREATE OR REPLACE FUNCTION sal_lt_2000 (

    p_schema        VARCHAR2,

    p_object        VARCHAR2

)

RETURN VARCHAR2

IS

BEGIN

    RETURN 'sal < 2000';

END;

SELECT コマンドに sal または comm 列が含まれている 場合にのみ、ポリシーが適用されるようにポリシーが作成さ れます

DECLARE

    v_object_schema         VARCHAR2(30) := 'public';

    v_object_name           VARCHAR2(30) := 'vpemp';

    v_policy_name           VARCHAR2(30) := 'secure_salary';

    v_function_schema       VARCHAR2(30) := 'enterprisedb';

    v_policy_function       VARCHAR2(30) := 'sal_lt_2000';

    v_statement_types       VARCHAR2(30) := 'SELECT';

    v_sec_relevant_cols     VARCHAR2(30) := 'sal,comm';

BEGIN

    DBMS_RLS.ADD_POLICY(

        v_object_schema,

        v_object_name,

        v_policy_name,

        v_function_schema,

        v_policy_function,

        v_statement_types,

        sec_relevant_cols => v_sec_relevant_cols

    );

END;

クエリが列を参照しない場合 style = 'font-size:11.0pt'> sal または comm 場合、ポリシーは適用されません。次のクエリは、テーブル vpemp 14行すべてを返します

edb=# SELECT empno, ename, job, deptno, authid FROM vpemp;

 empno | ename  |    job    | deptno |   authid   

-------+--------+-----------+--------+-------------

  7782 | CLARK  | MANAGER   |     10 |

  7839 | KING   | PRESIDENT |     10 |

  7934 | MILLER | CLERK     |     10 |

  7369 | SMITH  | CLERK     |     20 | researchmgr

  7566 | JONES  | MANAGER   |     20 | researchmgr

  7788 | SCOTT  | ANALYST   |     20 | researchmgr

  7876 | ADAMS  | CLERK     |     20 | researchmgr

  7902 | FORD   | ANALYST   |     20 | researchmgr

  7499 | ALLEN  | SALESMAN  |     30 | salesmgr

  7521 | WARD   | SALESMAN  |     30 | salesmgr

  7654 | MARTIN | SALESMAN  |     30 | salesmgr

  7698 | BLAKE  | MANAGER   |     30 | salesmgr

  7844 | TURNER | SALESMAN  |     30 | salesmgr

  7900 | JAMES  | CLERK     |     30 | salesmgr

(14 rows)

問合せが sal または comm 列を 参照する場合、 ポリシーは 次のよう sal 2000 以上の 行を削除する問合せに適用され ます。

edb=# SELECT empno, ename, job, sal, comm, deptno, authid FROM vpemp;

 empno | ename  |   job    |   sal   |  comm   | deptno |   authid   

-------+--------+----------+---------+---------+--------+-------------

  7934 | MILLER | CLERK    | 1300.00 |         |     10 |

  7369 | SMITH  | CLERK    |  800.00 |         |     20 | researchmgr

  7876 | ADAMS  | CLERK    | 1100.00 |         |     20 | researchmgr

  7499 | ALLEN  | SALESMAN | 1600.00 | 1200.00 |     30 | salesmgr

  7521 | WARD   | SALESMAN | 1250.00 |  937.50 |     30 | salesmgr

  7654 | MARTIN | SALESMAN | 1250.00 |  937.50 |     30 | salesmgr

  7844 | TURNER | SALESMAN | 1500.00 | 1125.00 |     30 | salesmgr

  7900 | JAMES  | CLERK    |  950.00 |  712.50 |     30 | salesmgr

(8 rows)

 

3.13.2                  DROP_POLICY

DROP_POLICY 手順は、既存のポリシーを削除します。ポリシーに関連付けられたポリシー関数およびデータベース・オブジェクトは、 DROP_POLICY プロシージャー によって削除されません

この手順を実行するには、スーパーユーザーでなければなりません。

DROP_POLICY( object_schema VARCHAR2、 object_name VARCHAR2、

  policy_name VARCHAR2)

パラメーター

object_schema

ポリシーが適用されるデータベースオブジェクトを含むスキーマの名前。

object_name

ポリシーが適用されるデータベースオブジェクトの名前。

policy_name

削除するポリシーの名前。

次の例では、 secure_update テーブルの public.vpemp ポリシーを削除 します

DECLARE

    v_object_schema         VARCHAR2(30) := 'public';

    v_object_name           VARCHAR2(30) := 'vpemp';

    v_policy_name           VARCHAR2(30) := 'secure_update';

BEGIN

    DBMS_RLS.DROP_POLICY(

        v_object_schema,

        v_object_name,

        v_policy_name

    );

END;

 

3.13.3                  ENABLE_POLICY

ENABLE_POLICY 手順は、指定されたデータベース・オブジェクトに対する既存のポリシーを有効または無効にします。

この手順を実行するには、スーパーユーザーでなければなりません。

ENABLE_POLICY( object_schema VARCHAR2、 object_name VARCHAR2、

  policy_name VARCHAR2、 BOOLEANを enable

パラメーター

object_schema

ポリシーが適用されるデータベースオブジェクトを含むスキーマの名前。

 

object_name

ポリシーが適用されるデータベースオブジェクトの名前。

policy_name

有効または無効にするポリシーの名前。

enable

TRUE 設定する と、ポリシーが有効になります。 FALSE 設定する と、ポリシーは無効になります。

次の例では、 secure_update テーブルの public.vpemp ポリシーを secure_update します

DECLARE

    v_object_schema         VARCHAR2(30) := 'public';

    v_object_name           VARCHAR2(30) := 'vpemp';

    v_policy_name           VARCHAR2(30) := 'secure_update';

    v_enable                BOOLEAN := FALSE;

BEGIN

    DBMS_RLS.ENABLE_POLICY(

        v_object_schema,

        v_object_name,

        v_policy_name,

        v_enable

    );

END;

 

3.14 DBMS_SCHEDULER

DBMS _ SCHEDULER パッケージは、Oracleスタイルのジョブ、プログラムおよびジョブのスケジュールを作成および管理する方法を提供します。 DBMS _ SCHEDULER パッケージには、次の機能と手順を実装します。

Function/Procedure

Return Type

Description

CREATE_JOB ( job_name , job_type , job_action , number_of_arguments , start_date , repeat_interval , end_date , job_class , enabled , auto_drop , comments )

n/a

CREATE_JOB プロシージャ の最初の形式を使用 して、ジョブを作成し、プログラムおよびスケジュールの詳細をパラメータで指定します。

CREATE_JOB ( job_name , program_name , schedule_name , job_class , enabled , auto_drop , comments )

n/a

CREATE_JOB の2番目の形式 を使用して、名前付きプログラムと名前付きスケジュールを使用するジョブを作成します。

CREATE_PROGRAM ( program_name , program_type , program_action , number_of_arguments , enabled , comments )

n/a

使用 CREATE_PROGRAM プログラムを作成します。

CREATE_SCHEDULE(
schedule_name , start_date , repeat_interval , end_date , comments )

n/a

スケジュールを作成 するには、 CREATE_SCHEDULE プロシージャーを 使用 します。

DEFINE_PROGRAM_ARGUMENT(
program_name , argument_position , argument_name , argument_type , default_value , out_argument )

n/a

DEFINE_PROGRAM_ARGUMENT プロシージャ の最初の形式を使用 して、デフォルト値を持つプログラム引数を定義します。

DEFINE_PROGRAM_ARGUMENT(
program_name , argument_position , argument_name , argument_type , out_argument )

n/a

DEFINE_PROGRAM_ARGUMENT プロシージャ の最初の形式を使用し て、デフォルト値を持たないプログラム引数を定義します。

DISABLE( name , force , commit_semantics )

n/a

ジョブまたはプログラムを無効に するには、 DISABLE プロシージャを使用します。

DROP_JOB( job_name , force , defer , commit_semantics )

n/a

ジョブを削除 するには、 DROP_JOB プロシージャを 使用し ます。

DROP_PROGRAM( program_name , force )

n/a

プログラムを削除 するには、 DROP_PROGRAM プロシージャーを 使用し ます。

DROP_PROGRAM_ARGUMENT(
program_name , argument_position )

n/a

DROP_PROGRAM_ARGUMENT の最初の形式を使用して 、引数の位置を指定してプログラムの引数を削除します。

DROP_PROGRAM_ARGUMENT(
program_name , argument_name )

n/a

DROP_PROGRAM_ARGUMENT の2番目の形式を使用して 、引数の名前を指定してプログラムの引数を削除します。

DROP_SCHEDULE( schedule_name , force )

n/a

DROP SCHEDULE プロシージャを 使用し てスケジュールを削除します。

ENABLE( name , commit_semantics )

n/a

プログラムまたはジョブを 使用 可能に するには、 ENABLE コマンドを 使用し ます。

EVALUATE_CALENDAR_STRING(
calendar_string , start_date , return_date_after , next_run_date )

n/a

EVALUATE_CALENDAR_STRING 使用 して、ユーザー定義のカレンダースケジュールで記述された実行日を確認します。

RUN_JOB( job_name , use_current_session , manually )

n/a

直ちにジョブを実行 するには、 RUN_JOB プロシージャを 使用し ます。

SET_JOB_ARGUMENT_VALUE(
job_name , argument_position , argument_value )

n/a

最初の SET_JOB_ARGUMENT 値を 使用して 、引数の位置で記述されたジョブ引数の値を設定します。

SET_JOB_ARGUMENT_VALUE(
job_name , argument_name , argument_value )

n/a

SET_JOB_ARGUMENT 値の 2番目の形式を使用して 、引数の名前で記述されたジョブ引数の値を設定します。

Advanced Serverの DBMS_SCHEDULER の実装 は、Oracleのバージョンと比較して部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。

DBMS_SCHEDULER package pgAgentサービスに依存しています。 DBMS_SCHEDULER DBMS_SCHEDULER する前に、サーバーにpgAgentサービスをインストールして実行しておく必要があります

DBMS_SCHEDULER DBMS_SCHEDULER する前 に、データベース・スーパーユーザーは、 DBMS_SCHEDULER プログラム、スケジュールおよびジョブが格納され ているカタログ表を作成する必要があります 。使用 psql データベースに接続するクライアントを、コマンドを起動します。

CREATE EXTENSION dbms_scheduler;

デフォルトでは、 dbms_scheduler 拡張は contrib/dbms_scheduler_ext サブディレクトリ(Advanced Serverインストールの下)にあります。

DBMS_SCHEDULER 表の 作成後 、スーパーユーザーのみがデータベースのダンプまたはリロードを実行できることに 注意してください

 

3.14.1                  Using Calendar Syntax to Specify a Repeating Interval

CREATE_JOB CREATE_SCHEDULE 手順は、ジョブまたはスケジュールが繰り返されると間隔を定義するために、Oracleスタイルのカレンダ構文を使用します。スケジューリング情報は、 各プロシージャの repeat_interval パラメータに指定する必要があります。

repeat_interval は、スケジュールされたジョブの実行間隔を定義する値(または一連の値)です。各値は、トークンと等号、その後にスケジュールが実行されるユニット(またはユニット)で構成されます。複数のトークン値は、セミコロン( ; で区切る必要があります

たとえば、次の値を指定します。

FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=17;BYMINUTE=45

毎週5時45分に実行されるスケジュールを定義します。

次の表に示すトークンの種類と構文は、Advanced Serverでサポートされています。

Token type

Syntax

Valid Values

FREQ

FREQ= predefined_interval

どこ predefined_interval 次のいずれかである YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY SECONDLY キーワードがサポートされていません。

BYMONTH

BYMONTH= month (, month )...

 

どこ month 、月名の3文字の省略形である: JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC

BYMONTH

BYMONTH= month (, month )...

 

どこ month 月を表す数値である: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12

BYMONTHDAY

BYMONTHDAY= day_of_month

 

どこ day_of_month からの値です 1 〜を通じて 31

BYDAY

BYDAY= weekday

どこ weekday 曜日を表す3文字の略語や一桁の値です。

 

月曜

MON

1

火曜日

TUE

2

水曜日

WED

3

木曜日

THU

4

金曜日

FRI

5

土曜日

SAT

6

日曜日

SUN

7

BYDATE

BYDATE= date (, date )...

どこ date YYYYMMDD

YYYY は年の4桁の年式で、
MM は月の2桁の表現で、
そして
DD 日の2桁の日で表現したものです。

BYDATE

BYDATE= date (, date )...

どこ date MMDD です。

MM は月の2桁の表現で、
そして
DD 日の2桁の日で表現したものです

BYHOUR

BYHOUR= hour

ここで、 hour 0〜23の 値です。

BYMINUTE

BYMINUTE= minute

ここで、 minute 0〜59の 値です。

3.14.2                  CREATE_JOB

使用 CREATE_JOB ジョブを作成する手順を。手順には2つの形式があります。プロシージャの最初の形式は、ジョブ定義内のスケジュールと、ジョブの実行時に呼び出されるジョブ・アクションを指定します。

_ job (
job _ name IN VARCHAR2,
job_type IN VARCHAR2,
job_action IN VARCHAR2,
number_of_arguments IN PLS_INTEGER DEFAULT 0,
start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
repeat_interval IN VARCHAR2 DEFAULT NULL,
end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS',
enabled IN BOOLEAN DEFAULT FALSE,
auto_drop IN BOOLEAN DEFAULT TRUE,
comments IN VARCHAR2 DEFAULT NULL)
create _ job (
job _ name IN VARCHAR2,
job_type IN VARCHAR2,
job_action IN VARCHAR2,
number_of_arguments IN PLS_INTEGER DEFAULT 0,
start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
repeat_interval IN VARCHAR2 DEFAULT NULL,
end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS',
enabled IN BOOLEAN DEFAULT FALSE,
auto_drop IN BOOLEAN DEFAULT TRUE,
comments IN VARCHAR2 DEFAULT NULL)

2番目の形式では、ジョブスケジュールを使用して、ジョブの実行スケジュールを指定し、ジョブの実行時に実行されるプログラムの名前を指定します。

_ job (
job_name IN VARCHAR2,
program_name IN VARCHAR2,
schedule_name IN VARCHAR2,
job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS',
enabled IN BOOLEAN DEFAULT FALSE,
auto_drop IN BOOLEAN DEFAULT TRUE,
comments IN VARCHAR2 DEFAULT NULL)
create _ job (
job_name IN VARCHAR2,
program_name IN VARCHAR2,
schedule_name IN VARCHAR2,
job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS',
enabled IN BOOLEAN DEFAULT FALSE,
auto_drop IN BOOLEAN DEFAULT TRUE,
comments IN VARCHAR2 DEFAULT NULL)

パラメーター

job _ name

job_name は、作成されるジョブのスキーマ修飾名(オプション)を指定します。

job_type

job_type は、ジョブのタイプを指定します。 CREATE_JOB の現在の実装は PLSQL_BLOCK または STORED_PROCEDURE ジョブ・タイプをサポートしてい ます。

job_action

場合は job_type ある PLSQL_BLOCK job_action 、ジョブが実行時に呼び出されるPL / SQLブロックの内容を指定します。ブロックはセミコロン( ; で終わらなければなりません

場合は job_type ある STORED_PROCEDURE job_action 手続きのスキーマ修飾名を指定します。

number_of_arguments

number_of_arguments 、ジョブによって期待される引数の数を指定 する INTEGER 値です。デフォルトは 0 です。

start_date

start_date 、ジョブの実行がスケジュールされた最初の時刻を指定 する TIMESTAMP WITH TIME ZONE 値です。デフォルト値は NULL で、ジョブが有効になったときにジョブの実行をスケジュールする必要があることを示し NULL

repeat_interval

repeat_interval 、ジョブの繰り返し頻度を指定 する VARCHAR2 値です。 repeat_interval が指定されていない 場合、 ジョブは1回だけ実行されます。デフォルト値は NULL です。

end_date

end_date 、ジョブがもう実行されなくなるまでの時間を指定 する TIMESTAMP WITH TIME ZONE 値です。日付が指定されている場合は、 end_date 後でなければなりません start_date 。デフォルト値は NULL です。

場合ので、予めご了承ください end_date 指定されていないと repeat_interval 指定され、それが無効にされるまで、ジョブは無限に繰り返されます。

program_name

program_name は、ジョブによって実行されるプログラムの名前です。

schedule_name

schedule_name は、ジョブに関連付けられているスケジュールの名前です。

job_class

job_class は互換性のために受け入れられ、無視されます。

enabled

enabled は、 作成時にジョブが有効かどうかを指定 する BOOLEAN 値です。デフォルトでは、ジョブは無効状態で作成され、 enabled には FALSE 設定されてい FALSE 。ジョブを使用可能にするには、ジョブの 作成時 TRUE 指定する か、 DBMS_SCHEDULER.ENABLE プロシージャを DBMS_SCHEDULER.ENABLE てジョブを DBMS_SCHEDULER.ENABLE ます。

auto_drop

auto_drop パラメータは、互換性のために受け入れられ、無視されます。デフォルトでは、ジョブのステータスは end_date 指定された時間後 DISABLED 変更 され end_date

comments

comments パラメーターを 使用して 、ジョブに関するコメントを指定します。

次の例は、 CREATE_JOB プロシージャの コールを示してい ます。

EXEC

  DBMS_SCHEDULER.CREATE_JOB (

    job_name        => 'update_log',

    job_type        => 'PLSQL_BLOCK',

    job_action      => 'BEGIN INSERT INTO my_log VALUES(current_timestamp);
                        END;',

    start_date      => '01-JUN-15 09:00:00.000000',

    repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=17;',

    end_date        => NULL,

    enabled         => TRUE,

    comments        => 'This job adds a row to the my_log table.');

コードフラグメントは、 毎週5時に実行する update_log という 名前のジョブを作成します 。ジョブは、現在のタイムスタンプをログ・ファイル( my_log )に 挿入するPL / SQLブロックを実行します end_date が指定されてい ないため 、ジョブは DBMS_SCHEDULER.DISABLE プロシージャ によって DBMS_SCHEDULER.DISABLE 不可にされるまで実行され ます。

 

 

 

 

 

 

3.14.3                  CREATE_PROGRAM

DBMS_SCHEDULER プログラム を作成 するには、 CREATE_PROGRAM プロシージャを 使用 します 。署名は次のとおりです。

CREATE_PROGRAM(
program_name IN VARCHAR2,
program_type IN VARCHAR2,
program_action IN VARCHAR2,
number_of_arguments IN PLS_INTEGER DEFAULT 0,
enabled IN BOOLEAN DEFAULT FALSE,
comments IN VARCHAR2 DEFAULT NULL)

パラメーター

program_name

program_name は、作成されているプログラムの名前を指定します。

program_type

program_type は、プログラムのタイプを指定します。 CREATE_PROGRAM の現在の実装は program_type PLSQL_BLOCK または PROCEDURE サポートしてい ます。

program_action

場合 program_type ある PLSQL_BLOCK program_action プログラムが呼び出されたときに実行されるPL / SQLブロックが含まれています。 PL / SQLブロックは、セミコロン( ; で終了する必要があります

program_type PROCEDURE 場合 program_action にはストアード・プロシージャーの名前が入っています。

number_of_arguments

program_type PLSQL_BLOCK 場合 、この引数 は無視されます。

場合は program _ type あり PROCEDURE number_of_arguments プロシージャーが必要とする引数の数を指定します。 デフォルト値は 0 です。

enabled

enabled は、プログラムが有効か無効かを指定します。

      場合は enabled ある TRUE 、プログラムが有効になって作成されます。

·        場合は enabled ある FALSE 、プログラムが使用禁止で作成されます。 無効なプログラムを有効に するには、 DBMS_SCHEDULER.ENABLE プログラムを 使用し DBMS_SCHEDULER.ENABLE

デフォルト値は FALSE です。

comments

プログラムに関するコメントを指定 するには、 comments パラメーターを 使用 します。デフォルトでは、このパラメータは NULL です。

次の CREATE_PROGRAM プロシージャを 呼び出すと、 update_log という名前のプログラムが作成され update_log

EXEC

  DBMS_SCHEDULER.CREATE_PROGRAM (
    program_name     => 'update_log',

    program_type     => 'PLSQL_BLOCK',

    program_action   => 'BEGIN INSERT INTO my_log VALUES(current_timestamp);
                         END;',

    enabled          => TRUE, 

    comment          => 'This program adds a row to the my_log table.'); 

update_log は、現在の日付と時刻を含む行を my_log 表に 追加するPL / SQLブロックです 。プログラムは、 CREATE_PROGRAM プロシージャーが実行 されるときに使用可能になり ます。

 

 

 

 

 

 

 

 

 

3.14.4                  CREATE_SCHEDULE

ジョブスケジュールを作成 するには、 CREATE_SCHEDULE プロシージャを 使用 します。 CREATE_SCHEDULE プロシージャ のシグネチャ は次のとおりです。

create _ schedule (
schedule_name IN VARCHAR2,
start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
repeat_interval IN VARCHAR2,
end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
comments IN VARCHAR2 DEFAULT NULL)

パラメーター

schedule_name

schedule_name は、スケジュールの名前を指定します。

start_date

start_date 、スケジュールが実行可能な日付と時刻を指定 する TIMESTAMP WITH TIME ZONE 値です。 start_date が指定されていない 場合、 ジョブが有効になっている日付が start_date として使用され start_date 。デフォルトでは、 start_date NULL です。

repeat_interval

repeat_interval 、ジョブの繰り返し頻度を指定 する VARCHAR2 値です。 repeat_interval が指定されていない 場合、 repeat_interval repeat_interval で指定された日付に1回だけ実行され start_date

ジョブの 繰り返しスケジュールの定義については、 3.14.1 項を参照してください .

注: start_date または start_date いずれかの値を指定する必要があります。 repeat_interval ;両方の場合 start_date repeat_interval ある NULL 、サーバーはエラーを返します。

IN TIMESTAMP WITH TIME ZONE DEFAULT NULL end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL end_date

end_date は、 TIMESTAMP WITH TIME ZONE 値で、スケジュールが実行されなくなるまでの時間を指定します。日付が指定されている場合は、 end_date 後でなければなりません start_date 。デフォルト値は NULL です。

場合ので、予めご了承ください repeat_interval 指定されており、 end_date 指定されていない、それが無効になってまで、スケジュールが無限に繰り返されます。

comments IN VARCHAR2 DEFAULT NULL)

comments パラメータを 使用して 、スケジュールに関するコメントを指定します。デフォルトでは、このパラメータは NULL です。

次のコードは、呼び出す CREATE_SCHEDULE という名前のスケジュール作成する weeknights_at_5

EXEC

  DBMS_SCHEDULER.CREATE_SCHEDULE (

    schedule_name    => 'weeknights_at_5', 

    start_date       => '01-JUN-13 09:00:00.000000'

    repeat_interval  => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=17;', 

    comments         => 'This schedule executes each weeknight at 5:00'); 

このスケジュールは、毎週午後5時には2013年6月1日以降に有効になり end_date が指定されてい ないため DBMS_SCHEDULER.DISABLE で無効になるまでスケジュールは無期限に実行されます

 

 

 

 

 

 

 

 

 

 

 

 

3.14.5                  DEFINE_PROGRAM_ARGUMENT

プログラムの引数を定義 するには、 DEFINE_PROGRAM_ARGUMENT プロシージャーを使用します。 DEFINE_PROGRAM_ARGUMENT 手順は、2つの形式があります。最初の形式はデフォルト値を持つ引数を定義します。

DEFINE_PROGRAM_ARGUMENT(
program_name IN VARCHAR2,
argument_position IN PLS_INTEGER,
argument_name IN VARCHAR2 DEFAULT NULL,
argument_type IN VARCHAR2,
default_value IN VARCHAR2,
out_argument IN BOOLEAN DEFAULT FALSE)

2番目の形式では、デフォルト値のない引数が定義されています。

DEFINE_PROGRAM_ARGUMENT(
program_name IN VARCHAR2,
argument_position IN PLS_INTEGER,
argument_name IN VARCHAR2 DEFAULT NULL,
argument_type IN VARCHAR2,
out_argument IN BOOLEAN DEFAULT FALSE)

パラメーター

program_name

program_name は、引数が属するプログラムの名前です。

argument_position

argument_position は、プログラムに渡されるときの引数の位置を指定します。

argument_name

argument_name は、 argument_name のオプションの名前を指定します。デフォルトでは、 argument_name NULL です。

argument_type IN VARCHAR2

argument_type は、 argument_type のデータ型を指定します。

 

 

default_value

default_value は、引数に割り当てられたデフォルト値を指定します。 default_value は、ジョブの実行時にジョブによって指定された値によって上書きされます。

IN BOOLEAN DEFAULT FALSE out_argument

out_argument は現在使用されていません。指定されている場合、値は FALSE なければなりません

次のコードは、使用 DEFINE_PROGRAM_ARGUMENT 名前のプログラムにおける第1および第2の引数を定義する手順を add_emp

EXEC

  DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(

    program_name         => 'add_emp',

    argument_position    => 1,

    argument_name        => 'dept_no',

    argument_type        => 'INTEGER,

    default_value        => '20');

EXEC

  DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(

    program_name         => 'add_emp',

    argument_position    => 2,

    argument_name        => 'emp_name',

    argument_type        => 'VARCHAR2');

最初の引数は、 dept _ no という名前の INTEGER 値で 、デフォルト値は 20 です。 2番目の引数は、 emp_name という名前の VARCHAR2 です。 2番目の引数にはデフォルト値はありません。

 

 

 

 

 

 

 

 

3.14.6                  DISABLE

プログラムまたはジョブを無効に するには、 DISABLE プロシージャを使用します。 DISABLE プロシージャ のシグネチャ は次のとおりです。

disable (
name IN VARCHAR2,
force IN BOOLEAN DEFAULT FALSE,
commit_semantics
IN VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR')

パラメーター

name

name は、使用不可にされているプログラムまたはジョブの name 指定します。

force

force は互換性のために受け入れられ、無視される。

commit_semantics

commit_semantics 、プログラムまたはジョブを無効にしているときに発生したエラーの処理方法をサーバーに指示します。デフォルトでは、 commit_semantics STOP_ON_FIRST_ERROR 設定され 、サーバーにエラーが発生したときに停止するように指示します。エラーの前に正常に無効にされたプログラムまたはジョブは、ディスクにコミットされます。

TRANSACTIONAL ABSORB _ ERRORS キーワードは、互換性のために受け入れられ、無視されます。

次の DISABLE プロシージャを 呼び出すと、 update_emp という名前のプログラムが無効になります

DBMS_SCHEDULER.DISABLE('update_emp'); 

 

 

 

 

 

3.14.7                  DROP_JOB

使用 DROP_JOB ための手順を DROP 、仕事を DROP ジョブに属している任意の引数を、そして将来のジョブ実行を排除します。プロシージャの署名は次のとおりです。

drop_job (
job_name IN VARCHAR2,
force IN BOOLEAN DEFAULT FALSE,
defer IN BOOLEAN DEFAULT FALSE,
commit_semantics
IN VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR')

パラメーター

job_name

job_name は、ドロップされるジョブの名前を指定します。

force

force は互換性のために受け入れられ、無視される。

defer

defer は互換性のために受け入れられ、無視されます。

commit_semantics

commit_semantics 、プログラムまたはジョブの削除中に発生したエラーの処理方法をサーバーに指示します。デフォルトでは、 commit_semantics STOP_ON_FIRST_ERROR 設定され 、サーバーにエラーが発生したときに停止するように指示します。

TRANSACTIONAL ABSORB _ ERRORS キーワードは、互換性のために受け入れられ、無視されます。

次の DROP_JOB 呼び出しによって、 DROP_JOB という名前のジョブが update_log され update_log

DBMS_SCHEDULER.DROP_JOB('update_log'); 

 

 

3.14.8                  DROP_PROGRAM

DROP_PROGRAM 手順

DROP_PROGRAM プロシージャ のシグネチャは次の DROP_PROGRAM です。

DROP_PROGRAM(
program_name IN VARCHAR2,
force IN BOOLEAN DEFAULT FALSE)

パラメーター

program_name

program_name は、ドロップされるプログラムの名前を指定します。

force

force BOOLEAN 値で、従属ジョブを持つプログラムの処理方法をサーバーに指示します。

プログラムがジョブによって参照されている場合、サーバーにエラーを戻すように指示するには、 FALSE 指定し FALSE

TRUE 指定すると 、プログラムを削除する前に、そのプログラムを参照するジョブをすべて無効にするようにサーバーに指示します。

デフォルト値は FALSE です。

次の DROP_PROGRAM 呼び出しによって、 DROP_PROGRAM という名前のジョブが update_emp され update_emp

DBMS_SCHEDULER.DROP_PROGRAM('update_emp'); 

 

 

 

 

 

 

3.14.9                  DROP_PROGRAM_ARGUMENT

プログラムの引数を削除 するには、 DROP_PROGRAM_ARGUMENT プロシージャを 使用し ます。 DROP_PROGRAM_ARGUMENT 手順は、2つの形式があります。最初の形式では、引数の位置を使用して、削除する引数を指定します。

drop _ program _ argument (
program _ name IN VARCHAR2,
argument_position IN PLS_INTEGER)

2番目の形式は引数名をとります:

drop _ program _ argument (
program _ name IN VARCHAR2,
argument_name IN VARCHAR2)

パラメーター

program_name

program_name は、変更されているプログラムの名前を指定します。

argument_position

argument_position は、ドロップされる引数の位置を指定します。

argument_name

argument_name は、ドロップされる引数の名前を指定します。

DROP_PROGRAM_ARGUMENT 次のように呼び出すと update_emp プログラムの 最初の引数が update_emp ます。

  DBMS_SCHEDULER.DROP_PROGRAM_ARGUMENT('update_emp', 1);

次の DROP_PROGRAM_ARGUMENT 呼び出しによって emp_name という名前の引数が削除され emp_name

  DBMS_SCHEDULER.DROP_PROGRAM_ARGUMENT(update_emp', 'emp_name');

 

 

3.14.10               DROP_SCHEDULE

DROP_SCHEDULE プロシージャを 使用し てスケジュールを削除します。署名は次のとおりです。

DROP_SCHEDULE(
schedule_name IN VARCHAR2,
force IN BOOLEAN DEFAULT FALSE)

パラメーター

schedule_name

schedule_name は、ドロップされているスケジュールの名前を指定します。

force

force は、指定されたスケジュールがジョブによって参照されている場合のサーバーの動作を指定します。

      指定 されたスケジュールがジョブによって参照されている場合、サーバーにエラーを戻すように指示するには、 FALSE 指定し FALSE 。これがデフォルト動作です。

      スケジュールを削除する前に、指定されたスケジュールを使用するすべてのジョブを無効にするように TRUE 指定 します。実行中のジョブは、スケジュールを削除する前に完了することができます。

DROP_SCHEDULE への次の呼び出しによって、 DROP_SCHEDULE という名前のスケジュールが削除され weeknights_at_5

DBMS_SCHEDULER.DROP_SCHEDULE('weeknights_at_5', TRUE);

サーバーは、スケジュールを削除する前にスケジュールを使用するすべてのジョブを使用不可にします。

 

3.14.11               ENABLE

無効なプログラムまたはジョブを有効に するには、 ENABLE プロシージャを 使用し ます。

ENABLE プロシージャ のシグネチャ は次のとおりです。

ENABLE(
name IN VARCHAR2,
commit_semantics
IN VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR')

パラメーター

name

name は、有効にされているプログラムまたはジョブの name 指定します。

commit_semantics

commit_semantics 、プログラムまたはジョブを使用可能にしている間に発生したエラーの処理方法をサーバーに指示します。デフォルトでは、 commit_semantics STOP_ON_FIRST_ERROR 設定され 、サーバーにエラーが発生したときに停止するように指示します。

TRANSACTIONAL ABSORB _ ERRORS キーワードは、互換性のために受け入れられ、無視されます。

DBMS_SCHEDULER.ENABLE 次のように呼び出して update_emp プログラム DBMS_SCHEDULER.ENABLE ます

DBMS_SCHEDULER.ENABLE('update_emp');

 

3.14.12               EVALUATE_CALENDAR_STRING

EVALUATE_CALENDAR_STRING プロシージャを 使用 して、 CREATE_SCHEDULE プロシージャ を使用してスケジュールを作成するときに指定 された repeat_interval を評価し ます。 EVALUATE_CALENDAR_STRING 手順では、指定したスケジュールは、実際の仕事のスケジュールを設定せずに実行された日付と時刻を返します。

EVALUATE_CALENDAR_STRING プロシージャ のシグネチャ は次のとおりです。

evaluate _ calendar _ string (
calendar _ string IN VARCHAR2,
start_date IN TIMESTAMP WITH TIME ZONE,
return_date_after IN TIMESTAMP WITH TIME ZONE,
next_run_date OUT TIMESTAMP WITH TIME ZONE)

パラメーター

calendar _ string

calendar_string 説明カレンダ文字列である repeat_interval 評価されて いる セクション 3.14.1を 参照してください

start_date IN TIMESTAMP WITH TIME ZONE

start_date その後、日付と時刻です repeat_interval 有効となります。

return_date_after

使用 repeat_interval 評価するときに EVALUATE_CALENDAR_STRING を開始日として使用する 日時を指定するには、 style = 'font-size:11.0pt'> return_date_afterパラメータ使用します

あなたが指定した場合たとえば、 return_date_after 01-APR-13 09.00.00.000000 EVALUATE_CALENDAR_STRING 4月1 、2013年以降のスケジュールの最初の反復の日付と時刻を返します。

next_run_date OUT TIMESTAMP WITH TIME ZONE

next_run_date あり OUT で指定した日付より後のスケジュールの最初の発生を含んでいますパラメータ return_date_after パラメータ。

次の例では、カレンダー文字列を評価し、2013年6月15日以降にスケジュールが実行される最初の日時を返します。

DECLARE

  result     TIMESTAMP;

BEGIN

 

  DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING

  ( 

    'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=17;',

    '15-JUN-2013', NULL, result

  );

 

    DBMS_OUTPUT.PUT_LINE('next_run_date: ' || result);

END;

/

 

next_run_date: 17-JUN-13 05.00.00.000000 PM

2013年6月15日は土曜日です。 2013年6月17日(月曜日)午後5時までスケジュールは実行されません。

 

 

3.14.13               RUN_JOB

直ちにジョブを実行 するには、 RUN_JOB プロシージャを 使用し ます。 RUN_JOB プロシージャ のシグネチャは次の RUN_JOB です。

_ job (
job_name IN VARCHAR2,
use_current_session IN BOOLEAN DEFAULT TRUE
run _ job (
job_name IN VARCHAR2,
use_current_session IN BOOLEAN DEFAULT TRUE

パラメーター

job_name

job_name は、実行するジョブの名前を指定します。

use_current_session

デフォルトでは、ジョブは現在のセッションで実行されます。指定した場合、 use_current_session TRUE に設定する必要があります 。場合 use_current_session に設定されている FALSE 、Advanced Serverはエラーを返します。

次の RUN_JOB 呼び出しは、 RUN_JOB という名前のジョブを実行し update_log

DBMS_SCHEDULER.RUN_JOB('update_log', TRUE);

2番目の引数として TRUE 値を渡すと、 サーバーは現在のセッションでジョブを呼び出すように指示します。

 

3.14.14               SET_JOB_ARGUMENT_VALUE

SET_JOB_ARGUMENT_VALUE プロシージャを 使用して 、引数の値を指定します。 SET_JOB_ARGUMENT_VALUE 手順は、2つの形式があります。最初の形式は、どの引数を位置で変更するかを指定します。

set_job_argument_value (
job_name IN VARCHAR2,
argument_position IN PLS_INTEGER,
argument_value IN VARCHAR2)

2番目の形式では、引数名を使用して、変更する引数を指定します。

set_job_argument_value (
job_name IN VARCHAR2,
argument_name IN VARCHAR2,
argument_value IN VARCHAR2)

SET_JOB_ARGUMENT_VALUE プロシージャ によって設定される引数の値は 、デフォルトで設定された値を上書きします。

パラメーター

job_name

job_name は、変更された引数が属するジョブの名前を指定します。

argument_position

argument_position 使用 して、値が設定される引数の位置を指定します。

argument_name

argument_name 使用 して、値を設定する名前で argument_name を指定します。

argument_value

argument_value は、 argument_value の新しい値を指定します。

次の例 では、 update_emp ジョブの 最初の引数に 30 割り当てます

 

DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('update_emp', 1, '30');

次の例では、 emp_name 引数を SMITH 設定し emp_name

DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('update_emp', 'emp_name', 'SMITH');

 

 

 

 

 

3.15 DBMS_ SESSION

Advanced Serverは、次の DBMS_SESSION サポートしています SET_ROLE プロシージャ:

Function/Procedure

Return Type

Description

SET_ROLE( role_cmd )

該当なし

SETを 実行する ROLE 文の後ろに role_cmdで 指定された文字列値が 続き ます。

Advanced Serverの DBMS_SESSION の実装 は、Oracleのバージョンと比較して部分実装です。 DBMS_SESSION.SET_ROLE のみ がサポートされています。

3.15.1                  S ET_ROLE

SET_ROLE 手順はで指定されたロールに現在のセッションのユーザーを設定します role_cmd SET _ ROLE プロシージャ を呼び出した後 、現在のセッションは指定されたロールに割り当てられた権限を使用します。プロシージャの署名は次のとおりです。

SET_ROLE( role_cmd

SET_ROLE 手順は、 のために指定された値追加 role _ cmd SET ROLE ステートメントを呼び出し、ステートメントを呼び出します。

パラメーター

role_cmd

role_cmd は、文字列値の形式でロール名を指定します。

次の SET_ROLE プロシージャの コールにより SET ROLE コマンドを使用して、現在のセッション・ユーザーのIDを manager に設定します

edb=# exec DBMS_SESSION.SET_ROLE('manager');

 

 

 

 

 

3.16 DBMS_SQL

DBMS_SQL パッケージには、EnterpriseDBの動的SQL機能へのOracleデータベースと互換性のあるアプリケーション・インターフェースを提供します。 DBMS_SQL あなたは(むしろ、あなたがアプリケーションを記述する場合に比べて)実行時にクエリや他のコマンドを構築することができます。 EnterpriseDB Advanced Serverは動的SQLをネイティブにサポートしています。 DBMS_SQL は、アプリケーションを変更せずにOracleデータベースと互換性のある方法で動的SQLを使用する方法を提供します。

DBMS_SQL は、動的SQL文の実行時に現行ユーザーの権限を引き継ぎます。

Function/Procedure

Function or Procedure

Return Type

Description

BIND_VARIABLE( c , name , value [, out_value_size ])

手順

該当なし

値を変数にバインドします。

BIND_VARIABLE_CHAR( c , name , value [, out_value_size ])

手順

該当なし

CHAR 値を変数に バインドし ます。

BIND_VARIABLE_RAW( c , name , value [, out_value_size ])

手順

該当なし

RAW 値を変数に バインドし ます。

CLOSE_CURSOR( c IN OUT)

手順

該当なし

カーソルを閉じます。

COLUMN_VALUE( c , 位置 , OUT [, column_error OUT [, 実際の長さ OUT ]])

手順

該当なし

列の値を変数に戻します。

COLUMN_VALUE_CHAR( c , 位置 , OUT [, 列エラー OUT [, 実際の長さ OUT ]])

手順

該当なし

戻り CHAR 変数に列の値を。

COLUMN_VALUE_RAW( c , 位置 , OUT [, 列エラー OUT [, 実際の長さ OUT ]])

手順

該当なし

戻り RAW 変数に列の値を。

DEFINE_COLUMN( c , position , column [, column_size ])

手順

該当なし

SELECT リストに 列を定義します

DEFINE_COLUMN_CHAR( c , position , column , column_size )

手順

該当なし

SELECT リストに CHAR 列を 定義し ます

DEFINE_COLUMN_RAW( c , position , column , column_size )

手順

該当なし

SELECT リストに RAW 列を 定義し ます

DESCRIBE_COLUMNS

手順

該当なし

カーソルの結果セットを保持する列を定義します。

EXECUTE( c )

関数

INTEGER

カーソルを実行します。

EXECUTE_AND_FETCH( c [, exact ])

関数

INTEGER

カーソルを実行し、単一の行をフェッチします。

FETCH_ROWS( c )

関数

INTEGER

カーソルから行を取得します。

IS_OPEN( c )

関数

BOOLEAN

カーソルが開いているか確認してください。

LAST_ROW_COUNT

関数

INTEGER

フェッチされた累積行数を返します。

OPEN_CURSOR

関数

INTEGER

カーソルを開きます。

PARSE( c , statement , language_flag )

手順

該当なし

ステートメントを解析します。

Advanced Serverの DBMS_SQL の実装 は、Oracleのバージョンと比較して部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。

次の表に、 DBMS_SQL パッケージで 使用可能なパブリック変数を示し ます。

Public Variables

Data Type

Value

Description

native

INTEGER

1

Oracle構文との互換性のために用意されています。詳細は、DBMS_SQL.PARSEを参照してください。

V6

INTEGER

2

Oracle構文との互換性のために用意されています。詳細は、DBMS_SQL.PARSEを参照してください。

V7

INTEGER

3

Oracle構文との互換性のために用意されています。詳細は、DBMS_SQL.PARSEを参照してください。

 

3.16.1                  BIND_VARIABLE

BIND_VARIABLE 手順では、と値を関連付ける機能を提供 IN または IN OUT SQLコマンドバインド変数を。

BIND_VARIABLE( c INTEGER、 name VARCHAR2、

  value {BLOB | CLOB | DATE |フロート| INTEGER | NUMBER |

TIMESTAMP | VARCHAR2}

[、 out_value_size INTEGER])

パラメーター

c

バインド変数を使用したSQLコマンドのカーソルのカーソルID。

name

SQLコマンド内のバインド変数の名前。

value

割り当てる値。

out_value_size

name IN OUT 変数の 場合 、出力値の最大長を定義します。指定されない場合、 value の長さ が仮定されます。

 

次の無名ブロックは、バインド変数を使用して emp 表に 行を挿入し ます。

DECLARE

    curid           INTEGER;

    v_sql           VARCHAR2(150) := 'INSERT INTO emp VALUES ' ||

                        '(:p_empno, :p_ename, :p_job, :p_mgr, ' ||

                        ':p_hiredate, :p_sal, :p_comm, :p_deptno)';

    v_empno         emp.empno%TYPE;

    v_ename         emp.ename%TYPE;

    v_job           emp.job%TYPE;

    v_mgr           emp.mgr%TYPE;

    v_hiredate      emp.hiredate%TYPE;

    v_sal           emp.sal%TYPE;

    v_comm          emp.comm%TYPE;

    v_deptno        emp.deptno%TYPE;

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    DBMS_SQL.PARSE(curid,v_sql,DBMS_SQL.native);

    v_empno    := 9001;

    v_ename    := 'JONES';

    v_job      := 'SALESMAN';

    v_mgr      := 7369;

    v_hiredate := TO_DATE('13-DEC-07','DD-MON-YY');

    v_sal      := 8500.00;

    v_comm     := 1500.00;

    v_deptno   := 40;

    DBMS_SQL.BIND_VARIABLE(curid,':p_empno',v_empno);

    DBMS_SQL.BIND_VARIABLE(curid,':p_ename',v_ename);

    DBMS_SQL.BIND_VARIABLE(curid,':p_job',v_job);

    DBMS_SQL.BIND_VARIABLE(curid,':p_mgr',v_mgr);

    DBMS_SQL.BIND_VARIABLE(curid,':p_hiredate',v_hiredate);

    DBMS_SQL.BIND_VARIABLE(curid,':p_sal',v_sal);

    DBMS_SQL.BIND_VARIABLE(curid,':p_comm',v_comm);

    DBMS_SQL.BIND_VARIABLE(curid,':p_deptno',v_deptno);

    v_status := DBMS_SQL.EXECUTE(curid);

    DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

 

Number of rows processed: 1

 

 

 

 

 

 

3.16.2                  BIND_VARIABLE_CHAR

BIND_VARIABLE_CHAR 手順は、関連付ける機能を提供 CHAR で値を IN または IN OUT SQLコマンドバインド変数を。

BIND_VARIABLE_CHAR( c INTEGER、 name VARCHAR2、 value CHAR

[、 out_value_size INTEGER])

パラメーター

c

バインド変数を使用したSQLコマンドのカーソルのカーソルID。

name

SQLコマンド内のバインド変数の名前。

value

割り当てられる CHAR 型の値

out_value_size

name IN OUT 変数の 場合 、出力値の最大長を定義します。指定されない場合、 value の長さ が仮定されます。

 

3.16.3                  BIND VARIABLE RAW

BIND_VARIABLE_RAW 手順は、関連付ける機能を提供 RAW と値を IN または IN OUT SQLコマンドバインド変数を。

BIND_VARIABLE_RAW( c INTEGER、 name VARCHAR2、 value RAW

[、 out_value_size INTEGER])

パラメーター

c

バインド変数を使用したSQLコマンドのカーソルのカーソルID。

 

name

SQLコマンド内のバインド変数の名前。

value

割り当てる RAW タイプの値

out_value_size

name IN OUT 変数の 場合 、出力値の最大長を定義します。指定されない場合、 value の長さ が仮定されます。

 

3.16.4                  CLOSE_CURSOR

CLOSE_CURSOR 手順は、開いているカーソルをクローズします。カーソルに割り当てられたリソースは解放され、使用できなくなります。

CLOSE_CURSOR( c IN OUT INTEGER)

パラメーター

c

クローズするカーソルのカーソルID。

次の例では、以前に開いたカーソルを閉じます。

DECLARE

    curid           INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

            .

            .

            .

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

 

3.16.5                  COLUMN_VALUE

COLUMN_VALUE 手順は、カーソルから値を受け取るための変数を定義します。

COLUMN_VALUE( c INTEGER、 position INTEGER、 value OUT {BLOB |

  CLOB | DATE | FLOAT | INTEGER | NUMBER | TIMESTAMP | VARCHAR2 }

  [, column_error OUT NUMBER [, actual_length OUT INTEGER ]])

パラメーター

c

定義されている変数にデータを戻すカーソルのカーソルID。

position

返されたデータのカーソル内の位置。カーソルの最初の値は位置1です。

value

以前のフェッチ呼び出しによってカーソルに戻されたデータを受け取る変数。

column_error

列に関連付けられたエラー番号(存在する場合)。

actual_length

切り捨て前のデータの実際の長さ。

次の例は、 COLUMN_VALUE プロシージャ を使用してカーソルから値を受け取る無名ブロックの部分を示してい ます。

DECLARE

    curid           INTEGER;

    v_empno         NUMBER(4);

    v_ename         VARCHAR2(10);

    v_hiredate      DATE;

    v_sal           NUMBER(7,2);

    v_comm          NUMBER(7,2);

    v_sql           VARCHAR2(50) := 'SELECT empno, ename, hiredate, sal, ' ||

                                    'comm FROM emp';

    v_status        INTEGER;

BEGIN

            .

            .

            .

    LOOP

        v_status := DBMS_SQL.FETCH_ROWS(curid);

        EXIT WHEN v_status = 0;

        DBMS_SQL.COLUMN_VALUE(curid,1,v_empno);

        DBMS_SQL.COLUMN_VALUE(curid,2,v_ename);

        DBMS_SQL.COLUMN_VALUE(curid,3,v_hiredate);

        DBMS_SQL.COLUMN_VALUE(curid,4,v_sal);

        DBMS_SQL.COLUMN_VALUE(curid,4,v_sal);

        DBMS_SQL.COLUMN_VALUE(curid,5,v_comm);

        DBMS_OUTPUT.PUT_LINE(v_empno || '   ' || RPAD(v_ename,10) || '  ' ||

            TO_CHAR(v_hiredate,'yyyy-mm-dd') || ' ' ||

            TO_CHAR(v_sal,'9,999.99') || ' ' ||

            TO_CHAR(NVL(v_comm,0),'9,999.99'));

    END LOOP;

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

 

3.16.6                  COLUMN_VALUE_CHAR

COLUMN_VALUE_CHAR 手順を受信する変数定義 CHAR カーソルの値を。

COLUMN_VALUE_CHAR( c INTEGER, position INTEGER, value OUT CHAR

  [, column_error OUT NUMBER [, actual_length OUT INTEGER ]])

パラメーター

c

定義されている変数にデータを戻すカーソルのカーソルID。

position

返されたデータのカーソル内の位置。カーソルの最初の値は位置1です。

value

以前のフェッチ呼び出しによってカーソルに戻されたデータを受け取る データ型 CHAR 変数

column_error

列に関連付けられたエラー番号(存在する場合)。

actual_length

切り捨て前のデータの実際の長さ。

 

3.16.7                  COLUMN VALUE RAW

COLUMN_VALUE_RAW 手順を受信する変数定義 RAW カーソルの値を。

COLUMN_VALUE_RAW( c INTEGER, position INTEGER, value OUT RAW

  [, column_error OUT NUMBER [, actual_length OUT INTEGER ]])

パラメーター

c

定義されている変数にデータを戻すカーソルのカーソルID。

position

返されたデータのカーソル内の位置。カーソルの最初の値は位置1です。

value

以前のフェッチ・コールによってカーソルに戻されたデータを受け取る データ型 RAW 変数

column_error

列に関連付けられたエラー番号(存在する場合)。

actual_length

切り捨て前のデータの実際の長さ。

 

3.16.8                  DEFINE_COLUMN

DEFINE_COLUMN 手順は、カラムまたは式を定義する SELECT カーソルに戻り、検索するリスト。

DEFINE_COLUMN( c INTEGER, position INTEGER, column { BLOB |

  CLOB | DATE | FLOAT | INTEGER | NUMBER | TIMESTAMP | VARCHAR2 }

  [, column_size INTEGER ])

パラメーター

c

SELECT コマンドに 関連付けられたカーソルのカーソルID

position

定義さ れている SELECT リスト 内の列または式の位置

column

位置の列または式と同じデータ型である可変 position SELECT リスト。

column_size

返されるデータの最大長。 column_size は、 column VARCHAR2 場合にのみ指定する必要があります column_size を超える返されたデータ は、 column_size 文字に 切り捨てられ ます。

次の例は emp empno ename hiredate sal および comm 列が DEFINE_COLUMN プロシージャで どのように 定義されているかを示してい ます。

DECLARE

    curid           INTEGER;

    v_empno         NUMBER(4);

    v_ename         VARCHAR2(10);

    v_hiredate      DATE;

    v_sal           NUMBER(7,2);

    v_comm          NUMBER(7,2);

    v_sql           VARCHAR2(50) := 'SELECT empno, ename, hiredate, sal, ' ||

                                    'comm FROM emp';

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    DBMS_SQL.PARSE(curid,v_sql,DBMS_SQL.native);

    DBMS_SQL.DEFINE_COLUMN(curid,1,v_empno);

    DBMS_SQL.DEFINE_COLUMN(curid,2,v_ename,10);

    DBMS_SQL.DEFINE_COLUMN(curid,3,v_hiredate);

    DBMS_SQL.DEFINE_COLUMN(curid,4,v_sal);

    DBMS_SQL.DEFINE_COLUMN(curid,5,v_comm);

            .

            .

            .

END;

次の例は、まったく同じ結果をもたらす先の例の代替案を示しています。データ型の長さは無関係であることに注意してください- empno sal 、および comm 列は依然としてに相当するデータ戻ります NUMBER(4) NUMBER(7,2) あっても、それぞれ、 v_num ように定義されている NUMBER(1) COLUMN_VALUE プロシージャの 宣言が 適切な最大サイズ であると仮定して )。 ename によって定義されるようなカラムは、長さが10文字までのデータが返される length にパラメータ DEFINE_COLUMN 呼び出しではなく、データ型の宣言によって VARCHAR2(1) に対して宣言 v_varchar 。返されるデータの実際のサイズは、 COLUMN_VALUE プロシージャ によって指定され ます。

DECLARE

    curid           INTEGER;

    v_num           NUMBER(1);

    v_varchar       VARCHAR2(1);

    v_date          DATE;

    v_sql           VARCHAR2(50) := 'SELECT empno, ename, hiredate, sal, ' ||

                                    'comm FROM emp';

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    DBMS_SQL.PARSE(curid,v_sql,DBMS_SQL.native);

    DBMS_SQL.DEFINE_COLUMN(curid,1,v_num);

    DBMS_SQL.DEFINE_COLUMN(curid,2,v_varchar,10);

    DBMS_SQL.DEFINE_COLUMN(curid,3,v_date);

    DBMS_SQL.DEFINE_COLUMN(curid,4,v_num);

    DBMS_SQL.DEFINE_COLUMN(curid,5,v_num);

            .

            .

            .

END;

 

3.16.9                  DEFINE_COLUMN_CHAR

DEFINE_COLUMN_CHAR 手順が定義 CHAR 列または式 SELECT 、カーソルで返され取り出される、リスト。

DEFINE_COLUMN_CHAR( c INTEGER、 position INTEGER、 column CHAR、 column column_size INTEGER)

パラメーター

c

SELECT コマンドに 関連付けられたカーソルのカーソルID

position

定義さ れている SELECT リスト 内の列または式の位置

column

CHAR 変数。

column_size

返されるデータの最大長。 column_size を超える返されたデータ は、 column_size 文字に 切り捨てられ ます。

 

3.16.10               DEFINE COLUMN RAW

DEFINE_COLUMN_RAW 手順が定義 RAW 列または式 SELECT 、カーソルで返され取り出される、リスト。

DEFINE_COLUMN_RAW( c INTEGER、 position INTEGER、 column RAW、

  column_size INTEGER)

パラメーター

c

SELECT コマンドに 関連付けられたカーソルのカーソルID

position

定義さ れている SELECT リスト 内の列または式の位置

column

RAW 変数。

column_size

返されるデータの最大長。 column_size を超える返されたデータ は、 column_size 文字に 切り捨てられ ます。

 

3.16.11               D ESCRIBE COLUMNS

DESCRIBE _ COLUMNS 手順では、カーソルで返される列について説明します。

DESCRIBE_COLUMNS(c INTEGER, col_cnt OUT INTEGER, desc_t OUT
DESC_TAB);

パラメーター

c

カーソルのカーソルID。

col_cnt

カーソル結果セットの列数。

desc_tab

カーソルによって戻された各列の説明を含む表。説明はタイプ DESC_REC で、次の値を含みます。

Column Name

Type

col_type

INTEGER

col_max_len

INTEGER

col_name

VARCHAR2(128)

col_name_len

INTEGER

col_schema_name

VARCHAR2(128)

col_schema_name_len

INTEGER

col_precision

INTEGER

col_scale

INTEGER

col_charsetid

INTEGER

col_charsetform

INTEGER

col_null_ok

BOOLEAN

 

3.16.12               EXECUTE

EXECUTE 関数は、解析されたSQLコマンドまたは SPL ブロックを 実行します

status INTEGER EXECUTE( c INTEGER)

パラメーター

c

実行 する解析済みSQLコマンドまたは SPL ブロックの カーソルID

status

SQLコマンドが DELETE INSERT 、または UPDATE 場合に処理された行数 他のすべてのコマンドでは status は無意味です。

次の無名ブロックは、行を dept テーブルに 挿入し ます。

DECLARE

    curid           INTEGER;

    v_sql           VARCHAR2(50);

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    v_sql := 'INSERT INTO dept VALUES (50, ''HR'', ''LOS ANGELES'')';

    DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);

    v_status := DBMS_SQL.EXECUTE(curid);

    DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

3.16.13               EXECUTE_AND_FETCH

機能 EXECUTE_AND_FETCH は解析された SELECT コマンドを 実行し、 1行をフェッチします。

status INTEGER EXECUTE_AND_FETCH( c INTEGER

[、 exact BOOLEAN])

パラメーター

c

SELECT コマンドが実行される カーソルのカーソルID

exact

TRUE 設定する と、結果セットの行数が1に正確に等しくない場合に 例外がスロー され FALSE 設定する と、例外はスローされません。デフォルトは FALSE です。 NO_DATA_FOUND 場合は、例外がスローされ exact あり TRUE 、結果セットに行が含まれていません。 TOO_MANY_ROWS 場合は、例外がスローされる exact ある TRUE 、結果セット内の複数の行があります。

status

行が正常にフェッチされた場合は1を、フェッチする行がない場合は0を戻します。例外がスローされた場合、値は返されません。

次のストアドプロシージャは、 EXECUTE_AND_FETCH 関数を使用して、従業員の名前を使用して1人の従業員を取得します。従業員が見つからないか、同じ名前の従業員が複数いる場合は、例外がスローされます。

CREATE OR REPLACE PROCEDURE select_by_name(

    p_ename         emp.ename%TYPE

)

IS

    curid           INTEGER;

    v_empno         emp.empno%TYPE;

    v_hiredate      emp.hiredate%TYPE;

    v_sal           emp.sal%TYPE;

    v_comm          emp.comm%TYPE;

    v_dname         dept.dname%TYPE;

    v_disp_date     VARCHAR2(10);

    v_sql           VARCHAR2(120) := 'SELECT empno, hiredate, sal, ' ||

                                     'NVL(comm, 0), dname ' ||

                                     'FROM emp e, dept d ' ||

                                     'WHERE ename = :p_ename ' ||

                                     'AND e.deptno = d.deptno';

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    DBMS_SQL.PARSE(curid,v_sql,DBMS_SQL.native);

    DBMS_SQL.BIND_VARIABLE(curid,':p_ename',UPPER(p_ename));

    DBMS_SQL.DEFINE_COLUMN(curid,1,v_empno);

    DBMS_SQL.DEFINE_COLUMN(curid,2,v_hiredate);

    DBMS_SQL.DEFINE_COLUMN(curid,3,v_sal);

    DBMS_SQL.DEFINE_COLUMN(curid,4,v_comm);

    DBMS_SQL.DEFINE_COLUMN(curid,5,v_dname,14);

    v_status := DBMS_SQL.EXECUTE_AND_FETCH(curid,TRUE);

    DBMS_SQL.COLUMN_VALUE(curid,1,v_empno);

    DBMS_SQL.COLUMN_VALUE(curid,2,v_hiredate);

    DBMS_SQL.COLUMN_VALUE(curid,3,v_sal);

    DBMS_SQL.COLUMN_VALUE(curid,4,v_comm);

    DBMS_SQL.COLUMN_VALUE(curid,5,v_dname);

    v_disp_date := TO_CHAR(v_hiredate, 'MM/DD/YYYY');

    DBMS_OUTPUT.PUT_LINE('Number    : ' || v_empno);

    DBMS_OUTPUT.PUT_LINE('Name      : ' || UPPER(p_ename));

    DBMS_OUTPUT.PUT_LINE('Hire Date : ' || v_disp_date);

    DBMS_OUTPUT.PUT_LINE('Salary    : ' || v_sal);

    DBMS_OUTPUT.PUT_LINE('Commission: ' || v_comm);

    DBMS_OUTPUT.PUT_LINE('Department: ' || v_dname);

    DBMS_SQL.CLOSE_CURSOR(curid);

EXCEPTION

    WHEN NO_DATA_FOUND THEN

        DBMS_OUTPUT.PUT_LINE('Employee ' || p_ename || ' not found');

        DBMS_SQL.CLOSE_CURSOR(curid);

    WHEN TOO_MANY_ROWS THEN

        DBMS_OUTPUT.PUT_LINE('Too many employees named, ' ||

            p_ename || ', found');

        DBMS_SQL.CLOSE_CURSOR(curid);

    WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('The following is SQLERRM:');

        DBMS_OUTPUT.PUT_LINE(SQLERRM);

        DBMS_OUTPUT.PUT_LINE('The following is SQLCODE:');

        DBMS_OUTPUT.PUT_LINE(SQLCODE);

        DBMS_SQL.CLOSE_CURSOR(curid);

END;

 

EXEC select_by_name('MARTIN')

 

Number    : 7654

Name      : MARTIN

Hire Date : 09/28/1981

Salary    : 1250

Commission: 1400

Department: SALES

3.16.14               FETCH_ROWS

FETCH_ROWS 機能は、カーソルから行を取得します。

status INTEGER FETCH_ROWS( c INTEGER)

パラメーター

c

行をフェッチするカーソルのカーソルID。

status

返し 1 行は、正常に取り出された場合は 0 もう行フェッチしないように場合。

次の例では、 emp から行をフェッチし 、結果を表示します。

DECLARE

    curid           INTEGER;

    v_empno         NUMBER(4);

    v_ename         VARCHAR2(10);

    v_hiredate      DATE;

    v_sal           NUMBER(7,2);

    v_comm          NUMBER(7,2);

    v_sql           VARCHAR2(50) := 'SELECT empno, ename, hiredate, sal, ' ||

                                    'comm FROM emp';

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    DBMS_SQL.PARSE(curid,v_sql,DBMS_SQL.native);

    DBMS_SQL.DEFINE_COLUMN(curid,1,v_empno);

    DBMS_SQL.DEFINE_COLUMN(curid,2,v_ename,10);

    DBMS_SQL.DEFINE_COLUMN(curid,3,v_hiredate);

    DBMS_SQL.DEFINE_COLUMN(curid,4,v_sal);

    DBMS_SQL.DEFINE_COLUMN(curid,5,v_comm);

 

    v_status := DBMS_SQL.EXECUTE(curid);

    DBMS_OUTPUT.PUT_LINE('EMPNO  ENAME       HIREDATE    SAL       COMM');

    DBMS_OUTPUT.PUT_LINE('-----  ----------  ----------  --------  ' ||

        '--------');

    LOOP

        v_status := DBMS_SQL.FETCH_ROWS(curid);

        EXIT WHEN v_status = 0;

        DBMS_SQL.COLUMN_VALUE(curid,1,v_empno);

        DBMS_SQL.COLUMN_VALUE(curid,2,v_ename);

        DBMS_SQL.COLUMN_VALUE(curid,3,v_hiredate);

        DBMS_SQL.COLUMN_VALUE(curid,4,v_sal);

        DBMS_SQL.COLUMN_VALUE(curid,4,v_sal);

        DBMS_SQL.COLUMN_VALUE(curid,5,v_comm);

        DBMS_OUTPUT.PUT_LINE(v_empno || '   ' || RPAD(v_ename,10) || '  ' ||

            TO_CHAR(v_hiredate,'yyyy-mm-dd') || ' ' ||

            TO_CHAR(v_sal,'9,999.99') || ' ' ||

            TO_CHAR(NVL(v_comm,0),'9,999.99'));

    END LOOP;

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

 

EMPNO  ENAME       HIREDATE    SAL       COMM

-----  ----------  ----------  --------  --------

7369   SMITH       1980-12-17    800.00       .00

7499   ALLEN       1981-02-20  1,600.00    300.00

7521   WARD        1981-02-22  1,250.00    500.00

7566   JONES       1981-04-02  2,975.00       .00

7654   MARTIN      1981-09-28  1,250.00  1,400.00

7698   BLAKE       1981-05-01  2,850.00       .00

7782   CLARK       1981-06-09  2,450.00       .00

7788   SCOTT       1987-04-19  3,000.00       .00

7839   KING        1981-11-17  5,000.00       .00

7844   TURNER      1981-09-08  1,500.00       .00

7876   ADAMS       1987-05-23  1,100.00       .00

7900   JAMES       1981-12-03    950.00       .00

7902   FORD        1981-12-03  3,000.00       .00

7934   MILLER      1982-01-23  1,300.00       .00

 

3.16.15               IS_OPEN

IS_OPEN 関数は、指定されたカーソルが開いているかどうかをテストする能力を提供します。

status BOOLEAN IS_OPEN( c INTEGER)

パラメーター

c

テストするカーソルのカーソルID。

status

カーソルが開いている場合は TRUE 設定され 、カーソルが開いて いない場合は FALSE に設定され FALSE

 

3.16.16               LAST_ROW_COUNT

LAST_ROW_COUNT 機能は、現在フェッチされている行数を返します。

rowcnt INTEGER LAST_ROW_COUNT

パラメーター

rowcnt

今までにフェッチされた行の数。

次の例では、 LAST_ROW_COUNT ファンクションを 使用 して、問合せにフェッチされた行の総数を表示します。

DECLARE

    curid           INTEGER;

    v_empno         NUMBER(4);

    v_ename         VARCHAR2(10);

    v_hiredate      DATE;

    v_sal           NUMBER(7,2);

    v_comm          NUMBER(7,2);

    v_sql           VARCHAR2(50) := 'SELECT empno, ename, hiredate, sal, ' ||

                                    'comm FROM emp';

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    DBMS_SQL.PARSE(curid,v_sql,DBMS_SQL.native);

    DBMS_SQL.DEFINE_COLUMN(curid,1,v_empno);

    DBMS_SQL.DEFINE_COLUMN(curid,2,v_ename,10);

    DBMS_SQL.DEFINE_COLUMN(curid,3,v_hiredate);

    DBMS_SQL.DEFINE_COLUMN(curid,4,v_sal);

    DBMS_SQL.DEFINE_COLUMN(curid,5,v_comm);

 

    v_status := DBMS_SQL.EXECUTE(curid);

    DBMS_OUTPUT.PUT_LINE('EMPNO  ENAME       HIREDATE    SAL       COMM');

    DBMS_OUTPUT.PUT_LINE('-----  ----------  ----------  --------  ' ||

        '--------');

    LOOP

        v_status := DBMS_SQL.FETCH_ROWS(curid);

        EXIT WHEN v_status = 0;

        DBMS_SQL.COLUMN_VALUE(curid,1,v_empno);

        DBMS_SQL.COLUMN_VALUE(curid,2,v_ename);

        DBMS_SQL.COLUMN_VALUE(curid,3,v_hiredate);

        DBMS_SQL.COLUMN_VALUE(curid,4,v_sal);

        DBMS_SQL.COLUMN_VALUE(curid,4,v_sal);

        DBMS_SQL.COLUMN_VALUE(curid,5,v_comm);

        DBMS_OUTPUT.PUT_LINE(v_empno || '   ' || RPAD(v_ename,10) || '  ' ||

            TO_CHAR(v_hiredate,'yyyy-mm-dd') || ' ' ||

            TO_CHAR(v_sal,'9,999.99') || ' ' ||

            TO_CHAR(NVL(v_comm,0),'9,999.99'));

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('Number of rows: ' || DBMS_SQL.LAST_ROW_COUNT);

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

 

EMPNO  ENAME       HIREDATE    SAL       COMM

-----  ----------  ----------  --------  --------

7369   SMITH       1980-12-17    800.00       .00

7499   ALLEN       1981-02-20  1,600.00    300.00

7521   WARD        1981-02-22  1,250.00    500.00

7566   JONES       1981-04-02  2,975.00       .00

7654   MARTIN      1981-09-28  1,250.00  1,400.00

7698   BLAKE       1981-05-01  2,850.00       .00

7782   CLARK       1981-06-09  2,450.00       .00

7788   SCOTT       1987-04-19  3,000.00       .00

7839   KING        1981-11-17  5,000.00       .00

7844   TURNER      1981-09-08  1,500.00       .00

7876   ADAMS       1987-05-23  1,100.00       .00

7900   JAMES       1981-12-03    950.00       .00

7902   FORD        1981-12-03  3,000.00       .00

7934   MILLER      1982-01-23  1,300.00       .00

Number of rows: 14

 

 

3.16.17               OPEN_CURSOR

OPEN_CURSOR 機能は、新しいカーソルを作成します。動的SQL文を解析して実行するには、カーソルを使用する必要があります。一度カーソルを開くと、同じまたは異なるSQLステートメントで再使用できます。再利用するために、カーソルを閉じる必要はありません。

c INTEGER OPEN_CURSOR

パラメーター

c

新しく作成されたカーソルに関連付けられたカーソルID番号。

次の例では、新しいカーソルを作成します。

DECLARE

    curid           INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

            .

            .

            .

END;

 

3.16.18               PARSE

PARSE 手順は、SQLコマンドまたはSPLブロックを解析します。 SQLコマンドがDDLコマンドの場合、すぐに実行され、 EXECUTE 機能の 実行は必要ありません

PARSE( c INTEGER、 statement VARCHAR2、 language_flag INTEGER)

パラメーター

c

開いているカーソルのカーソルID。

statement

解析対象の SQL コマンドまたは SPL ブロック。 SQLコマンドはセミコロンターミネータで終わってはいけませんが、 SPL ブロックにはセミコロンターミネータが必要です。

language_flag

Oracle構文との互換性のために提供される言語フラグ使用 DBMS_SQL.V6 DBMS_SQL.V7 または DBMS_SQL.native 。このフラグは無視され、すべての構文はEnterpriseDB Advanced Serverフォーム内にあるとみなされます。

次の無名ブロックは job という名前のテーブルを作成します DDL文は、 PARSE プロシージャ によってすぐに実行される ため、別の EXECUTE ステップ は必要ありません

DECLARE

    curid           INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    DBMS_SQL.PARSE(curid, 'CREATE TABLE job (jobno NUMBER(3), ' ||

        'jname VARCHAR2(9))',DBMS_SQL.native);

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

以下は、2つの行を job テーブルに 挿入し ます。

DECLARE

    curid           INTEGER;

    v_sql           VARCHAR2(50);

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    v_sql := 'INSERT INTO job VALUES (100, ''ANALYST'')';

    DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);

    v_status := DBMS_SQL.EXECUTE(curid);

    DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);

    v_sql := 'INSERT INTO job VALUES (200, ''CLERK'')';

    DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);

    v_status := DBMS_SQL.EXECUTE(curid);

    DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

 

Number of rows processed: 1

Number of rows processed: 1

次の無名ブロックは、 DBMS_SQL パッケージを 使用して、 2つの INSERT を含むブロックを実行します 。ブロックの終わりには終了セミコロンが含まれていますが、前の例では個々の INSERT ステートメントにはセミコロンがありません。

DECLARE

    curid           INTEGER;

    v_sql           VARCHAR2(100);

    v_status        INTEGER;

BEGIN

    curid := DBMS_SQL.OPEN_CURSOR;

    v_sql := 'BEGIN ' ||

               'INSERT INTO job VALUES (300, ''MANAGER''); '  ||

               'INSERT INTO job VALUES (400, ''SALESMAN''); ' ||

             'END;';

    DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);

    v_status := DBMS_SQL.EXECUTE(curid);

    DBMS_SQL.CLOSE_CURSOR(curid);

END;

 

 

3.17 DB MS_UTILITY

DBMS_UTILITY パッケージには、以下のような種々のユーティリティプログラムのサポートを提供します。

Function/Procedure

Function or Procedure

Return Type

Description

ANALYZE_DATABASE( メソッド [, estimate_rows [, estimate_percent [, method_opt ]]])

手順

該当なし

データベーステーブルを分析します。

ANALYZE_PART_OBJECT( スキーマ , OBJECT_NAME [, OBJECT_TYPE [, command_typeが [, command_opt [, sample_clause ]]]])

手順

該当なし

パーティション表を分析します。

ANALYZE_SCHEMA( スキーマ , メソッド [, estimate_rows [, estimate_percent [, method_opt ]]])

手順

該当なし

スキーマテーブルを分析します。

CANONICALIZE( 名前 , canon_name OUT, canon_len )

手順

該当なし

文字列を正規化します。たとえば、空白を取り除きます。

COMMA_TO_TABLE( リスト , tablen OUT, タブ OUT)

手順

該当なし

名前のカンマ区切りのリストを名前の表に変換します。

DB_VERSION( バージョン OUT, 互換性 OUT)

手順

該当なし

データベースのバージョンを取得します。

EXEC_DDL_STATEMENT( parse_string )

手順

該当なし

DDL文を実行します。

FORMAT_CALL_STACK

関数

テキスト

現在の呼び出しスタックをフォーマットします。

GET_CPU_TIME

関数

現在のCPU時間を取得します。

GET_DEPENDENCY( , スキーマ , 名前 )

手順

該当なし

指定されたオブジェクトに依存するオブジェクトを取得します。

GET_HASH_VALUE( 名前 , ベース , ハッシュサイズ )

関数

NUMBER

ハッシュ値を計算します。

GET_PARAMETER_VALUE( parnam , intval OUT, strval OUT)

手順

BINARY_INTEGER

データベース初期化パラメータの設定を取得します。

GET_TIME

関数

NUMBER

現在の時刻を取得します。

NAME_TOKENIZE( 名前 , OUT, bは OUT, cは OUT, DBLINK OUT, nextpos OUT)

手順

該当なし

指定された名前をそのコンポーネントのパーツに解析します。

TABLE_TO_COMMA( タブ , タブレット OUT, リスト OUT)

手順

該当なし

名前のテーブルをカンマ区切りリストに変換します。

Advanced Serverの DBMS_UTILITY の実装 は、Oracleのバージョンと比較して部分実装 DBMS_UTILITY 。上記の表に記載されている機能およびプロシージャのみがサポートされています。

次の表に、 DBMS_UTILITY パッケージで 使用可能なパブリック変数を示し ます。

Public Variables

Data Type

Value

Description

inv_error_on_restrictions

PLS_INTEGER

1

INVALIDATE プロシージャ によって使用され ます。

lname_array

TABLE

 

長い名前のリスト。

uncl_array

TABLE

 

ユーザーと名前のリスト。

3.17.1                  LNAME_ARRAY

LNAME_ARRAY 完全修飾名を含む長い名前のリストを格納するためのものです。

TYPE lname_array IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;

 

3.17.2                  UNCL_ARRAY

UNCL_ARRAY 、ユーザーと名前のリストを格納するためのものです。

TYPE uncl_array IS TABLE OF VARCHAR2(227) INDEX BY BINARY_INTEGER;

 

3.17.3                  ANALYZE_DATABASE , ANALYZE SCHEMA and ANALYZE PART_OBJECT

ANALYZE_DATABASE(), ANALYZE_SCHEMA() および ANALYZE_PART_OBJECT() プロシージャは、データベース内の表の統計を収集する機能を提供します。 ANALYZE を実行すると 、Postgresはテーブル内のデータをサンプリングし、分散統計を pg_statistics システムテーブルに 記録し ます。

ANALYZE_DATABASE ANALYZE_SCHEMA および ANALYZE_PART_OBJECT は、主に処理される表の数が異なります。

      ANALYZE_DATABASE は、現行データベース内のすべてのスキーマ内のすべての表を分析します。

      ANALYZE_SCHEMA は、(現在のデータベース内の)指定されたスキーマ内のすべてのテーブルを分析します。

      ANALYZE_PART_OBJECT は単一の表を分析します。

ANALYZE コマンド の構文は次のとおりです

ANALYZE_DATABASE( method VARCHAR2 [、 estimate_rows NUMBER

[、 estimate_percent NUMBER [、 method_opt VARCHAR2]]])

 

ANALYZE_SCHEMA( schema VARCHAR2、 method VARCHAR2

[、 estimate_rows NUMBER [、 estimate_percent NUMBER

[、 method_opt VARCHAR2]]])

 

ANALYZE_PART_OBJECT( schema VARCHAR2、 object_name VARCHAR2

[、 object_type CHAR [、 command_type CHAR

[、 command_opt VARCHAR2 [、 sample_clause ]]]])

パラメータ - ANALYZE_DATABASE および ANALYZE_SCHEMA

method

この方法は、ANALYZE プロシージャは pg_statistics テーブル 移入 または pg_statistics テーブル からエントリを削除する かどうかを判断します DELETEの メソッドを指定する と、 ANALYZE プロシージャは pg_statistics から関連する行を削除し ます COMPUTE または ESTIMATEの メソッドを指定する と、 ANALYZE プロシージャは表(または複数の表)を分析し、 pg_statisticsに 分布情報を記録し ます COMPUTE ESTIMATEに は違いはありません 両方のメソッドがPostgresの ANALYZE 文を 実行し ます。他のすべてのパラメータは検証され、無視されます。

estimate_rows

推定統計の基礎となる行の数。一つ estimate_rows または estimate_percent メソッドがある場合に指定する必要があります ESTIMATE

この引数は無視されますが、互換性のために含まれています。

estimate_percent

推定統計の基礎となる行の割合。一つ estimate_rows または estimate_percent メソッドがある場合に指定する必要があります ESTIMATE

この引数は無視されますが、互換性のために含まれています。

method_opt

分析されるオブジェクトタイプ。次のいずれかの組み合わせ:

[ FOR TABLE ]

[ FOR ALL [ INDEXED ] COLUMNS ] [ SIZE n ]

[ FOR ALL INDEXES ]

この引数は無視されますが、互換性のために含まれています。

パラメータ - ANALYZE_PART_OBJECT

schema

オブジェクトを分析するスキーマの名前。

object_name

分析される分割されたオブジェクトの名前。

object_type

分析されるオブジェクトのタイプ。有効な値は T - テーブル、 I - インデックスです。

この引数は無視されますが、互換性のために含まれています。

command_type

実行する分析機能のタイプ。有効な値は次のとおりです E - sample_clause 句の 指定された行数または行の割合に基づいて推定統計を収集し ます。 C - 正確な統計値を計算する。または V - パーティションの構造と整合性を検証します。

この引数は無視されますが、互換性のために含まれています。

command_opt

以下のための command_type C または E 、次のいずれかの組み合わせにすることができます。

[ FOR TABLE ]

[ FOR ALL COLUMNS ]

[ FOR ALL LOCAL INDEXES ]

以下のための command_type object_type T 場合 V CASCADE なります

この引数は無視されますが、互換性のために含まれています。

sample_clause

場合 command_type ある E 、行またはパーセントまたは推定値を基になる行数を指定するには、以下の条項が含まれています。

SAMPLE n { ROWS | PERCENT }

この引数は無視されますが、互換性のために含まれています。

 

 

 

 

3.17.4                  CANONICALIZE

CANONICALIZE 手順は、入力文字列に次の操作を実行します。

      文字列が二重引用符で囲まれていない場合は、正当な識別子の文字が使用されていることを確認します。そうでない場合、例外がスローされます。文字列を二重引用符で囲むと、すべての文字が許可されます。

      文字列が二重引用符で囲まれておらず、ピリオドを含まない場合は、すべての英字が大文字になり、先頭と末尾のスペースが削除されます。

      文字列が二重引用符でピリオドを含まない場合は、二重引用符を取り除きます。

      文字列にピリオドが含まれ、文字列の一部が二重引用符で囲まれていない場合は、文字列の各部分を大文字にし、各部分を二重引用符で囲みます。

文字列にピリオドが含まれ、文字列の一部が二重引用符で囲まれている場合は、二重引用符を含む二重引用符部分をそのまま返し、大文字ではなく二重引用符で囲まれた二重引用符以外の部分を返します。

CANONICALIZE( name VARCHAR2、 canon_name OUT VARCHAR2、

  canon_len BINARY_INTEGER)

パラメーター

name

正規化される文字列。

canon_name

正規化された文字列。

canon_len

最初の文字から正規化 する name のバイト数

次の手順では、 入力パラメータに CANONICALIZE プロシージャを 適用し 、結果を表示します。

CREATE OR REPLACE PROCEDURE canonicalize (

    p_name      VARCHAR2,

    p_length    BINARY_INTEGER DEFAULT 30

)

IS

    v_canon     VARCHAR2(100);

BEGIN

    DBMS_UTILITY.CANONICALIZE(p_name,v_canon,p_length);

    DBMS_OUTPUT.PUT_LINE('Canonicalized name ==>' || v_canon || '<==');

    DBMS_OUTPUT.PUT_LINE('Length: ' || LENGTH(v_canon));

EXCEPTION

    WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

        DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);

END;

 

EXEC canonicalize('Identifier')

Canonicalized name ==>IDENTIFIER<==

Length: 10

 

EXEC canonicalize('"Identifier"')

Canonicalized name ==>Identifier<==

Length: 10

 

EXEC canonicalize('"_+142%"')

Canonicalized name ==>_+142%<==

Length: 6

 

EXEC canonicalize('abc.def.ghi')

Canonicalized name ==>"ABC"."DEF"."GHI"<==

Length: 17

 

EXEC canonicalize('"abc.def.ghi"')

Canonicalized name ==>abc.def.ghi<==

Length: 11

 

EXEC canonicalize('"abc".def."ghi"')

Canonicalized name ==>"abc"."DEF"."ghi"<==

Length: 17

 

EXEC canonicalize('"abc.def".ghi')

Canonicalized name ==>"abc.def"."GHI"<==

Length: 15

 

3.17.5                  COMMA_TO_TABLE

COMMA_TO_TABLE 手順は、名前のテーブルに名のカンマ区切りのリストに変換します。リストの各エントリはテーブルエントリになります。名前は、有効な識別子としてフォーマットする必要があります。

COMMA_TO_TABLE( list VARCHAR2、 tablen OUT BINARY_INTEGER、

  tab OUT {LNAME_ARRAY | UNCL_ARRAY})

パラメーター

list

名前のカンマ区切りリスト。

tablen

tab 内のエントリの数

tab

list 内の個々の名前を含む表

LNAME_ARRAY

DBMS _ UTILITY LNAME_ARRAY LNAME_ARRAY 項を 参照 )。

UNCL_ARRAY

DBMS _ UTILITY UNCL_ARRAY 3.17.2 項を 参照)。

次の手順では、 COMMA_TO_TABLE プロシージャを 使用して 名前のリストを表に変換します。テーブルエントリが表示されます。

CREATE OR REPLACE PROCEDURE comma_to_table (

    p_list      VARCHAR2

)

IS

    r_lname     DBMS_UTILITY.LNAME_ARRAY;

    v_length    BINARY_INTEGER;

BEGIN

    DBMS_UTILITY.COMMA_TO_TABLE(p_list,v_length,r_lname);

    FOR i IN 1..v_length LOOP

        DBMS_OUTPUT.PUT_LINE(r_lname(i));

    END LOOP;

END;

 

EXEC comma_to_table('edb.dept, edb.emp, edb.jobhist')

 

edb.dept

edb.emp

edb.jobhist

 

3.17.6                  DB_VERSION

DB_VERSION 手順は、データベースのバージョン番号を返します。

DB_VERSION( version OUT VARCHAR2、 compatibility OUT VARCHAR2)

パラメーター

version

データベースのバージョン番号。

 

compatibility

データベースの互換性設定。 (実装の意味については定義されています)。

次の無名ブロックは、データベースのバージョン情報を表示します。

DECLARE

    v_version       VARCHAR2(150);

    v_compat        VARCHAR2(150);

BEGIN

    DBMS_UTILITY.DB_VERSION(v_version,v_compat);

    DBMS_OUTPUT.PUT_LINE('Version: '       || v_version);

    DBMS_OUTPUT.PUT_LINE('Compatibility: ' || v_compat);

END;

 

Version: EnterpriseDB 10.0.0 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48), 32-bit

Compatibility: EnterpriseDB 10.0.0 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.220080704 (Red Hat 4.1.2-48), 32-bit

 

3.17.7                  EXEC_DDL_STATEMENT

EXEC_DDL_STATEMENT DDLコマンドを実行する機能を提供します。

EXEC_DDL_STATEMENT( parse_string VARCHAR2)

パラメーター

parse_string

実行されるDDLコマンド。

次の無名ブロックは job テーブルを 作成し ます。

BEGIN

    DBMS_UTILITY.EXEC_DDL_STATEMENT(

        'CREATE TABLE job (' ||

          'jobno NUMBER(3),' ||

          'jname VARCHAR2(9))'

    );

END;

場合 parse_string 有効なDDL文を含んでいない、Advanced Serverは、次のエラーを返します:

edb=#  exec dbms_utility.exec_ddl_statement('select rownum from dual');

ERROR:  EDB-20001: 'parse_string' must be a valid DDL statement

この場合、Advanced Serverの動作はOracleの動作とは異なります。 Oracleは無効な parse_string をクレームなしで 受け入れます

 

3.17.8                  FOR MAT_CALL_STACK

FORMAT_CALL_STACK 機能は、現在のコールスタックのフォーマットされた内容を返します。

DBMS_UTILITY.FORMAT_CALL_STACK
return VARCHAR2

この関数は、現在の呼び出しスタックを読み取り可能な形式で返すために、ストアドプロシージャ、関数、またはパッケージで使用できます。この関数は、デバッグの目的に役立ちます。

 

3.17.9                  GET_CPU_TIME

GET_CPU_TIME 機能は、時間内のいくつかの任意の点から1/100秒のCPU時間を返します。

cputime NUMBER GET_CPU_TIME

パラメーター

cputime

CPU時間の1/100秒。

次の SELECT コマンドは、現在のCPU時間を取得します。この時間は603分の1秒または.0603秒です。

SELECT DBMS_UTILITY.GET_CPU_TIME FROM DUAL;

 

get_cpu_time

--------------

          603

 

3.17.10               GET_DEPENDENCY

GET_DEPENDENCY 手順は、指定されたオブジェクトに依存するオブジェクトを一覧表示する機能を提供します。 GET_DEPENDENCY は、関数またはプロシージャーの依存関係を表示しません。

GET_DEPENDENCY( type VARCHAR2、 schema VARCHAR2、

  name VARCHAR2)

パラメーター

type

オブジェクト・タイプ name 。有効な値は、 INDEX PACKAGE PACKAGE BODY SEQUENCE TABLE TRIGGER TYPE VIEW です。

schema

名前が 存在する スキーマの name

 

name

依存関係を取得するオブジェクトの名前。

次の無名ブロックは、 EMP 表の 依存関係を検出し ます。

BEGIN

    DBMS_UTILITY.GET_DEPENDENCY('TABLE','public','EMP');

END;

 

DEPENDENCIES ON public.EMP

------------------------------------------------------------------

*TABLE public.EMP()

*   CONSTRAINT c public.emp()

*   CONSTRAINT f public.emp()

*   CONSTRAINT p public.emp()

*   TYPE public.emp()

*   CONSTRAINT c public.emp()

*   CONSTRAINT f public.jobhist()

*   VIEW .empname_view()

 

 

3.17.11               GET_HASH_VALUE

GET_HASH_VALUE 関数は、指定した文字列のハッシュ値を計算する機能を提供します。

hash NUMBER GET_HASH_VALUE( name VARCHAR2、 base NUMBER、

  hash_size NUMBER)

パラメーター

name

ハッシュ値を計算する文字列。

base

ハッシュ値を生成する開始値。

hash_size

目的のハッシュテーブルのハッシュ値の数。

hash

生成されたハッシュ値。

次の無名ブロック は、 emp テーブルの ename カラムを 使用してハッシュ値のテーブルを作成 し、そのハッシュ値と共にキーを表示します。ハッシュ値は100から始まり、最大1024個の異なる値になります。

DECLARE

    v_hash          NUMBER;

    TYPE hash_tab IS TABLE OF NUMBER INDEX BY VARCHAR2(10);

    r_hash          HASH_TAB;

    CURSOR emp_cur IS SELECT ename FROM emp;

BEGIN

    FOR r_emp IN emp_cur LOOP

        r_hash(r_emp.ename) :=

            DBMS_UTILITY.GET_HASH_VALUE(r_emp.ename,100,1024);

    END LOOP;

    FOR r_emp IN emp_cur LOOP

        DBMS_OUTPUT.PUT_LINE(RPAD(r_emp.ename,10) || ' ' ||

            r_hash(r_emp.ename));

    END LOOP;

END;

 

SMITH      377

ALLEN      740

WARD       718

JONES      131

MARTIN     176

BLAKE      568

CLARK      621

SCOTT      1097

KING       235

TURNER     850

ADAMS      156

JAMES      942

FORD       775

MILLER     148

 

3.17.12               GET_PARAMETER_VALUE

GET_PARAMETER_VALUE 手順は、データベース初期化パラメータの設定を取得する機能を提供します。

status BINARY_INTEGER GET_PARAMETER_VALUE( parnam VARCHAR2、

  intval OUT INTEGER、 strval OUT VARCHAR2)

パラメーター

parnam

値が返されるパラメータの名前。パラメータは、 pg_settings システムビューに リストされてい ます。

intval

整数パラメータの値または strval の長さ

strval

文字列パラメータの値。

status

パラメータ値が INTEGER または BOOLEAN 場合は0を返します 。パラメータ値が文字列の場合は1を返します。

次の無名ブロックは、2つの初期化パラメータの値を示しています。

DECLARE

    v_intval        INTEGER;

    v_strval        VARCHAR2(80);

BEGIN

    DBMS_UTILITY.GET_PARAMETER_VALUE('max_fsm_pages', v_intval, v_strval);

    DBMS_OUTPUT.PUT_LINE('max_fsm_pages' || ': ' || v_intval);

    DBMS_UTILITY.GET_PARAMETER_VALUE('client_encoding', v_intval, v_strval);

    DBMS_OUTPUT.PUT_LINE('client_encoding' || ': ' || v_strval);

END;

 

max_fsm_pages: 72625

client_encoding: SQL_ASCII

 

3.17.13               GET_TIME

GET_TIME 機能は1/100秒現在時刻を返す能力を提供します。

time NUMBER GET_TIME

パラメーター

time

プログラムが開始されてから100分の1秒。

次の例は、 GET_TIME 関数の 呼び出しを示してい ます。

SELECT DBMS_UTILITY.GET_TIME FROM DUAL;

 

 get_time

----------

  1555860

 

SELECT DBMS_UTILITY.GET_TIME FROM DUAL;

 

 get_time

----------

  1556037

 

 

 

 

 

3.17.14               NAME_TOKENIZE

NAME_TOKENIZE 手順は、その構成部品に名前を解析します。二重引用符のない名前は大文字です。二重引用符は二重引用符で囲まれた名前から削除されます。

NAME_TOKENIZE( name VARCHAR2、 OUT VARCHAR2、 a
b OUT VARCHAR2、 c OUT VARCHAR2、 dblink OUT VARCHAR2、
nextpos OUT BINARY_INTEGER)

パラメーター

name

次の形式の名前を含む文字列。

a [. b [. c ]][@ dblink ]

 

a

左端のコンポーネントを返します。

b

2番目のコンポーネントがあれば返します。

c

もしあれば、3番目のコンポーネントを返します。

dblink

データベースリンク名を返します。

nextpos

名前に解析された最後の文字の位置。

次のストアドプロシージャは 、さまざまな名前の NAME_TOKENIZE プロシージャの 返されたパラメータ値を表示するために使用されます

CREATE OR REPLACE PROCEDURE name_tokenize (

    p_name          VARCHAR2

)

IS

    v_a             VARCHAR2(30);

    v_b             VARCHAR2(30);

    v_c             VARCHAR2(30);

    v_dblink        VARCHAR2(30);

    v_nextpos       BINARY_INTEGER;

BEGIN

    DBMS_UTILITY.NAME_TOKENIZE(p_name,v_a,v_b,v_c,v_dblink,v_nextpos);

    DBMS_OUTPUT.PUT_LINE('name   : ' || p_name);

    DBMS_OUTPUT.PUT_LINE('a      : ' || v_a);

    DBMS_OUTPUT.PUT_LINE('b      : ' || v_b);

    DBMS_OUTPUT.PUT_LINE('c      : ' || v_c);

    DBMS_OUTPUT.PUT_LINE('dblink : ' || v_dblink);

    DBMS_OUTPUT.PUT_LINE('nextpos: ' || v_nextpos);

END;

名前をトークン化する、 emp

BEGIN

    name_tokenize('emp');

END;

 

name   : emp

a      : EMP

b      :

c      :

dblink :

nextpos: 3

名前を edb.list_emp edb.list_emp

BEGIN

    name_tokenize('edb.list_emp');

END;

 

name   : edb.list_emp

a      : EDB

b      : LIST_EMP

c      :

dblink :

nextpos: 12

名前を "edb"."Emp_Admin".update_emp_sal

BEGIN

    name_tokenize('"edb"."Emp_Admin".update_emp_sal');

END;

 

name   : "edb"."Emp_Admin".update_emp_sal

a      : edb

b      : Emp_Admin

c      : UPDATE_EMP_SAL

dblink :

nextpos: 32

名前を edb.emp@edb_dblink

BEGIN

    name_tokenize('edb.emp@edb_dblink');

END;

 

name   : edb.emp@edb_dblink

a      : EDB

b      : EMP

c      :

dblink : EDB_DBLINK

nextpos: 18

 

3.17.15               TABLE_TO_COMMA

TABLE_TO_COMMA 手順は、名のカンマ区切りのリストに名前のテーブルを変換します。各テーブルエントリはリストエントリになります。名前は、有効な識別子としてフォーマットする必要があります。

TABLE_TO_COMMA( tab { LNAME_ARRAY | UNCL_ARRAY },

  tablen OUT BINARY_INTEGER, list OUT VARCHAR2)

 

パラメーター

tab

名前を含むテーブル。

LNAME_ARRAY

DBMS _ UTILITY LNAME_ARRAY LNAME_ARRAY 項を参照 )。

UNCL_ARRAY

DBMS _ UTILITY UNCL_ARRAY 3.17.2項を参照)。

tablen

list 内のエントリの数

list

カンマで区切られた名前のリスト style = 'font-size:11.0pt'>タブをクリックします

 

 

次の例では、最初に COMMA_TO_TABLE プロシージャを使用して、コンマ区切りのリストを表に変換します。 TABLE_TO_COMMA 手順は、再度表示されるカンマ区切りのリストにテーブルを変換します。

CREATE OR REPLACE PROCEDURE table_to_comma (

    p_list      VARCHAR2

)

IS

    r_lname     DBMS_UTILITY.LNAME_ARRAY;

    v_length    BINARY_INTEGER;

    v_listlen   BINARY_INTEGER;

    v_list      VARCHAR2(80);

BEGIN

    DBMS_UTILITY.COMMA_TO_TABLE(p_list,v_length,r_lname);

    DBMS_OUTPUT.PUT_LINE('Table Entries');

    DBMS_OUTPUT.PUT_LINE('-------------');

    FOR i IN 1..v_length LOOP

        DBMS_OUTPUT.PUT_LINE(r_lname(i));

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('-------------');

    DBMS_UTILITY.TABLE_TO_COMMA(r_lname,v_listlen,v_list);

    DBMS_OUTPUT.PUT_LINE('Comma-Delimited List: ' || v_list);

END;

 

EXEC table_to_comma('edb.dept, edb.emp, edb.jobhist')

 

Table Entries

-------------

edb.dept

edb.emp

edb.jobhist

-------------

Comma-Delimited List: edb.dept, edb.emp, edb.jobhist

 

 

 

 

 

 

 

 

 

 

3.18 UTL_ENCODE

UTL _ ENCODE パッケージは、データを符号化及び復号化する方法を提供します。 Advanced Serveは、次の機能と手順をサポートしています。

Function/Procedure

Return Type

Description

BASE64_DECODE( r )

RAW

BASE64_DECODE 関数を 使用して 、Base64でエンコードされた文字列を元の RAW に変換し ます。

BASE64_ENCODE( r )

RAW

RAW 文字列をエンコードされたBase64値 に変換 するには、 BASE64_ENCODE 関数を 使用し ます。

BASE64_ENCODE( loid )

TEXT

TEXT 文字列をエンコードされたBase64値 に変換 するには、 BASE64_ENCODE 関数を 使用し ます。

MIMEHEADER_DECODE( buf )

VARCHAR2

MIMEHEADER_DECODE 関数を 使用して 、エンコードされた MIMEHEADER 形式の文字列を元の値 に変換し ます。

MIMEHEADER_ENCODE( buf , encode _ charset , encoding )

VARCHAR2

MIMEHEADER 形式の 文字列を変換およびエンコード するには、 MIMEHEADER_ENCODE 関数を 使用し ます。

QUOTED_PRINTABLE_DECODE( r )

RAW

QUOTED_PRINTABLE_DECODE 関数を 使用して 、符号化された文字列を RAW に変換し ます。

QUOTED_PRINTABLE_ENCODE( r )

RAW

QUOTED_PRINTABLE_ENCODE 関数を 使用して 、入力文字列を引用符付きの印刷可能な書式設定された RAW に変換し ます。

TEXT_DECODE( buf , encode _ charset , encoding )

VARCHAR2

TEXT_ENCODE エンコードされた文字列をデコード するには、 TEXT _ DECODE 関数を 使用し ます。

TEXT_ENCODE( buf , encode _ charset , encoding )

VARCHAR2

文字列をユーザー指定の文字セットに変換し、その文字列をエンコードするには TEXT_ENCODE 関数を 使用し ます。

UUDECODE( r )

RAW

UUDECODE 関数を 使用して 、uuencodeでエンコードされた文字列を RAW に変換し ます。

UUENCODE( r , type , filename , permission )

RAW

RAW 文字列をコード化されたuuencode値 に変換 するには、 UUENCODE 関数を 使用し ます。

 

3.18.1                  BASE64_DECODE

BASE64 使用する Base64でエンコードされた文字列を BASE64 _ ENCODE エンコードされた元の値に変換するには、 lang = EN-US> _ DECODE 関数を使用し ます。署名は次のとおりです。

BASE64_DECODE(r IN RAW)

この関数は、 RAW 値を 返し ます。

パラメーター

r

r は、RAW形式に変換されるBase64エンコードされたデータを含む文字列です。

注意:次の例を実行する前に、次のコマンドを実行してください。

SET bytea_output = escape;

このコマンドは、印刷不可能な文字をエスケープし、 BYTEA または RAW 値を画面上に読み取り可能な形式で 表示するようにサーバーに指示します 。詳細 はPostgres Core Documentation を参照してください

http://www.postgresql.org/docs/9.5/static/datatype-binary.html

次の例では、最初に( BASE64_ENCODE を使用して エンコードし 、次に abc というテキストを含む文字列を BASE64_DECODE を使用して デコード します

edb=# SELECT UTL_ENCODE.BASE64_ENCODE(CAST ('abc' AS RAW));

 base64_encode

---------------

 YWJj

(1 row)

 

edb=# SELECT UTL_ENCODE.BASE64_DECODE(CAST ('YWJj' AS RAW));

 base64_decode

---------------

 abc

(1 row)

 

3.18.2                  BASE64_ENCODE

BASE64_ENCODE 関数を 使用して 、Base64形式の文字列を変換およびエンコードします(RFC 4648で説明)。この関数は UTL_SMTP パッケージ を使用して送信する MIME メールを 作成するときに役立ち ます。 BASE64 _ ENCODE 機能は、2つのシグネチャがあります。

BASE64_ENCODE(r IN RAW)

そして

BASE64_ENCODE(loid IN OID)

この関数は、 RAW 値または OID 返し OID

パラメーター

r

r Base64に変換される RAW 文字列を 指定します

loid

loid は、Base64に変換される大きなオブジェクトのオブジェクトIDを指定します。

注意:次の例を実行する前に、次のコマンドを実行してください。

SET bytea_output = escape;

このカンマ は、印刷不可能な文字をエスケープし、 BYTEA または RAW 値を画面上に読み取り可能な形式で 表示するようにサーバーに指示します 。詳細はPostgres Core Documentationを参照してください。

http://www.postgresql.org/docs/9.5/static/datatype-binary.html

次の 例では、最初に( BASE64_ENCODE を使用して エンコードし 、次に abc というテキストを含む文字列を BASE64_DECODE を使用して デコード します

edb=# SELECT UTL_ENCODE.BASE64_ENCODE(CAST ('abc' AS RAW));

 base64_encode

---------------

 YWJj

(1 row)

 

edb=# SELECT UTL_ENCODE.BASE64_DECODE(CAST ('YWJj' AS RAW));

 base64_decode

---------------

 abc

(1 row)

 

3.18.3                  MIMEHEADER_DECODE

使用 MIMEHEADER _ DECODE により符号化された値復号化する機能を MIMEHEADER _ ENCODE 機能を。署名は次のとおりです。

MIMEHEADER_DECODE( buf IN VARCHAR2)

このファンクションは、 VARCHAR2 値を 戻し ます。

パラメーター

buf

buf は、 デコード される値( MIMEHEADER _ ENCODE エンコードされた値)が含ま れます。

次の例では、 MIMEHEADER _ ENCODE 関数 MIMEHEADER _ DECODE 関数を使用して、最初にエンコードしてから文字列をデコードします。

edb=# SELECT UTL_ENCODE.MIMEHEADER_ENCODE('What is the date?') FROM DUAL;

      mimeheader_encode      

------------------------------

 =?UTF8?Q?What is the date??=

(1 row)

 

edb=# SELECT UTL_ENCODE.MIMEHEADER_DECODE('=?UTF8?Q?What is the date??=') FROM DUAL;

 mimeheader_decode

-------------------

 What is the date?

(1 row)

 

3.18.4                  MIMEHEADER_ENCODE

使用 MIMEHEADER _ ENCODE MIMEヘッダフォーマットに文字列を変換する機能を、その後の文字列をエンコードします。署名は次のとおりです。

MIMEHEADER_ENCODE( buf IN VARCHAR2, encode_charset IN VARCHAR2 DEFAULT NULL, encoding IN INTEGER DEFAULT NULL)

このファンクションは、 VARCHAR2 値を 戻し ます。

パラメーター

buf

buf は、フォーマットされエンコードされる文字列が含まれます。文字列は VARCHAR2 値です。

encode_charset

encode_charset は、文字列をフォーマットしてエンコードする前に文字列を変換する文字セットを指定します。   デフォルト値は NULL です。

encoding

encoding は、文字列をエンコードするときに使用されるエンコードタイプ encoding 指定します。次のように指定できます。

Q された印刷可能なエンコーディングを有効にするには Q 値を指定しない場合、 MIMEHEADER _ ENCODE はquoted-printableエンコーディングを使用します。

      B を使用してベース64エンコーディングを有効にします。

次の例では、 MIMEHEADER _ ENCODE 関数 MIMEHEADER _ DECODE 関数を使用して、最初にエンコードしてから文字列をデコードします。

edb=# SELECT UTL_ENCODE.MIMEHEADER_ENCODE('What is the date?') FROM DUAL;

      mimeheader_encode      

------------------------------

 =?UTF8?Q?What is the date??=

(1 row)

 

edb=# SELECT UTL_ENCODE.MIMEHEADER_DECODE('=?UTF8?Q?What is the date??=') FROM DUAL;

 mimeheader_decode

-------------------

 What is the date?

(1 row)

 

3.18.5                  QUOTED_PRINTABLE_DECODE

QUOTED _ PRINTABLE _ DECODE 関数を 使用して 、コード化された引用符付きの印刷可能な文字列をデコードされたRAW文字列に変換します。

署名は次のとおりです。

QUOTED_PRINTABLE_DECODE(r IN RAW)

この関数は、 RAW 値を 返し ます。

パラメーター

r

r は、デコードされるエンコードされた文字列が含まれます。文字列は QUOTED _ PRINTABLE _ ENCODE でエンコードされたRAW値 です。

注意:次の例を実行する前に、次のコマンドを実行してください。

SET bytea_output = escape;

このコマンドは、印刷不可能な文字をエスケープし、 BYTEA または RAW 値を画面上に読み取り可能な形式で 表示するようにサーバーに指示します 。詳細はPostgres Core Dの ドキュメント を参照してください

http://www.postgresql.org/docs/9.5/static/datatype-binary.html

次の例で は、 最初に 文字列をエンコードしてからデコードします。

edb=# SELECT UTL_ENCODE.QUOTED_PRINTABLE_ENCODE('E=mc2') FROM DUAL;  quoted_printable_encode

-------------------------

 E=3Dmc2

(1 row)

 

edb=# SELECT UTL_ENCODE.QUOTED_PRINTABLE_DECODE('E=3Dmc2') FROM DUAL;

 quoted_printable_decode

-------------------------

 E=mc2

(1 row)

 

3.18.6                  QUOTED_PRINTABLE_ENCODE

QUOTED _ PRINTABLE _ ENCODE 関数を 使用して 、文字列を引用符付きの印刷可能な形式で変換およびエンコードします。署名は次のとおりです。

QUOTED_PRINTABLE_ENCODE(r IN RAW)

この関数は、 RAW 値を 返し ます。

パラメーター

r

r は引用符で囲まれた形式でエンコードされる文字列(RAW値)を含みます。

注意:次の例を実行する前に、次のコマンドを実行してください。

SET bytea_output = escape;

このコマンドは、印刷不可能な文字をエスケープし、 BYTEA または RAW 値を画面上に読み取り可能な形式で 表示するようにサーバーに指示します 。詳細については、Postgres Core Documentation ava ilable を参照してください

http://www.postgresql.org/docs/9.5/static/datatype-binary.html

次の例では、最初に 文字列を エンコードして からデコードします。

edb=# SELECT UTL_ENCODE.QUOTED_PRINTABLE_ENCODE('E=mc2') FROM DUAL;  quoted_printable_encode

-------------------------

 E=3Dmc2

(1 row)

 

edb=# SELECT UTL_ENCODE.QUOTED_PRINTABLE_DECODE('E=3Dmc2') FROM DUAL;

 quoted_printable_decode

-------------------------

 E=mc2

(1 row)

 

3.18.7                  TEXT_DECODE

TEXT_DECODE ファンクションを 使用して 、エンコードされた文字列を TEXT_ENCODE ファンクションで 最初にエンコードされた VARCHAR2 に変換およびデコードし ます。署名は次のとおりです。

TEXT_DECODE( buf IN VARCHAR2, encode_charset IN VARCHAR2 DEFAULT NULL, encoding IN PLS_INTEGER DEFAULT NULL)

このファンクションは、 VARCHAR2 値を 戻し ます。

パラメーター

buf

buf には TEXT_ENCODE エンコードされた元の値に変換されるエンコードされた文字列が含まれ TEXT_ENCODE

encode_charset

encode_charset は、エンコード前に文字列を翻訳する文字セットを指定します。   デフォルト値は NULL です。

encoding

encoding は、 TEXT_DECODE 使用されるエンコードタイプ encoding 指定します 。指定:

      UTL_ENCODE.BASE64 を使用してベース64エンコーディングを指定します。

      UTL_ENCODE.QUOTED_PRINTABLE は、引用符付きの印刷可能なエンコーディングを指定します。これがデフォルトです。

次の例では、 TEXT_ENCODE および TEXT_DECODE 関数を 使用し て最初にエンコードし、次に文字列をデコードします。

edb=# SELECT UTL_ENCODE.TEXT_ENCODE('What is the date?', 'BIG5', UTL_ENCODE.BASE64) FROM DUAL;

       text_encode       

--------------------------

 V2hhdCBpcyB0aGUgZGF0ZT8=

(1 row)

 

edb=# SELECT UTL_ENCODE.TEXT_DECODE('V2hhdCBpcyB0aGUgZGF0ZT8=', 'BIG5', UTL_ENCODE.BASE64) FROM DUAL;

    text_decode   

-------------------

 What is the date?

(1 row)

 

3.18.8                  TEXT_ENCODE

文字列をユーザー指定の文字セットに変換し、その文字列をエンコードするには TEXT_ENCODE 関数を 使用し ます。署名は次のとおりです。

TEXT_DECODE( buf IN VARCHAR2, encode_charset IN VARCHAR2 DEFAULT NULL, encoding IN PLS_INTEGER DEFAULT NULL)

このファンクションは、 VARCHAR2 値を 戻し ます。

パラメーター

buf

buf は、指定された文字セットに変換され、 TEXT_ENCODE によってエンコードされるエンコードされた文字列が含まれ TEXT_ENCODE

encode_charset

encode_charset は、値がエンコードされる前に変換される文字セットを指定します。 デフォルト値は NULL です。

encoding

encoding は、 TEXT_ENCODE 使用されるエンコーディングタイプ encoding 指定します 。指定:

      UTL_ENCODE.BASE64 を使用してベース64エンコーディングを指定します。

      UTL_ENCODE.QUOTED_PRINTABLE は、引用符付きの印刷可能なエンコーディングを指定します。これがデフォルトです。

次の例では、 TEXT_ENCODE および TEXT_DECODE 関数を 使用し て最初にエンコードし、次に文字列をデコードします。

edb=# SELECT UTL_ENCODE.TEXT_ENCODE('What is the date?', 'BIG5', UTL_ENCODE.BASE64) FROM DUAL;

       text_encode       

--------------------------

 V2hhdCBpcyB0aGUgZGF0ZT8=

(1 row)

 

edb=# SELECT UTL_ENCODE.TEXT_DECODE('V2hhdCBpcyB0aGUgZGF0ZT8=', 'BIG5', UTL_ENCODE.BASE64) FROM DUAL;

    text_decode   

-------------------

 What is the date?

(1 row)

 

3.18.9                  UUDECODE

UUDECODE 関数を 使用して、 UUDECODE エンコードされた文字列を 元の UUENCODE 関数で エンコードされた RAW に変換およびデコードし ます。署名は次のとおりです。

UUDECODE(r IN RAW)

この関数は、 RAW 値を 返し ます。

注: Advanced Server UUDECODE 関数を 使用 してOracle実装の UTL_ENCODE.UUENCODE 関数で 作成された UUDECODE 符号化データをデコードする 場合 、Advanced Server UUDECODE を呼び出す前に Advanced Server構成パラメーター utl_encode.uudecode_redwood TRUE 設定する必要があり ます Oracleで作成されたデータに対して機能します。たとえば、uuencodeされたデータを含むOracle表をAdvanced Serverデータベースに移行した場合、この状況が発生することがあります。

Oracleバージョンの UUENCODE 関数によって作成された UUENCODE 符号 化データは、Advanced Server UUENCODE 関数 によって作成された UUENCODE 符号 化データとは異なる形式に UUENCODE ます。その結果、 構成パラメーター utl_encode.uudecode_redwood TRUE 設定されてい ない限り、Oracle uuencodedデータに対して Advanced Server UUDECODE 機能 を使用しようとする と、エラーが発生します

あなたはAdvanced Serverの使用している場合は、 UUDECODE 高度なサーバーによって作成されたuuencodeされたデータに機能を UUENCODE 機能、そして utl_encode.uudecode_redwood に設定する必要があります FALSE デフォルト設定です。

パラメーター

r

r RAWに変換されるuuencode文字列が含まれています

注意:次の例を実行する前に、次のコマンドを実行してください。

SET bytea_output = escape;

このコマンドは、印刷不可能な文字をエスケープし、 BYTEA または RAW 値を画面上に 読み取り可能な形式で 表示するようにサーバーに指示します 。詳細はPostgres Core Documentationを参照してください。

http://www.postgresql.org/docs/9.5/static/datatype-binary.html

次の例では、 UUENCODE UUDECODE 使用 して、最初に文字列をエンコードしてからデコードします。

edb=# SET bytea_output = escape;

SET

edb=# SELECT UTL_ENCODE.UUENCODE('What is the date?') FROM DUAL;

                              uuencode                              

--------------------------------------------------------------------

 begin 0 uuencode.txt\01215VAA="!I<R!T:&4@9&%T93\\`\012`\012end\012

(1 row)

 

edb=# SELECT UTL_ENCODE.UUDECODE

edb-# ('begin 0 uuencode.txt\01215VAA="!I<R!T:&4@9&%T93\\`\012`\012end\012')

edb-# FROM DUAL;

     uudecode     

-------------------

 What is the date?

(1 row)

 

3.18.10               UUENCODE

UUENCODE 関数を 使用して、 RAW データを UUENCODE 形式のエンコードされた文字列に変換します。署名は次のとおりです。

UUENCODE( r IN RAW, type IN INTEGER DEFAULT 1, filename IN VARCHAR2 DEFAULT NULL, permission IN VARCHAR2 DEFAULT NULL)

この関数は、 RAW 値を 返し ます。

パラメーター

r

r は、 uuencode形式に変換される RAW 文字列が 含まれてい ます。

type

type は、 返されるuuencodeされた文字列の型を指定 する INTEGER 値または定数です。デフォルト値は 1 です。可能な値は次のとおりです。

Value

Constant

1

complete

2

header_piece

3

middle_piece

4

end_piece

filename

filename 、エンコードされたフォームに埋め込みたいファイル名を指定 する VARCHAR2 値です。あなたは、ファイル名を指定しない場合は、 UUENCODE ファイルのファイル名が含まれます uuencode.txt 符号化された形式で。

permission

permission 、権限モードを指定 する VARCHAR2 です。デフォルト値は NULL です。

注意:次の例を実行する前に、次のコマンドを実行してください。

SET bytea_output = escape;

このコマンドは、印刷不可能な文字をエスケープし、 BYTEA または RAW 値を画面上に 読み取り可能な形式で 表示するようにサーバーに指示します 。詳細はPostgres Core Documentationを参照してください。

http://www.postgresql.org/docs/9.5/static/datatype-binary.html

次の例では、 UUENCODE UUDECODE 使用 して、最初に文字列をエンコードしてからデコードします。

edb=# SET bytea_output = escape;

SET

edb=# SELECT UTL_ENCODE.UUENCODE('What is the date?') FROM DUAL;

                              uuencode                             

--------------------------------------------------------------------

 begin 0 uuencode.txt\01215VAA="!I<R!T:&4@9&%T93\\`\012`\012end\012

(1 row)

 

edb=# SELECT UTL_ENCODE.UUDECODE

edb-# ('begin 0 uuencode.txt\01215VAA="!I<R!T:&4@9&%T93\\`\012`\012end\012')

edb-# FROM DUAL;

     uudecode     

-------------------

 What is the date?

(1 row)

 

 

 

 

 

 

3.19 UTL_FILE

UTL_FILE パッケージはから読み取る、およびオペレーティング・システムのファイル・システム上のファイルへの書き込み機能を提供します。非スーパー・ユーザーに は、パッケージ内の関数またはプロシージャを使用する前に、スーパーユーザーが UTL_FILE パッケージ に対する EXECUTE 権限を付与されている UTL_FILE ます。たとえば、次のコマンドは、ユーザー mary 特権を付与します

GRANT EXECUTE ON PACKAGE SYS.UTL_FILE TO mary;

また、オペレーティング・システムのユーザー名 enterprisedb には、 UTL_FILE 関数およびプロシージャ を使用してアクセスするディレクトリおよびファイルに対する適切な読取りおよび/または書込み権限が 必要です。必要なファイルのパーミッションが UTL_FILE ない場合 UTL_FILE ファンクションまたはプロシージャ で例外がスローされ ます。

ファイルを参照するために、書き込むファイルまたは読み込むファイルのハンドルが使用されます。 ファイルハンドルが でパブリック変数によって定義された UTL_FILE 、という名前のパッケージ UTL_FILE.FILE_TYPE FOPEN 関数を 呼び出して返されたファイルハンドルを受け取るには、 FILE_TYPE 型の変数を 宣言する必要があります 。その後、ファイルハンドルはファイル上のすべての後続操作に使用されます。

ファイルシステム上のディレクトリへの参照は、 CREATE を使用してディレクトリに割り当てられたディレクトリ名またはエイリアスを使用して行われます DIRECTORY コマンド。 UTL_FILE パッケージで 使用可能なプロシージャおよびファンクションを 次の表に示します。

Function/Procedure

Return Type

Description

FCLOSE( ファイル IN OUT)

該当なし

閉じる ファイルで識別される指定されたファイル

FCLOSE_ALL

該当なし

開いているすべてのファイルを閉じます。

FCOPY( 場所 , ファイル名 , dest_dir , dest_file [, start_line [, end_line ] ])

該当なし

ファイル をコピーする ために 場所 によって識別されるディレクトリ内 のファイル名 、DEST_FILE、ディレクトリで、DEST_DIR、 行から、start_line、 ラインに、end_line。

FFLUSH( ファイル )

該当なし

バッファ内のデータをfileで指定された ファイル 内のディスクに書き込むよう強制し ます

FOPEN( 場所 , ファイル名 , open_mode [, max_linesize ])

FILE_TYPE

locationで 指定されたディレクトリに ファイルfilenameを 開きます

FREMOVE( 場所 , ファイル名 )

該当なし

指定されたファイルをファイルシステムから削除します。

FRENAME( 場所 , ファイル名 , dest_dir , dest_file [, 上書き ])

該当なし

指定したファイルの名前を変更します。

GET_LINE( ファイル , バッファ OUT)

該当なし

fileで指定された ファイル から テキストの行を変数 buffer 読み込み ます

IS_OPEN( ファイル )

BOOLEAN

指定されたファイルが開いているかどうかを判定します。

NEW_LINE( ファイル [, ])

該当なし

行末の文字シーケンスをファイルに書き込みます。

PUT( ファイル , バッファ )

該当なし

バッファ を指定されたファイルに 書き込み ます。 PUT は、行末の文字シーケンスを書きません。

PUT_LINE( ファイル , バッファ )

該当なし

バッファ を指定されたファイルに 書き込み ます。 PUT_LINE プロシージャ によって、行末の文字シーケンスが追加され ます。

PUTF( ファイル , フォーマット [, arg1 ] [, ...])

該当なし

指定されたファイルに書式付き文字列を書き込みます。最大5つの置換パラメーター arg1 、... arg5 format での置換に指定することができます

Advanced Serverの UTL_FILE の実装 は、Oracleのバージョンと比較して部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。

UTL_FILE例外コード

UTL_FILE プロシージャまたはファンクション へのコールで 例外が発生した場合は、条件名を使用し て例外 キャッチ できます UTL_FILE パッケージには、Oracleデータベースと互換性のある次の例外コードを報告します。

例外コード

条件名

-29283

invalid_operation

-29285

write_error

-29284

read_error

-29282

invalid_filehandle

-29287

invalid_maxlinesize

-29281

invalid_mode

-29280

invalid_path

 

3.19.1                  Setting File Permissions with utl_file.umask

UTL_FILE ファンクションまたはプロシージャがファイルを作成する ときは 、次のようにデフォルトのファイル権限があります。

-rw------- 1 enterprisedb enterprisedb 21 Jul 24 16:08 utlfile

enterprisedb グループに 属するユーザー だけでなく、他のすべてのユーザー に対して、すべてのアクセス許可が拒否されることに注意してください enterprisedb ユーザー だけが 、作成されたファイルに対する読み取りおよび書き込みの権限を持ちます。

UTL_FILE ファンクションおよびプロシージャ によって作成されたファイルに対して異なるファイル・パーミッションを使用する 場合は、 utl_file.umask 構成パラメータを 設定して、これを utl_file.umask できます。

utl_file.umask パラメータは、Linuxと同様に、 ファイルモード作成マスクあるいは単に、 マスクを設定 umask コマンド。これは、Advanced Server UTL_FILE パッケージ 内でのみ使用でき ます。

注意: utl_file.umask パラメータは、Windowsシステムではサポートされません。

utl_file.umask 指定された値 は、Linuxの umask コマンドで 有効な3文字または4文字の8進数の文字列です 。この設定によって、 UTL_FILE ファンクションおよびプロシージャ によって作成されるファイルに対するパーミッションが決定され ます。 (ファイル権限と umask コマンドの 使用法については、LinuxまたはUnixシステムに関する情報源を参照してください )。

utl_file.umask てファイルのアクセス権を設定する例を次に示します

まず、 UTL_FILE パッケージで 使用されるファイル・システム内のディレクトリを設定し ます。オペレーティングシステムのアカウント、 enterprisedb または postgres うち、該当するものがディレクトリに読み書きできる ことを確認してください

mkdir /tmp/utldir

chmod 777 /tmp/utldir

CREATE DIRECTORY コマンドがで発行された psql 前のステップで作成したファイルシステムのディレクトリを使用して、ディレクトリデータベースオブジェクトを作成します。

CREATE DIRECTORY utldir AS '/tmp/utldir';

設定し utl_file.umask 設定パラメータを。次の設定では、ファイル所有者に任意の許可が与えられます。グループユーザーや他のユーザーには、実行権限以外のアクセス許可が与えられます。

SET utl_file.umask TO '0011';

utl_file.umask パラメータが目的の値に設定されて いる同じセッションで UTL_FILE ファンクションおよびプロシージャを実行します。

DECLARE

    v_utlfile       UTL_FILE.FILE_TYPE;

    v_directory     VARCHAR2(50) := 'utldir';

    v_filename      VARCHAR2(20) := 'utlfile';

BEGIN

    v_utlfile := UTL_FILE.FOPEN(v_directory, v_filename, 'w');

    UTL_FILE.PUT_LINE(v_utlfile, 'Simple one-line file');

    DBMS_OUTPUT.PUT_LINE('Created file: ' || v_filename);

    UTL_FILE.FCLOSE(v_utlfile);

END;

結果のファイルのアクセス許可の設定は、グループユーザーと他のユーザーがファイルおよびファイルの所有者に対して読み取りと書き込みのアクセス権を持っていることを示しています。

$ pwd

/tmp/utldir

$ ls -l

total 4

-rw-rw-rw- 1 enterprisedb enterprisedb 21 Jul 24 16:04 utlfile

このパラメータは、 ALTER ROLE コマンドを使用して ALTER ROLE 単位で、 ALTER DATABASE コマンドを使用 してデータベースごとに 、またはデータベースサーバインスタンス全体に対して、 postgresql.conf ファイル で設定することによっても設定 できます。

 

3.19.2                  FCLOSE

FCLOSE 手順は、開いているファイルを閉じます。

FCLOSE( file IN OUT FILE_TYPE)

パラメーター

file

閉じられるファイルのファイルハンドルを含む FILE_TYPE 型の変数

 

3.19.3                  FCLOSE_ALL

FLCLOSE_ALL 手順は、開いているすべてのファイルを閉じます。終了するファイルが開いていない場合でも、プロシージャは正常に実行されます。

FCLOSE_ALL

 

3.19.4                  FCOPY

FCOPY つのファイルから別の手順をコピーしたテキスト。

FCOPY( location VARCHAR2、 filename VARCHAR2、

  dest_dir VARCHAR2、 dest_file VARCHAR2

[、 start_line PLS_INTEGER [、 end_line PLS_INTEGER]])

 

パラメーター

location

pg_catalog.edb_dir.dirname 格納され ている、コピーするファイルを含むディレクトリのディレクトリ

filename

コピーされるソースファイルの名前。

dest_dir

ファイルがコピーされるディレクトリの pg_catalog.edb_dir.dirname 格納されているディレクトリ名

dest_file

宛先ファイルの名前。

start_line

コピーが開始されるソースファイルの行番号。デフォルトは1です。

end_line

コピーされるソースファイル内の最後の行の行番号。省略またはnullの場合、コピーはファイルの最後の行に移動します。

次の例は emp 表の 従業員のカンマ区切りリストを含む ファイル C:\TEMP\EMPDIR\empfile.csv コピーを作成し ます。次に、コピー empcopy.csv がリストされます。

CREATE DIRECTORY empdir AS 'C:/TEMP/EMPDIR';

 

DECLARE

    v_empfile       UTL_FILE.FILE_TYPE;

    v_src_dir       VARCHAR2(50) := 'empdir';

    v_src_file      VARCHAR2(20) := 'empfile.csv';

    v_dest_dir      VARCHAR2(50) := 'empdir';

    v_dest_file     VARCHAR2(20) := 'empcopy.csv';

    v_emprec        VARCHAR2(120);

    v_count         INTEGER := 0;

BEGIN

    UTL_FILE.FCOPY(v_src_dir,v_src_file,v_dest_dir,v_dest_file);

    v_empfile := UTL_FILE.FOPEN(v_dest_dir,v_dest_file,'r');

    DBMS_OUTPUT.PUT_LINE('The following is the destination file, ''' ||

        v_dest_file || '''');

    LOOP

        UTL_FILE.GET_LINE(v_empfile,v_emprec);

        DBMS_OUTPUT.PUT_LINE(v_emprec);

        v_count := v_count + 1;

    END LOOP;

    EXCEPTION

        WHEN NO_DATA_FOUND THEN

            UTL_FILE.FCLOSE(v_empfile);

            DBMS_OUTPUT.PUT_LINE(v_count || ' records retrieved');

        WHEN OTHERS THEN

            DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

            DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);

END;

 

The following is the destination file, 'empcopy.csv'

7369,SMITH,CLERK,7902,17-DEC-80,800,,20

7499,ALLEN,SALESMAN,7698,20-FEB-81,1600,300,30

7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30

7566,JONES,MANAGER,7839,02-APR-81,2975,,20

7654,MARTIN,SALESMAN,7698,28-SEP-81,1250,1400,30

7698,BLAKE,MANAGER,7839,01-MAY-81,2850,,30

7782,CLARK,MANAGER,7839,09-JUN-81,2450,,10

7788,SCOTT,ANALYST,7566,19-APR-87,3000,,20

7839,KING,PRESIDENT,,17-NOV-81,5000,,10

7844,TURNER,SALESMAN,7698,08-SEP-81,1500,0,30

7876,ADAMS,CLERK,7788,23-MAY-87,1100,,20

7900,JAMES,CLERK,7698,03-DEC-81,950,,30

7902,FORD,ANALYST,7566,03-DEC-81,3000,,20

7934,MILLER,CLERK,7782,23-JAN-82,1300,,10

14 records retrieved

 

3.19.5                  FFLUSH

FFLUSH 手順は、ファイルへの書き込みバッファから書き込まれていないデータをフラッシュします。

FFLUSH( file FILE_TYPE)

パラメーター

file

ファイルハンドルを含む FILE_TYPE 型の変数

NEW_LINE プロシージャーが呼び出さ れた後、各行がフラッシュさ れます。

DECLARE

    v_empfile       UTL_FILE.FILE_TYPE;

    v_directory     VARCHAR2(50) := 'empdir';

    v_filename      VARCHAR2(20) := 'empfile.csv';

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    v_empfile := UTL_FILE.FOPEN(v_directory,v_filename,'w');

    FOR i IN emp_cur LOOP

        UTL_FILE.PUT(v_empfile,i.empno);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.ename);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.job);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.mgr);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.hiredate);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.sal);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.comm);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.deptno);

        UTL_FILE.NEW_LINE(v_empfile);

        UTL_FILE.FFLUSH(v_empfile);

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('Created file: ' || v_filename);

    UTL_FILE.FCLOSE(v_empfile);

END;

 

3.19.6                  FOPEN

FOPEN 機能は、I / O用のファイルを開きます。

filetype FILE_TYPE FOPEN( location VARCHAR2、
filename VARCHAR2、 open_mode VARCHAR2
[、
max_linesize BINARY_INTEGER])

パラメーター

location

開くファイルを含むディレクトリの pg_catalog.edb_dir.dirname 格納されているディレクトリ名

filename

開くファイルの名前。

open_mode

ファイルを開くモード。モードは次のとおりです。 -ファイルに追加します。 a r - ファイルから読み込みます。 w - ファイルに書き込みます。

max_linesize

文字の行の最大サイズ。読み取りモードでは、 max_linesize を超える行を max_linesize うとすると例外がスローされます 。書き込みモードと追加モードでは、 max_linesize を超える行を max_linesize うとすると例外がスローされます 。行末の文字は、行の最大サイズを超えたかどうかを判断する際には含まれません。この動作はOracleデータベースと互換性がありません。 Oracleでは、行末の文字をカウントします

filetype

開いたファイルのファイルハンドルを含む FILE_TYPE 型の変数

 

3.19.7                  FREMOVE

FREMOVE 手順では、システムからファイルを削除します。

FREMOVE( location VARCHAR2、 filename VARCHAR2)

削除するファイルが存在しない場合は、例外がスローされます。

パラメーター

location

削除されるファイルを含むディレクトリの pg_catalog.edb_dir.dirname 格納されているディレクトリ名

filename

削除するファイルの名前。

以下は、 empfile.csv ファイルを削除します

DECLARE

    v_directory     VARCHAR2(50) := 'empdir';

    v_filename      VARCHAR2(20) := 'empfile.csv';

BEGIN

    UTL_FILE.FREMOVE(v_directory,v_filename);

    DBMS_OUTPUT.PUT_LINE('Removed file: ' || v_filename);

    EXCEPTION

        WHEN OTHERS THEN

            DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

            DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);

END;

 

Removed file: empfile.csv

 

3.19.8                  FRENAME

FRENAME 手順では、指定したファイルの名前を変更します。これにより、ある場所から別の場所にファイルを効果的に移動します。

FRENAME( location VARCHAR2、 filename VARCHAR2、

  dest_dir VARCHAR2、 dest_file VARCHAR2、
[
BOOLEANを overwrite ])

パラメーター

location

格納されているディレクトリ名 11.0pt '> pg_catalog.edb_dir.dirname 、名前を変更するファイルを含むディレクトリの名前。

filename

名前を変更するソースファイルの名前。

dest_dir

名前 が変更されたファイルが存在するディレクトリの pg_catalog.edb_dir.dirname 格納されているディレクトリ名

dest_file

元のファイルの新しい名前。

overwrite

TRUE 設定されている場合 dest_dir 既存のファイル dest_file 置き換え ます。そうでない場合は、FALSEに設定されていると例外がスローされます。これがデフォルトです。

以下 は、 emp 表の 従業員のカンマ区切りリストを含む ファイル C:\TEMP\EMPDIR\empfile.csv 名前を変更したものです 。名前が変更されたファイル C:\TEMP\NEWDIR\newemp.csv が一覧表示されます。

CREATE DIRECTORY "newdir" AS 'C:/TEMP/NEWDIR';

 

DECLARE

    v_empfile       UTL_FILE.FILE_TYPE;

    v_src_dir       VARCHAR2(50) := 'empdir';

    v_src_file      VARCHAR2(20) := 'empfile.csv';

    v_dest_dir      VARCHAR2(50) := 'newdir';

    v_dest_file     VARCHAR2(50) := 'newemp.csv';

    v_replace       BOOLEAN := FALSE;

    v_emprec        VARCHAR2(120);

    v_count         INTEGER := 0;

BEGIN

    UTL_FILE.FRENAME(v_src_dir,v_src_file,v_dest_dir,

        v_dest_file,v_replace);

    v_empfile := UTL_FILE.FOPEN(v_dest_dir,v_dest_file,'r');

    DBMS_OUTPUT.PUT_LINE('The following is the renamed file, ''' ||

        v_dest_file || '''');

    LOOP

        UTL_FILE.GET_LINE(v_empfile,v_emprec);

        DBMS_OUTPUT.PUT_LINE(v_emprec);

        v_count := v_count + 1;

    END LOOP;

    EXCEPTION

        WHEN NO_DATA_FOUND THEN

            UTL_FILE.FCLOSE(v_empfile);

            DBMS_OUTPUT.PUT_LINE(v_count || ' records retrieved');

        WHEN OTHERS THEN

            DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

            DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);

END;

 

The following is the renamed file, 'newemp.csv'

7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

14 records retrieved

 

3.19.9                  GET_LINE

GET_LINE 手順は、最大指定したファイルからテキストの行を読み込みますが、行末ターミネータを含みません。 NO_DATA_FOUND 読んで、それ以上の行が存在しない場合、例外がスローされます。

GET_LINE( file FILE_TYPE、 buffer OUT VARCHAR2)

パラメーター

file

開いたファイルのファイルハンドルを含む FILE_TYPE 型の変数

 

buffer

ファイルから行を受け取る変数。

次の匿名ブロックは、ファイル empfile.csv 内のレコードを読み取って表示します

DECLARE

    v_empfile       UTL_FILE.FILE_TYPE;

    v_directory     VARCHAR2(50) := 'empdir';

    v_filename      VARCHAR2(20) := 'empfile.csv';

    v_emprec        VARCHAR2(120);

    v_count         INTEGER := 0;

BEGIN

    v_empfile := UTL_FILE.FOPEN(v_directory,v_filename,'r');

    LOOP

        UTL_FILE.GET_LINE(v_empfile,v_emprec);

        DBMS_OUTPUT.PUT_LINE(v_emprec);

        v_count := v_count + 1;

    END LOOP;

    EXCEPTION

        WHEN NO_DATA_FOUND THEN

            UTL_FILE.FCLOSE(v_empfile);

            DBMS_OUTPUT.PUT_LINE('End of file ' || v_filename || ' - ' ||

                v_count || ' records retrieved');

        WHEN OTHERS THEN

            DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

            DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);

END;

 

7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

End of file empfile.csv - 14 records retrieved

 

3.19.10               IS_OPEN

IS_OPEN 関数は、指定したファイルが開いているか否かを判断します。

status BOOLEAN IS_OPEN( file FILE_TYPE)

パラメーター

file

テストされるファイルのファイルハンドルを含む FILE_TYPE 型の変数

status

指定されたファイルが開いている場合は TRUE それ以外の場合 FALSE ます。

 

3.19.11               NEW_LINE

NEW_LINE 手順は、ファイル内の行末文字列を書き込みます。

NEW_LINE( file FILE_TYPE [、 lines INTEGER])

パラメーター

file

行末文字シーケンスが書き込まれるファイルのファイルハンドルを含む FILE_TYPE 型の変数

lines

書き込まれる行末文字シーケンスの数。デフォルトは1です。

従業員レコードの2桁区切りリストを含むファイルが書き込まれます。

DECLARE

    v_empfile       UTL_FILE.FILE_TYPE;

    v_directory     VARCHAR2(50) := 'empdir';

    v_filename      VARCHAR2(20) := 'empfile.csv';

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    v_empfile := UTL_FILE.FOPEN(v_directory,v_filename,'w');

    FOR i IN emp_cur LOOP

        UTL_FILE.PUT(v_empfile,i.empno);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.ename);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.job);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.mgr);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.hiredate);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.sal);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.comm);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.deptno);

        UTL_FILE.NEW_LINE(v_empfile,2);

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('Created file: ' || v_filename);

    UTL_FILE.FCLOSE(v_empfile);

END;

 

Created file: empfile.csv

このファイルが表示されます。

C:\TEMP\EMPDIR>TYPE empfile.csv

 

7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

 

7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

 

7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

 

7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

 

7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

 

7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

 

7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

 

7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

 

7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

 

7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

 

7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

 

7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

 

7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

 

7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

 

3.19.12               PUT

PUT 手順では、指定した文字列をファイルに書き込みます。文字列の最後には、行末の文字シーケンスは書き込まれません。 NEW_LINE プロシージャーを 使用して、 行末の文字シーケンスを追加します。

PUT( file FILE_TYPE、 buffer {DATE | NUMBER | TIMESTAMP |

VARCHAR2})

パラメーター

file

FILE_TYPE された文字列が書き込まれるファイルのファイルハンドルを含む FILE_TYPE 型の変数

buffer

指定されたファイルに書き込まれるテキスト。

次の例では、 PUT プロシージャを使用して、 emp から従業員のカンマ区切りファイルを作成します

DECLARE

    v_empfile       UTL_FILE.FILE_TYPE;

    v_directory     VARCHAR2(50) := 'empdir';

    v_filename      VARCHAR2(20) := 'empfile.csv';

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    v_empfile := UTL_FILE.FOPEN(v_directory,v_filename,'w');

    FOR i IN emp_cur LOOP

        UTL_FILE.PUT(v_empfile,i.empno);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.ename);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.job);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.mgr);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.hiredate);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.sal);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.comm);

        UTL_FILE.PUT(v_empfile,',');

        UTL_FILE.PUT(v_empfile,i.deptno);

        UTL_FILE.NEW_LINE(v_empfile);

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('Created file: ' || v_filename);

    UTL_FILE.FCLOSE(v_empfile);

END;

 

Created file: empfile.csv

次に、 上記で作成した empfile.csv の内容を empfile.csv ます。

C:\TEMP\EMPDIR>TYPE empfile.csv

 

7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

 

3.19.13               PUT_LINE

PUT_LINE 手順は、行末文字列を含む指定したファイルに、単一の行を書き込みます。

PUT_LINE( file FILE_TYPE、
buffer {DATE | NUMBER | TIMESTAMP | VARCHAR2})

パラメーター

file

FILE_TYPE された行が書き込まれるファイルのファイルハンドルを含む FILE_TYPE 型の変数

buffer

指定されたファイルに書き込まれるテキスト。

次の例では、 PUT_LINE プロシージャを使用して、 emp から従業員のカンマ区切りファイルを作成します

DECLARE

    v_empfile       UTL_FILE.FILE_TYPE;

    v_directory     VARCHAR2(50) := 'empdir';

    v_filename      VARCHAR2(20) := 'empfile.csv';

    v_emprec        VARCHAR2(120);

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    v_empfile := UTL_FILE.FOPEN(v_directory,v_filename,'w');

    FOR i IN emp_cur LOOP

        v_emprec := i.empno || ',' || i.ename || ',' || i.job || ',' ||

            NVL(LTRIM(TO_CHAR(i.mgr,'9999')),'') || ',' || i.hiredate ||

            ',' || i.sal || ',' ||

            NVL(LTRIM(TO_CHAR(i.comm,'9990.99')),'') || ',' || i.deptno;

        UTL_FILE.PUT_LINE(v_empfile,v_emprec);

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('Created file: ' || v_filename);

    UTL_FILE.FCLOSE(v_empfile);

END;

次に、 上記で作成した empfile.csv の内容を empfile.csv ます。

C:\TEMP\EMPDIR>TYPE empfile.csv

 

7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20

7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30

7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30

7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20

7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30

7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30

7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10

7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20

7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10

7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30

7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20

7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30

7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20

7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10

 

3.19.14               PUTF

PUTF 手順では、指定したファイルにフォーマットされた文字列を書き込みます。

PUTF( file FILE_TYPE、 format VARCHAR2 [、 arg1 VARCHAR2]

[、...])

パラメーター

file

書式付き行が書き込まれるファイルのファイルハンドルを含む FILE_TYPE 型の変数

format

ファイルに書き込まれたテキストをフォーマットする文字列。特殊文字シーケンス %s は、argの値で置き換えられます。特殊文字シーケンス \n は改行を示します。ただし、高度なサーバーでは、改行文字は1つではなく、2つの連続したバックスラッシュを指定する必要があります- \\n 。この特性はOracleデータベースと互換性がありません。

arg1

最大5つの引数、 arg1 、... arg5 %s 各文字列の書式文字列に代入されます 。最初のargは %s 最初のオカレンスに 置き換えられ、2番目のargは %s 2番目のオカレンスに置き換えられます

次の無名ブロックは、 emp テーブルの データを含む書式付き出力を生成し ます。 Oracleデータベースと互換性がない、書式文字列の改行文字列には、Eリテラル構文と二重バックスラッシュを使用することに注意してください。

DECLARE

    v_empfile       UTL_FILE.FILE_TYPE;

    v_directory     VARCHAR2(50) := 'empdir';

    v_filename      VARCHAR2(20) := 'empfile.csv';

    v_format        VARCHAR2(200);

    CURSOR emp_cur IS SELECT * FROM emp ORDER BY empno;

BEGIN

    v_format := E'%s %s, %s\\nSalary: $%s Commission: $%s\\n\\n';

    v_empfile := UTL_FILE.FOPEN(v_directory,v_filename,'w');

    FOR i IN emp_cur LOOP

        UTL_FILE.PUTF(v_empfile,v_format,i.empno,i.ename,i.job,i.sal,

            NVL(i.comm,0));

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('Created file: ' || v_filename);

    UTL_FILE.FCLOSE(v_empfile);

EXCEPTION

    WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

        DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);

END;

 

Created file: empfile.csv

次に、 上記で作成した empfile.csv の内容を empfile.csv ます。

C:\TEMP\EMPDIR>TYPE empfile.csv

7369 SMITH, CLERK

Salary: $800.00 Commission: $0

7499 ALLEN, SALESMAN

Salary: $1600.00 Commission: $300.00

7521 WARD, SALESMAN

Salary: $1250.00 Commission: $500.00

7566 JONES, MANAGER

Salary: $2975.00 Commission: $0

7654 MARTIN, SALESMAN

Salary: $1250.00 Commission: $1400.00

7698 BLAKE, MANAGER

Salary: $2850.00 Commission: $0

7782 CLARK, MANAGER

Salary: $2450.00 Commission: $0

7788 SCOTT, ANALYST

Salary: $3000.00 Commission: $0

7839 KING, PRESIDENT

Salary: $5000.00 Commission: $0

7844 TURNER, SALESMAN

Salary: $1500.00 Commission: $0.00

7876 ADAMS, CLERK

Salary: $1100.00 Commission: $0

7900 JAMES, CLERK

Salary: $950.00 Commission: $0

7902 FORD, ANALYST

Salary: $3000.00 Commission: $0

7934 MILLER, CLERK

Salary: $1300.00 Commission: $0

 

3.20 UTL_HTTP

UTL _ HTTP パッケージには、URLで見つけた情報を取得するために、HTTPまたはHTTPSプロトコルを使用する方法を提供します。 Advanced Serverは、次の機能と手順をサポートしています。

Function/Procedure

Return Type

Description

BEGIN_REQUEST( url , method , http_version )

UTL_HTTP.REQ

新しいHTTP要求を開始します。

END_REQUEST( r IN OUT)

該当なし

HTTP要求が完了する前に終了します。

END_RESPONSE( r IN OUT)

該当なし

HTTP応答を終了します。

GET_BODY_CHARSET

VARCHAR2

返品 将来のHTTP要求の本体のデフォルト文字セット。

GET_BODY_CHARSET( 文字セット OUT)

該当なし

将来のHTTPリクエストの本体のデフォルト文字セットを返します。

GET_FOLLOW_REDIRECT( max_redirects OUT)

該当なし

許容されるリダイレクトの最大数の現在の設定。

GET_HEADER( r IN OUT, n , 名前 OUT, OUT)

該当なし

HTTPレスポンス n 番目のヘッダを 返します

GET_HEADER_BY_NAME( r IN OUT, 名前 , OUT, n )

該当なし

指定された名前のHTTP応答ヘッダーを返します。

GET_HEADER_COUNT( r IN OUT)

INTEGER

HTTP応答ヘッダーの数を返します。

GET_RESPONSE( r IN OUT)

UTL_HTTP.RESP

HTTPレスポンスを返します。

GET_RESPONSE_ERROR_CHECK( OUT) 有効にする OUT)

該当なし

応答エラーチェックが設定されているかどうかを返します。

GET_TRANSFER_TIMEOUT( タイムアウト OUT)

該当なし

HTTPリクエストの転送タイムアウト設定を返します。

READ_LINE( r IN OUT, データ OUT, remove_crlf )

該当なし

行末までHTTPレスポンス本文をテキスト形式で返します。

READ_RAW( r IN OUT, データ OUT, len )

該当なし

指定されたバイト数のHTTPレスポンス本文をバイナリ形式で返します。

READ_TEXT( r IN OUT, データ OUT, len )

該当なし

指定された文字数のテキスト形式のHTTPレスポンス本文を返します。

REQUEST( URL )

VARCHAR2

Webページのコンテンツを返します。

REQUEST_PIECES( url , max_pieces )

UTL_HTTP.
HTML_PIECES

URLから取得した2000バイトのセグメントのテーブルを返します。

SET_BODY_CHARSET( charset )

該当なし

将来のHTTPリクエストの本体のデフォルト文字セットを設定します。

SET_FOLLOW_REDIRECT( max_redirects )

該当なし

リダイレクト命令に続く最大回数を設定します。

SET_FOLLOW_REDIRECT( r IN OUT, max_redirects )

該当なし

個々の要求のリダイレクト命令に続く最大回数を設定します。

SET_HEADER( r IN OUT, 名前 , )

該当なし

HTTP要求ヘッダーを設定します。

SET_RESPONSE_ERROR_CHECK( 有効 )

該当なし

HTTP 4xxおよび5xxステータスコードをエラーとして扱うかどうかを決定します。

SET_TRANSFER_TIMEOUT( タイムアウト )

該当なし

HTTPリクエストのデフォルトの転送タイムアウト値を設定します。

SET_TRANSFER_TIMEOUT( r IN OUT, タイムアウト )

該当なし

個々のHTTP要求の転送タイムアウト値を設定します。

WRITE_LINE( r IN OUT, data )

該当なし

CRLFで終了したデータをTEXT形式でHTTPリクエスト本体に書き込みます。

WRITE_RAW( r IN OUT, データ )

該当なし

HTTP要求本体にBINARY形式でデータを書き込みます。

WRITE_TEXT( r IN OUT, data )

該当なし

TEXT形式でHTTPリクエスト本体にデータを書き込みます。

Advanced Serverの UTL_HTTP の実装 は、Oracleのバージョンと比較して部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。

ご注意ください:

Advanced Serverでは、 HTTP 4xx または HTTP 5xx 応答によってデータベースエラーが発生します。 Oracleでは、これは構成可能ですが 、デフォルトでは FALSE です。

Advanced Serverでは、 UTL_HTTP テキスト・インタフェースは、ダウンロードしたデータがデータベースのエンコーディングになることを期待しています。現在利用可能なインタフェースはすべてテキストインタフェースです。 Oracleでは、エンコーディングはHTTPヘッダーから検出されます。ヘッダーがない場合、デフォルトは設定可能であり、デフォルトは ISO-8859-1 です。

Advanced Serverは受信したすべてのCookieを無視します。

UTL_HTTP オラクルに上昇させることができる例外は、Advanced Serverによって認識されません。また、Advanced Serverから返されるエラーコードは、Oracleから返されるエラーコードとは異なります。

UTL_HTTP はさまざまな公開定数があります 。これらは次の表にリストされています。

次の表に、 HTTPバージョンとポート割り当てを定義する UTL_HTTP パブリック定数を 示します

HTTP VERSIONS

HTTP_VERSION_1_0

CONSTANT VARCHAR2(64) := 'HTTP/1.0';

HTTP_VERSION_1_1

CONSTANT VARCHAR2(64) := 'HTTP/1.1';

STANDARD PORT ASSIGNMENTS

DEFAULT_HTTP_PORT

CONSTANT INTEGER := 80;

DEFAULT_HTTPS_PORT

CONSTANT INTEGER := 443;

 

次の表に、 UTL_HTTP パブリック・ステータス・コードの定数を示します。

1XX INFORMATIONAL

HTTP_CONTINUE

CONSTANT INTEGER := 100;

HTTP_SWITCHING_PROTOCOLS

CONSTANT INTEGER := 101;

HTTP_PROCESSING

CONSTANT INTEGER := 102;

2XX SUCCESS

HTTP_OK

CONSTANT INTEGER := 200;

HTTP_CREATED

CONSTANT INTEGER := 201;

HTTP_ACCEPTED

CONSTANT INTEGER := 202;

HTTP_NON_AUTHORITATIVE_INFO

CONSTANT INTEGER := 203;

HTTP_NO_CONTENT

CONSTANT INTEGER := 204;

HTTP_RESET_CONTENT

CONSTANT INTEGER := 205;

HTTP_PARTIAL_CONTENT

CONSTANT INTEGER := 206;

HTTP_MULTI_STATUS

CONSTANT INTEGER := 207;

HTTP_ALREADY_REPORTED

CONSTANT INTEGER := 208;

HTTP_IM_USED

CONSTANT INTEGER := 226;

3XX REDIRECTION

HTTP_MULTIPLE_CHOICES

CONSTANT INTEGER := 300;

HTTP_MOVED_PERMANENTLY

CONSTANT INTEGER := 301;

HTTP_FOUND

CONSTANT INTEGER := 302;

HTTP_SEE_OTHER

CONSTANT INTEGER := 303;

HTTP_NOT_MODIFIED

CONSTANT INTEGER := 304;

HTTP_USE_PROXY

CONSTANT INTEGER := 305;

HTTP_SWITCH_PROXY

CONSTANT INTEGER := 306;

HTTP_TEMPORARY_REDIRECT

CONSTANT INTEGER := 307;

HTTP_PERMANENT_REDIRECT

CONSTANT INTEGER := 308;

4XX CLIENT ERROR

HTTP_BAD_REQUEST

CONSTANT INTEGER := 400;

HTTP_UNAUTHORIZED

CONSTANT INTEGER := 401;

HTTP_PAYMENT_REQUIRED

CONSTANT INTEGER := 402;

HTTP_FORBIDDEN

CONSTANT INTEGER := 403;

HTTP_NOT_FOUND

CONSTANT INTEGER := 404;

HTTP_METHOD_NOT_ALLOWED

CONSTANT INTEGER := 405;

HTTP_NOT_ACCEPTABLE

CONSTANT INTEGER := 406;

HTTP_PROXY_AUTH_REQUIRED

CONSTANT INTEGER := 407;

HTTP_REQUEST_TIME_OUT

CONSTANT INTEGER := 408;

HTTP_CONFLICT

CONSTANT INTEGER := 409;

HTTP_GONE

CONSTANT INTEGER := 410;

HTTP_LENGTH_REQUIRED

CONSTANT INTEGER := 411;

HTTP_PRECONDITION_FAILED

CONSTANT INTEGER := 412;

HTTP_REQUEST_ENTITY_TOO_LARGE

CONSTANT INTEGER := 413;

HTTP_REQUEST_URI_TOO_LARGE

CONSTANT INTEGER := 414;

HTTP_UNSUPPORTED_MEDIA_TYPE

CONSTANT INTEGER := 415;

HTTP_REQ_RANGE_NOT_SATISFIABLE

CONSTANT INTEGER := 416;

HTTP_EXPECTATION_FAILED

CONSTANT INTEGER := 417;

HTTP_I_AM_A_TEAPOT

CONSTANT INTEGER := 418;

HTTP_AUTHENTICATION_TIME_OUT

CONSTANT INTEGER := 419;

HTTP_ENHANCE_YOUR_CALM

CONSTANT INTEGER := 420;

HTTP_UNPROCESSABLE_ENTITY

CONSTANT INTEGER := 422;

HTTP_LOCKED

CONSTANT INTEGER := 423;

HTTP_FAILED_DEPENDENCY

CONSTANT INTEGER := 424;

HTTP_UNORDERED_COLLECTION

CONSTANT INTEGER := 425;

HTTP_UPGRADE_REQUIRED

CONSTANT INTEGER := 426;

HTTP_PRECONDITION_REQUIRED

CONSTANT INTEGER := 428;

HTTP_TOO_MANY_REQUESTS

CONSTANT INTEGER := 429;

HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE

CONSTANT INTEGER := 431;

HTTP_NO_RESPONSE

CONSTANT INTEGER := 444;

HTTP_RETRY_WITH

CONSTANT INTEGER := 449;

HTTP_BLOCKED_BY_WINDOWS_PARENTAL_CONTROLS

CONSTANT INTEGER := 450;

HTTP_REDIRECT

CONSTANT INTEGER := 451;

HTTP_REQUEST_HEADER_TOO_LARGE

CONSTANT INTEGER := 494;

HTTP_CERT_ERROR

CONSTANT INTEGER := 495;

HTTP_NO_CERT

CONSTANT INTEGER := 496;

HTTP_HTTP_TO_HTTPS

CONSTANT INTEGER := 497;

HTTP_CLIENT_CLOSED_REQUEST

CONSTANT INTEGER := 499;

5XX SERVER ERROR

HTTP_INTERNAL_SERVER_ERROR

CONSTANT INTEGER := 500;

HTTP_NOT_IMPLEMENTED

CONSTANT INTEGER := 501;

HTTP_BAD_GATEWAY

CONSTANT INTEGER := 502;

HTTP_SERVICE_UNAVAILABLE

CONSTANT INTEGER := 503;

HTTP_GATEWAY_TIME_OUT

CONSTANT INTEGER := 504;

HTTP_VERSION_NOT_SUPPORTED

CONSTANT INTEGER := 505;

HTTP_VARIANT_ALSO_NEGOTIATES

CONSTANT INTEGER := 506;

HTTP_INSUFFICIENT_STORAGE

CONSTANT INTEGER := 507;

HTTP_LOOP_DETECTED

CONSTANT INTEGER := 508;

HTTP_BANDWIDTH_LIMIT_EXCEEDED

CONSTANT INTEGER := 509;

HTTP_NOT_EXTENDED

CONSTANT INTEGER := 510;

HTTP_NETWORK_AUTHENTICATION_REQUIRED

CONSTANT INTEGER := 511;

HTTP_NETWORK_READ_TIME_OUT_ERROR

CONSTANT INTEGER := 598;

HTTP_NETWORK_CONNECT_TIME_OUT_ERROR

CONSTANT INTEGER := 599;

 

3.20.1                  HTML_PIECES

UTL_HTTP パッケージ は、 HTML_PIECES という型を宣言します 。この は、 VARCHAR2 型の表です。 (2000) BINARY によって索引付けされる INTEGER 。この型の値は、 REQUEST _ PIECES 関数 によって返され ます。

TYPE html_pieces IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;

 

3.20.2                  REQ

REQ レコードタイプは、各HTTPリクエストに関する情報を保持しています。

TYPE req IS RECORD (

    url             VARCHAR2(32767),    -- URL to be accessed

    method          VARCHAR2(64),       -- HTTP method

    http_version    VARCHAR2(64),       -- HTTP version

    private_hndl    INTEGER             -- Holds handle for this request

);

 

3.20.3                  RESP

RESP レコードタイプは、各HTTPリクエストからの応答に関する情報を保持しています。

TYPE resp IS RECORD (

    status_code     INTEGER,            -- HTTP status code

    reason_phrase   VARCHAR2(256),      -- HTTP response reason phrase

    http_version    VARCHAR2(64),       -- HTTP version

    private_hndl    INTEGER             -- Holds handle for this response

);

 

3.20.4                  BEGIN_REQUEST

BEGIN_REQUEST 関数は、新しいHTTP要求を開始します。指定されたURLを使用してWebサーバーにネットワーク接続が確立されます。署名は次のとおりです。

BEGIN_REQUEST( url IN VARCHAR2, method IN VARCHAR2 DEFAULT 'GET ', http_version IN VARCHAR2 DEFAULT NULL) RETURN UTL_HTTP.REQ

BEGIN_REQUEST 機能は、タイプの記録返し UTL_HTTP.REQ

パラメーター

url

url そこからユニフォームリソースロケータである UTL _ HTTP コンテンツを返します。

method

method は、使用されるHTTPメソッドです。デフォルトは GET です。

http_version

http_version は、要求を送信するHTTPプロトコルバージョンです。指定された値は、 HTTP/1.0 または HTTP/1.1 いずれかでなければなりません 。デフォルトはnullです。この場合、 UTL_HTTP パッケージで サポートされている最新のHTTPプロトコルのバージョン 1.1が使用されます。

 

3.20.5                  END_REQUEST

END_REQUEST 手順は、HTTPリクエストを終了します。 HTTP要求を完了せずに応答を待つことなく、HTTP要求を終了させるには END_REQUEST プロシージャーを 使用し ます。通常のプロセスでは、要求を開始し、応答を得てから応答を閉じます。署名は次のとおりです。

END_REQUEST( r IN OUT UTL_HTTP.REQ)

パラメーター

r

r はHTTP要求レコードです。

 

3.20.6                  END_RESPONSE

END_RESPONSE 手順は、HTTPレスポンスを終了します。 END_RESPONSE 手順は、HTTPリクエストとレスポンスを完了します。これは、要求および応答プロセスを終了する通常の方法です。署名は次のとおりです。

END_RESPONSE( r IN OUT UTL_HTTP.RESP)

パラメーター

r

r HTTP 応答レコードです。

 

3.20.7                  GET_BODY_CHARSET

GET_BODY_CHARSET プログラムは、手順及び機能の両方の形で入手可能です。 GET_BODY_CHARSET 呼び出すと 、将来のHTTPリクエストの本体のデフォルトの文字セットが返されます。

プロシージャのシグネチャは次のとおりです。

GET_BODY_CHARSET( charset OUT VARCHAR2)

関数のシグネチャは次のとおりです。

GET_BODY_CHARSET() RETURN VARCHAR2

このファンクションは、 VARCHAR2 値を 戻し ます。

パラメーター

charset

charset は本文の文字セットです。

以下は、 GET_BODY_CHARSET 関数の 例です

edb=# SELECT UTL_HTTP.GET_BODY_CHARSET() FROM DUAL;

 get_body_charset

------------------

 ISO-8859-1

(1 row)

3.20.8                  GET_FOLLOW_REDIRECT

GET_FOLLOW_REDIRECT 手順が許可リダイレクトの最大数の現在の設定を返します。署名は次のとおりです。

GET_FOLLOW_REDIRECT( max_redirects OUT INTEGER)

パラメーター

max_redirects

max_redirects は許可されるリダイレクトの最大数です。

 

3.20.9                  GET_HEADER

GET_HEADER 手順を返す n HTTP応答のヘッダ目。署名は次のとおりです。

GET_HEADER( r IN OUT UTL_HTTP.RESP, n INTEGER, name OUT VARCHAR2, value OUT VARCHAR2)

パラメーター

r

r はHTTP応答レコードです。

n

n 取得するHTTP応答レコード n 番目のヘッダーです。

name

name は応答ヘッダーの名前です。

 

value

value は応答ヘッダーの値です。

次の例では、ヘッダー数を取得し、次にヘッダーを取得します。

DECLARE

    v_req           UTL_HTTP.REQ;

    v_resp          UTL_HTTP.RESP;

    v_name          VARCHAR2(30);

    v_value         VARCHAR2(200);

    v_header_cnt    INTEGER;

BEGIN

 -- Initiate request and get response

    v_req := UTL_HTTP.BEGIN_REQUEST('www.enterprisedb.com');

    v_resp := UTL_HTTP.GET_RESPONSE(v_req);

 

 -- Get header count

    v_header_cnt := UTL_HTTP.GET_HEADER_COUNT(v_resp);

    DBMS_OUTPUT.PUT_LINE('Header Count: ' || v_header_cnt);

 

 -- Get all headers

    FOR i IN 1 .. v_header_cnt LOOP

        UTL_HTTP.GET_HEADER(v_resp, i, v_name, v_value);

        DBMS_OUTPUT.PUT_LINE(v_name || ': ' || v_value);

    END LOOP;

 

 -- Terminate request

    UTL_HTTP.END_RESPONSE(v_resp);

END;

この例の出力は次のとおりです。

Header Count: 23

Age: 570

Cache-Control: must-revalidate

Content-Type: text/html; charset=utf-8

Date: Wed, 30 Apr 2015 14:57:52 GMT

ETag: "aab02f2bd2d696eed817ca89ef411dda"

Expires: Sun, 19 Nov 1978 05:00:00 GMT

Last-Modified: Wed, 30 Apr 2015 14:15:49 GMT

RTSS: 1-1307-3

Server: Apache/2.2.3 (Red Hat)

Set-Cookie: SESS2771d0952de2a1a84d322a262e0c173c=jn1u1j1etmdi5gg4lh8hakvs01; expires=Fri, 23-May-2015 18:21:43 GMT; path=/; domain=.enterprisedb.com

Vary: Accept-Encoding

Via: 1.1 varnish

X-EDB-Backend: ec

X-EDB-Cache: HIT

X-EDB-Cache-Address: 10.31.162.212

X-EDB-Cache-Server: ip-10-31-162-212

X-EDB-Cache-TTL: 600.000

X-EDB-Cacheable: MAYBE: The user has a cookie of some sort. Maybe it's double choc-chip!

X-EDB-Do-GZIP: false

X-Powered-By: PHP/5.2.17

X-Varnish: 484508634 484506789

transfer-encoding: chunked

Connection: keep-alive

 

3.20.10               GET_HEADER_BY_NAME

GET_HEADER_BY_NAME 手順は、指定された名前に応じてHTTPレスポンスのヘッダを返します。署名は次のとおりです。

GET_HEADER_BY_NAME( r IN OUT UTL_HTTP.RESP, name VARCHAR2, value OUT VARCHAR2, n INTEGER DEFAULT 1)

パラメーター

r

r はHTTP応答レコードです。

name

name は取得する応答ヘッダーの名前です。

value

value は応答ヘッダーの値です。

n

n は、 name 指定された値に従って検索するHTTP応答レコード n 番目のヘッダーです 。デフォルトは1です。

次の例では、Content-Typeのヘッダーを取得します。

DECLARE

    v_req           UTL_HTTP.REQ;

    v_resp          UTL_HTTP.RESP;

    v_name          VARCHAR2(30) := 'Content-Type';

    v_value         VARCHAR2(200);

BEGIN

    v_req := UTL_HTTP.BEGIN_REQUEST('www.enterprisedb.com');

    v_resp := UTL_HTTP.GET_RESPONSE(v_req);

    UTL_HTTP.GET_HEADER_BY_NAME(v_resp, v_name, v_value);

    DBMS_OUTPUT.PUT_LINE(v_name || ': ' || v_value);

    UTL_HTTP.END_RESPONSE(v_resp);

END;

 

Content-Type: text/html; charset=utf-8

 

3.20.11               GET_HEADER_COUNT

GET_HEADER_COUNT 機能は、HTTP応答ヘッダーの数を返します。署名は次のとおりです。

GET_HEADER_COUNT( r IN OUT UTL_HTTP.RESP) RETURN INTEGER

この関数は、 INTEGER 値を 返し ます。

パラメーター

r

r はHTTP応答レコードです。

 

3.20.12               GET_RESPONSE

GET_RESPONSE 機能は、ネットワーク要求を送信し、任意のHTTPレスポンスを返します。署名は次のとおりです。

GET_RESPONSE( r IN OUT UTL_HTTP.REQ) RETURN UTL_HTTP.RESP

この関数は、 UTL_HTTP.RESP レコードを 戻します

パラメーター

r

r はHTTP要求レコードです。

 

3.20.13               GET_RESPONSE_ERROR_CHECK

GET_RESPONSE_ERROR_CHECK 手順は、応答エラー・チェックが設定されているかどうかを返します。署名は次のとおりです。

GET_RESPONSE_ERROR_CHECK( enable OUT BOOLEAN)

パラメーター

enable

enable 応答エラーチェックが設定されている場合 TRUE 返し 、そうでない場合は FALSE 返し FALSE

3.20.14               GET_TRANSFER_TIMEOUT

GET_TRANSFER_TIMEOUT 手順は、HTTPリクエストの現在の、デフォルトの転送タイムアウト設定を返します。署名は次のとおりです。

GET_TRANSFER_TIMEOUT( timeout OUT INTEGER)

パラメーター

timeout

timeout は秒単位の転送タイムアウト設定です。

 

3.20.15               READ_LINE

READ_LINE 行の末尾に到達するまでの手順は、テキスト形式のHTTP応答本体からデータを返します。 CR 文字、 LF 文字、 CR LF 配列、または応答の本体の端部は、線の端部を構成しています。署名は次のとおりです。

READ_LINE( r IN OUT UTL_HTTP.RESP, data OUT VARCHAR2, remove_crlf BOOLEAN DEFAULT FALSE)

パラメーター

r

r はHTTP応答レコードです。

data

data はテキスト形式の応答本文です。

remove_crlf

設定し remove_crlf TRUE そうでない場合に設定され、改行文字を削除するには FALSE 。デフォルトは FALSE です。

次の例では、指定したWebサイトの本文を取得して表示します。

DECLARE

    v_req           UTL_HTTP.REQ;

    v_resp          UTL_HTTP.RESP;

    v_value         VARCHAR2(1024);

BEGIN

    v_req := UTL_HTTP.BEGIN_REQUEST('http://www.enterprisedb.com');

    v_resp := UTL_HTTP.GET_RESPONSE(v_req);

    LOOP

        UTL_HTTP.READ_LINE(v_resp, v_value, TRUE);

        DBMS_OUTPUT.PUT_LINE(v_value);

    END LOOP;

    EXCEPTION

        WHEN OTHERS THEN

            UTL_HTTP.END_RESPONSE(v_resp);

END;

以下は出力です。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">

 

  <!-- ___________________________ HEAD ___________________________ -->

 

  <head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

 

    <title>EnterpriseDB | The Postgres Database Company</title>

 

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta name="keywords" content="postgres, postgresql, postgresql installer, mysql migration, open source database, training, replication" />

<meta name="description" content="The leader in open source database products, services, support, training and expertise based on PostgreSQL. Free downloads, documentation, and tutorials." />

<meta name="abstract" content="The Enterprise PostgreSQL Company" />

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.enterprisedb.com/blogapi/rsd" />

<link rel="alternate" type="application/rss+xml" title="EnterpriseDB RSS" href="http://www.enterprisedb.com/rss.xml" />

<link rel="shortcut icon" href="/sites/all/themes/edb_pixelcrayons/favicon.ico" type="image/x-icon" />

    <link type="text/css" rel="stylesheet" media="all" href="/sites/default/files/css/css_db11adabae0aed6b79a2c3c52def4754.css" />

<!--[if IE 6]>

<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/oho_basic/css/ie6.css?g" />

<![endif]-->

<!--[if IE 7]>

<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/oho_basic/css/ie7.css?g" />

<![endif]-->

    <script type="text/javascript" src="/sites/default/files/js/js_74d97b1176812e2fd6e43d62503a5204.js"></script>

<script type="text/javascript">

<!--//--><![CDATA[//><!--

 

3.20.16               READ_RAW

READ_RAW 手順は、バイナリ形式でHTTPレスポンスボディからデータを返します。返されるバイト数は、 len パラメータで 指定し ます。署名は次のとおりです。

READ_RAW( r IN OUT UTL_HTTP.RESP, data OUT RAW, len INTEGER)

パラメーター

r

r はHTTP応答レコードです。

data

data はバイナリ形式のレスポンスボディです。

len

len を返されるデータのバイト数に 設定 します。

次の例では、最初の150バイトをバイナリ形式で取得して表示します。

DECLARE

    v_req           UTL_HTTP.REQ;

    v_resp          UTL_HTTP.RESP;

    v_data          RAW;

BEGIN

    v_req := UTL_HTTP.BEGIN_REQUEST('http://www.enterprisedb.com');

    v_resp := UTL_HTTP.GET_RESPONSE(v_req);

    UTL_HTTP.READ_RAW(v_resp, v_data, 150);

    DBMS_OUTPUT.PUT_LINE(v_data);

    UTL_HTTP.END_RESPONSE(v_resp);

END;

この例の出力は次のとおりです。

\x3c21444f43545950452068746d6c205055424c494320222d2f2f5733432f2f445444205848544d4c20312e30205374726963742f2f454e220d0a202022687474703a2f2f7777772e77332e6f72672f54522f7868746d6c312f4454442f7868746d6c312d7374726963742e647464223e0d0a3c68746d6c20786d6c6e733d22687474703a2f2f7777772e77332e6f72672f313939392f

 

3.20.17               READ_TEXT

READ_TEXT 手順は、テキスト形式でHTTPレスポンスボディからデータを返します。返される最大文字数は、 len パラメータで 指定し ます。署名は次のとおりです。

READ_TEXT( r IN OUT UTL_HTTP.RESP, data OUT VARCHAR2, len INTEGER)

パラメーター

r

r はHTTP応答レコードです。

data

data はテキスト形式の応答本文です。

len

len には返される最大文字数を 設定 します。

次の例では、最初の150文字を取得します。

DECLARE

    v_req           UTL_HTTP.REQ;

    v_resp          UTL_HTTP.RESP;

    v_data          VARCHAR2(150);

BEGIN

    v_req := UTL_HTTP.BEGIN_REQUEST('http://www.enterprisedb.com');

    v_resp := UTL_HTTP.GET_RESPONSE(v_req);

    UTL_HTTP.READ_TEXT(v_resp, v_data, 150);

    DBMS_OUTPUT.PUT_LINE(v_data);

    UTL_HTTP.END_RESPONSE(v_resp);

END;

以下は出力です。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/

 

3.20.18               REQUEST

REQUEST 機能は、ユーザが指定したURLから取得最初の2000のバイトを返します。署名は次のとおりです。

REQUEST(url IN VARCHAR2) RETURN VARCHAR2

指定されたURLで見つかったデータが2000バイトより長い場合、残りは破棄されます。指定されたURLで見つかったデータが2000バイトより短い場合、結果は2000バイトより短くなります。

パラメーター

url

url そこからユニフォームリソースロケータである UTL _ HTTP コンテンツを返します。

次のコマンドは、EnterpriseDB Webサイトから取得した最初の2000バイトを返します。

SELECT UTL_HTTP.REQUEST('http://www.enterprisedb.com/') FROM DUAL;

 

3.20.19               REQUEST_PIECES

REQUEST_PIECES 機能は、URLから取得2000バイトセグメントのテーブルを返します。署名は次のとおりです。

REQUEST_PIECES( url IN VARCHAR2, max_pieces NUMBER IN DEFAULT 32767) RETURN UTL_HTTP.HTML_PIECES

パラメーター

url

url そこからユニフォームリソースロケータである UTL _ HTTP コンテンツを返します。

max_pieces

max_pieces は、 REQUEST_PIECES 関数が返す 最大2000バイトのセグメント数を指定します max_pieces 指定された url 利用可能なユニットよりも多くのユニットを指定した 場合 、最終ユニットのバイト数は少なくなります。

次の例は、EnterpriseDB Webサイトから取得した最初の4つの2000バイトのセグメントを返します。

DECLARE

    result UTL_HTTP.HTML_PIECES;

BEGIN

result := UTL_HTTP.REQUEST_PIECES('http://www.enterprisedb.com/', 4);

END;

 

3.20.20               SET_BODY_CHARSET

SET_BODY_CHARSET 手順は、将来のHTTP要求の本体のデフォルトの文字セットを設定します。署名は次のとおりです。

SET_BODY_CHARSET( charset VARCHAR2 DEFAULT NULL)

パラメーター

charset

charset は、将来のリクエストの本文の文字セットです。デフォルトはNULLです。この場合、データベース・キャラクタ・セットが使用されます。

 

3.20.21               SET_FOLLOW_REDIRECT

SET_FOLLOW_REDIRECT 手順は、HTTPリダイレクトの指示がこの要求又は将来の要求に応じて、続いされる最大回数を設定します。この手順には2つの署名があります。

SET_FOLLOW_REDIRECT( max_redirects IN INTEGER DEFAULT 3)

そして

SET_FOLLOW_REDIRECT( r IN OUT UTL_HTTP.REQ, max_redirects IN INTEGER DEFAULT 3)

2番目のフォームを使用して、要求がセッションのデフォルト設定から継承する個々の要求のリダイレクションの最大数を変更します。

パラメーター

r

r はHTTP要求レコードです。

max_redirects

max_redirects

 

3.20.22               SET_HEADER

SET_HEADER 手順は、HTTPリクエストヘッダを設定します。署名は次のとおりです。

SET_HEADER( r IN OUT UTL_HTTP.REQ, name IN VARCHAR2, value IN VARCHAR2 DEFAULT NULL)

パラメーター

r

r はHTTP要求レコードです。

name

name はリクエストヘッダの名前です。

value

value はリクエストヘッダの値です。デフォルトはnullです。

 

3.20.23               SET_RESPONSE_ERROR_CHECK

SET_RESPONSE_ERROR_CHECK 手順は、HTTP 4XXとによって返さ5xxのステータスコードか否かを判断 GET_RESPONSE 関数がエラーとして解釈されるべきです。署名は次のとおりです。

SET_RESPONSE_ERROR_CHECK( enable IN BOOLEAN DEFAULT FALSE)

パラメーター

enable

設定 enable TRUE HTTP 4XX及び5xxのステータスコードはエラーとして処理される場合にそうでない場合に設定、 FALSE 。デフォルトは FALSE です。

3.20.24               SET_TRANSFER_TIMEOUT

SET_TRANSFER_TIMEOUT 手順は、デフォルトでは、HTTPリクエストからの応答を待つ転送設定のタイムアウトを設定します。この手順には2つの署名があります。

SET_TRANSFER_TIMEOUT( timeout IN INTEGER DEFAULT 60)

そして

SET_TRANSFER_TIMEOUT( r IN OUT UTL_HTTP.REQ, timeout IN INTEGER DEFAULT 60)

2番目のフォームを使用して、要求がセッションのデフォルト設定から継承する個々の要求の転送タイムアウト設定を変更します。

パラメーター

r

r はHTTP要求レコードです。

timeout

timeout は、HTTPリクエストの転送タイムアウト設定(秒単位)です。デフォルトは60秒です。

 

3.20.25               WRITE_LINE

WRITE_LINE 手順では、テキスト形式でHTTPリクエストボディにデータを書き込みます。テキストはCRLF文字ペアで終了します。署名は次のとおりです。

WRITE_LINE( r IN OUT UTL_HTTP.REQ, data IN VARCHAR2)

パラメーター

r

r はHTTP要求レコードです。

data

data TEXT 形式の 要求本体 です。

次の例では 、テキスト形式の データ( Account balance $500.00 )をHTTP POST メソッド を使用して送信するリクエスト本文に 書き込みます 。データは、データ を受け入れて処理 する仮のWebアプリケーション( post.php )に 送られ ます。

DECLARE

    v_req           UTL_HTTP.REQ;

    v_resp          UTL_HTTP.RESP;

BEGIN

    v_req := UTL_HTTP.BEGIN_REQUEST('http://www.example.com/post.php',

       'POST');

    UTL_HTTP.SET_HEADER(v_req, 'Content-Length', '23');   

    UTL_HTTP.WRITE_LINE(v_req, 'Account balance $500.00');

    v_resp := UTL_HTTP.GET_RESPONSE(v_req);

    DBMS_OUTPUT.PUT_LINE('Status Code: ' || v_resp.status_code);

    DBMS_OUTPUT.PUT_LINE('Reason Phrase: ' || v_resp.reason_phrase);

    UTL_HTTP.END_RESPONSE(v_resp);

END;

Webアプリケーションが POST メソッドを 正常に処理したと仮定すると、 次の出力が表示されます。

Status Code: 200

Reason Phrase: OK

 

3.20.26               WRITE_RAW

WRITE_RAW 手順は、バイナリ形式でHTTPリクエストボディにデータを書き込みます。署名は次のとおりです。

WRITE_RAW( r IN OUT UTL_HTTP.REQ, data IN RAW)

パラメーター

r

r はHTTP要求レコードです。

data

data はバイナリ形式のリクエスト本体です。

次の例では、HTTP POST メソッドを使用して、そのようなデータを受け入れて処理する仮想Webアプリケーションに 送信される、リクエスト本体にバイナリ形式のデータを書き込み ます。

DECLARE

    v_req           UTL_HTTP.REQ;

    v_resp          UTL_HTTP.RESP;

BEGIN

    v_req := UTL_HTTP.BEGIN_REQUEST('http://www.example.com/post.php',

       'POST');

    UTL_HTTP.SET_HEADER(v_req, 'Content-Length', '23');   

    UTL_HTTP.WRITE_RAW(v_req, HEXTORAW

('54657374696e6720504f5354206d6574686f6420696e20485454502072657175657374'));

    v_resp := UTL_HTTP.GET_RESPONSE(v_req);

    DBMS_OUTPUT.PUT_LINE('Status Code: ' || v_resp.status_code);

    DBMS_OUTPUT.PUT_LINE('Reason Phrase: ' || v_resp.reason_phrase);

    UTL_HTTP.END_RESPONSE(v_resp);

END;

HEXTORAW 関数に 表示されるテキスト文字列 は、 Testing POST method in HTTP request テキストの16進数の変換です

Webアプリケーションが POST メソッドを 正常に処理したと仮定すると、 次の出力が表示されます。

Status Code: 200

Reason Phrase: OK

 

3.20.27               WRITE_TEXT

WRITE_TEXT

WRITE_TEXT( r IN OUT UTL_HTTP.REQ, data IN VARCHAR2)

パラメーター

r

r はHTTP要求レコードです。

data

data はテキスト形式の要求本体です。

次の例では 、テキスト形式の データ( Account balance $500.00 )をHTTP POST メソッド を使用して送信するリクエスト本文に 書き込みます 。データは、データ を受け入れて処理 する仮のWebアプリケーション( post.php )に 送られ ます。

DECLARE

    v_req           UTL_HTTP.REQ;

    v_resp          UTL_HTTP.RESP;

BEGIN

    v_req := UTL_HTTP.BEGIN_REQUEST('http://www.example.com/post.php',

       'POST');

    UTL_HTTP.SET_HEADER(v_req, 'Content-Length', '23');   

    UTL_HTTP.WRITE_TEXT(v_req, 'Account balance $500.00');

    v_resp := UTL_HTTP.GET_RESPONSE(v_req);

    DBMS_OUTPUT.PUT_LINE('Status Code: ' || v_resp.status_code);

    DBMS_OUTPUT.PUT_LINE('Reason Phrase: ' || v_resp.reason_phrase);

    UTL_HTTP.END_RESPONSE(v_resp);

END;

Webアプリケーションが POST メソッドを 正常に処理したと仮定すると、 次の出力が表示されます。

Status Code: 200

Reason Phrase: OK

 

 

3.21 UT L_MAIL

UTL_MAIL パッケージには、電子メールを管理する機能を提供します。 Advanced Serverは次の手順をサポートしています。

Function/Procedure

Return Type

Description

SEND( 送信者 , 受信者 , CC , BCC , 件名 , メッセージ [, MIME_TYPEを [, 優先 ]])

該当なし

SMTPサーバーに電子メールをパッケージ化して送信します。

SEND_ATTACH_RAW( 送信者 , 受信者 , cc , bcc , 件名 , メッセージ , mime_type , 優先度 , 添付ファイル [, att_inline [, att_mime_type [, att_filename ]]])

該当なし

SEND プロシージャと 同じです が、 BYTEA またはラージオブジェクト 添付ファイル。

SEND_ATTACH_VARCHAR2( 送信者 , 受信者 , cc , bcc , 件名 , メッセージ , mime_type , 優先度 , 添付ファイル [, att_inline [, att_mime_type [, att_filename ]]])

該当なし

SEND プロシージャと 同じです が、 VARCHAR2 添付ファイルがあります。

注: 管理者は、このパッケージを使用する前に各ユーザーまたはグループに実行権限を与える必要があります。

 

3.21.1                  SEND

SEND 手順では、SMTPサーバに電子メールを送信する機能を提供します。

SEND( sender VARCHAR2、 recipients VARCHAR2、 cc VARCHAR2、

  bcc VARCHAR2、 subject VARCHAR2、 message VARCHAR2

[、 mime_type VARCHAR2 [、 priority PLS_INTEGER]])

パラメーター

sender

送信者の電子メールアドレス。

recipients

受信者のカンマ区切りの電子メールアドレス。

 

cc

コピー受信者のカンマ区切りの電子メールアドレス。

bcc

ブラインドコピー受信者のカンマ区切りの電子メールアドレス。

subject

電子メールの件名。

message

電子メールの本文。

mime_type

メッセージのMIMEタイプ。デフォルトは text/plain; charset=us-ascii

priority

電子メールの優先度デフォルトは3です。

次の無名ブロックは簡単な電子メールメッセージを送信します。

DECLARE

    v_sender        VARCHAR2(30);

    v_recipients    VARCHAR2(60);

    v_subj          VARCHAR2(20);

    v_msg           VARCHAR2(200);

BEGIN

    v_sender := 'jsmith@enterprisedb.com';

    v_recipients := 'ajones@enterprisedb.com,rrogers@enterprisedb.com';

    v_subj := 'Holiday Party';

    v_msg := 'This year''s party is scheduled for Friday, Dec. 21 at ' ||

             '6:00 PM. Please RSVP by Dec. 15 th .';

    UTL_MAIL.SEND(v_sender,v_recipients,NULL,NULL,v_subj,v_msg);

END;

 

3.21.2                  SEND_ATTACH_RAW

SEND_ATTACH_RAW 手順は BYTEA データ 又は(ラージオブジェクトの OID によって識別される ラージ・オブジェクト のいずれかを含む添付ファイル付きのSMTPサーバに電子メールを送信する能力を提供します SEND_ATTACH_RAW の呼び出しは、 次の 2つの方法で記述できます。

SEND_ATTACH_RAW ( sender VARCHAR2, recipients VARCHAR2,

cc VARCHAR2, bcc VARCHAR2, subject VARCHAR2、 メッセージ VARCHAR2、

mime _ type VARCHAR2, priority PLS_INTEGER,

attachment BYTEA[, att _ inline BOOLEAN

[, att_mime_type VARCHAR2[, att_filename VARCHAR2 ]]])

 

SEND_ATTACH_RAW( sender VARCHAR2, recipients VARCHAR2,

cc VARCHAR2, bcc VARCHAR2, subject VARCHAR2, message VARCHAR2,

mime_type VARCHAR2, priority PLS_INTEGER, attachment OID

[, att_inline BOOLEAN [, att_mime_type VARCHAR2

[, att_filename VARCHAR2]]])

パラメーター

sender

送信者の電子メールアドレス。

recipients

受信者のカンマ区切りの電子メールアドレス。

cc

コピー受信者のカンマ区切りの電子メールアドレス。

bcc

ブラインドコピー受信者のカンマ区切りの電子メールアドレス。

subject

電子メールの件名。

message

電子メールの本文。

mime_type

メッセージのMIMEタイプ。デフォルトは text/plain; charset=us-ascii

priority

電子メールの優先度。デフォルトは 3 です。

attachment

アタッチメント。

att_inline

TRUE 設定すると 、添付ファイルはインラインで表示でき、 そうでない場合 FALSE ます。デフォルトは TRUE です。

att_mime_type

添付ファイルのMIMEタイプ。デフォルトは application/octet です。

att_filename

添付ファイルを含むファイル名。デフォルトは null です。

 

3.21.3                  SEND_ATTACH_VARCHAR2

SEND_ATTACH_VARCHAR2 手順では、テキスト添付ファイルでSMTPサーバーに電子メールを送信する機能を提供します。

SEND_ATTACH_VARCHAR2( sender VARCHAR2、 recipients VARCHAR2、 cc VARCHAR2、 bcc VARCHAR2、 subject VARCHAR2、 message VARCHAR2、 mime_type VARCHAR2、 priority PLS_INTEGER、 attachment VARCHAR2 [、 att_inline BOOLEAN [、 att_mime_type VARCHAR2 [ att_filename VARCHAR2]]])

パラメーター

sender

送信者の電子メールアドレス。

recipients

受信者のカンマ区切りの電子メールアドレス。

cc

コピー受信者のカンマ区切りの電子メールアドレス。

bcc

ブラインドコピー受信者のカンマ区切りの電子メールアドレス。

subject

電子メールの件名。

message

電子メールの本文。

mime_type

メッセージのMIMEタイプ。デフォルトは text/plain; charset=us-ascii

priority

電子メールの優先度デフォルトは3です。

attachment

VARCHAR2 アタッチメント。

att_inline

TRUE 設定すると 、添付ファイルはインラインで表示でき、 そうでない場合 FALSE ます。デフォルトは TRUE です。

att_mime_type

添付ファイルのMIMEタイプ。デフォルトは text/plain; charset=us-ascii

att_filename

添付ファイルを含むファイル名。デフォルトは null です。

 

 

 

 

 

 

 

3.22 UTL_RAW

UTL_RAW パッケージには、生のデータ型の長さを操作したり、取得することができます。

注: 管理者は、このパッケージを使用する前に各ユーザーまたはグループに実行権限を与える必要があります。

Function/Procedure

Function or Procedure

Return Type

Description

CAST_TO_RAW( c IN VARCHAR2)

関数

RAW

VARCHAR2 文字列を RAW 値に 変換し ます。

CAST_TO_VARCHAR2( r IN RAW)

関数

VARCHAR2

RAW 値を VARCHAR2 文字列に 変換し ます。

CONCAT( r1 IN RAW, r2 IN RAW, r3 IN RAW,…)

関数

RAW

複数の RAW 値を1つの RAW 値に 連結し ます。

CONVERT( r IN RAW, to _ charset IN VARCHAR2, from _ charset IN VARCHAR2

関数

RAW

エンコードされたデータをあるエンコードから別のエンコードに変換し、その結果を RAW として返し ます。

LENGTH( r IN RAW)

関数

NUMBER

RAW 値の 長さを返します

SUBSTR( r IN RAW, pos IN INTEGER, len IN INTEGER)

関数

RAW

RAW 値の 一部を返します

Advanced Serverの UTL_RAW の実装 は、Oracleのバージョンと比較して部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。

 

3.22.1                  CAST_TO_RAW

CAST_TO_RAW 関数は、変換 VARCHAR2 に文字列を RAW 値。署名は次のとおりです。

CAST_TO_RAW( c VARCHAR2)

この関数は NULL を渡すと RAW 値を NULL ます。 NULL を渡す と、関数は NULL を返し NULL

パラメーター

c

VARCHAR2 に変換される値 RAW

 

次の例では、 CAST_TO_RAW 関数を使用して、 VARCHAR2 文字列を RAW に変換し ます。

DECLARE

  v VARCHAR2;

  r RAW;

BEGIN

  v := 'Accounts';

  dbms_output.put_line(v);

  r := UTL_RAW.CAST_TO_RAW(v);

  dbms_output.put_line(r);

END;

結果セットには、元の文字列の内容と変換された RAW 値が含まれます。

Accounts

\x4163636f756e7473

 

3.22.2                  CAST_TO_VARCHAR2

CAST_TO_VARCHAR2 関数は、変換 RAW へデータを VARCHAR2 データ。署名は次のとおりです。

CAST_TO_VARCHAR2( r RAW)

この関数は NULL を渡すと VARCHAR2 値を NULL ます。 NULL を渡す と、関数は NULL を返し NULL

パラメーター

r

RAW に変換される値 VARCHAR2 値。

次の例では、 CAST_TO_VARCHAR2 関数を使用して RAW 値を VARCHAR2 文字列 に変換し ます。

DECLARE

  r RAW;

  v VARCHAR2;

BEGIN

  r := '\x4163636f756e7473'

  dbms_output.put_line(v);

  v := UTL_RAW.CAST_TO_VARCHAR2(r);

  dbms_output.put_line(r);

END;

結果セットには、元の文字列の内容と変換された RAW 値が含まれます。

\x4163636f756e7473

Accounts

 

3.22.3                  CONCAT

CONCAT 機能は、複数の連結 RAW 単一に値を RAW 値。署名は次のとおりです。

CONCAT( r1 RAW, r2 RAW, r3 RAW,…)

この関数は RAW 値を 返し ます。 Oracleの実装とは異なり、Advanced Serverの実装は可変的な機能であり、連結できる値の数に制限はありません。

パラメーター

r1, r2, r3,…

RAW という値 CONCAT 連結します。

次の例では、 CONCAT 関数を 使用して、 複数の RAW 値を1つの RAW に連結し ます。

SELECT UTL_RAW.CAST_TO_VARCHAR2(UTL_RAW.CONCAT('\x61', '\x62', '\x63')) FROM DUAL;
 concat

--------
 abc
(1 row)

結果(連結された値)は CAST_TO_VARCHAR2 関数 によって VARCHAR2 形式に 変換され ます。

 

3.22.4                  CONVERT

CONVERT 機能は、他の符号化への1つのエンコーディングからの文字列を変換し、その結果を返し RAW 値。署名は次のとおりです。

CONVERT(r RAW, to_charset VARCHAR2, from_charset VARCHAR2)

この関数は RAW 値を 返し ます。

パラメーター

r

RAW 変換される値。

to_charset

エンコーディングの名前 が変換されます。

from _ charset

r が変換される エンコーディングの名前

次の例では、使用 UTL_RAW.CAST_TO_RAW 変換する機能を VARCHAR2 文字列( Accounts 生の値に)、その後の値を変換 UTF8 LATIN7 から次いで、及び LATIN7 UTF8

DECLARE
  r RAW;
  v VARCHAR2;
BEGIN
  v:= 'Accounts';
  dbms_output.put_line(v);

  r:= UTL_RAW.CAST_TO_RAW(v);
  dbms_output.put_line(r);
  r:= UTL_RAW.CONVERT(r, 'UTF8', 'LATIN7');
  dbms_output.put_line(r);
  r:= UTL_RAW.CONVERT(r, 'LATIN7', 'UTF8');
  dbms_output.put_line(r);
 

この例では、 VARCHAR2 値、 RAW 値および変換された値が戻されます。

Accounts

\x4163636f756e7473

\x4163636f756e7473

\x4163636f756e7473

 

3.22.5                  LENGTH

LENGTH 関数は、の長さを返し RAW 値。署名は次のとおりです。

LENGTH( r RAW)

この関数は RAW 値を 返し ます。

パラメーター

r

RAW その値 LENGTH 評価します。

次の例では、 LENGTH 関数を 使用し RAW 値の 長さを返し ます。

SELECT UTL_RAW.LENGTH(UTL_RAW.CAST_TO_RAW('Accounts')) FROM DUAL;
 length

--------
8
(1 row)

次の例では、 LENGTH 関数を 使用して、 マルチバイト文字を含む RAW 値の 長さを返し ます。

SELECT UTL_RAW.LENGTH(UTL_RAW.CAST_TO_RAW(' 独孤求 '));

 length

--------

     12

(1 row)

 

3.22.6                  SUBSTR

SUBSTR 機能は、サブストリングを返し RAW 値。署名は次のとおりです。

SUBSTR ( r RAW, pos INTEGER, len INTEGER)

この関数は、 RAW 値を 返し ます。

パラメーター

r

RAW 部分文字列が返されるの値。

pos

返される部分文字列の最初のバイトの RAW 内の位置

      場合 pos ある 0 又は 1 、サブストリングは、最初のバイトで始まる RAW 値。

      pos が1より大きい 場合 、部分文字列は pos 指定された最初のバイトから始まります 。たとえば、 pos 3 場合、部分文字列は値の3番目のバイトから始まります。

      場合 pos 負であり、サブストリングはで始まる pos ソース値の末尾からバイト。たとえば、 pos -3 場合、部分文字列は値の最後から3バイト目で始まります。

len

返される最大バイト数。

次の例では、 SUBSTR 関数を 使用して RAW 値の 先頭から 3 バイト で始まる部分文字列を選択し ます。

SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), 3, 5) FROM DUAL;

 substr
--------
 count
(1 row)

次の例では、 SUBSTR 関数を 使用して RAW 値の 最後から 5 バイト を開始する部分文字列を選択し ます。

SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), -5 , 3) FROM DUAL;

 substr

--------

 oun

(1 row)

 

 

 

 

3.23 UTL_SMTP

UTL_SMTP パッケージには、簡易メール転送プロトコル(SMTP)を介して電子メールを送信する機能を提供します。

注: 管理者は、このパッケージを使用する前に各ユーザーまたはグループに実行権限を与える必要があります。

Function/Procedure

Function or Procedure

Return Type

Description

CLOSE_DATA( c IN OUT)

手順

n/a

電子メールメッセージを終了します。

COMMAND( c IN OUT, cmd [, arg ])

両方

REPLY

SMTPコマンドを実行します。

COMMAND_REPLIES( c IN OUT, cmd [, arg ])

関数

REPLIES

複数の返信行が必要なSMTPコマンドを実行します。

DATA( c IN OUT, 本体 VARCHAR2)

手順

n/a

電子メールメッセージの本文を指定します。

EHLO( c IN OUT, ドメイン )

手順

n/a

SMTPサーバーとの初期ハンドシェイクを実行し、 拡張情報を返します。

HELO( c IN OUT, ドメイン )

手順

n/a

SMTPサーバーで初期ハンドシェークを実行する

HELP(c IN OUT [, command ])

関数

REPLIES

HELP コマンドを 送信し ます。

MAIL( c IN OUT, 送信者 [, parameters ])

手順

n/a

メールトランザクションを開始します。

NOOP( c IN OUT)

両方

REPLY

nullコマンドを送信します。

OPEN_CONNECTION( ホスト [ , ポート [ , tx_timeout ]])

関数

CONNECTION

接続を開きます。

OPEN_DATA( c IN OUT)

両方

REPLY

DATA コマンドを 送信し ます。

QUIT( c IN OUT)

手順

n/a

SMTPセッションを終了し、切断します。

RCPT( c IN OUT, 受信者 [, parameters ])

手順

n/a

電子メールメッセージの受信者を指定します。

RSET( c IN OUT)

手順

n/a

現在のメールトランザクションを終了します。

VRFY( c IN OUT, 受信者 )

関数

REPLY

電子メールアドレスを検証します。

WRITE_DATA( c IN OUT, data )

手順

該当なし

電子メールメッセージの一部を書き込みます。

Advanced Serverの UTL_SMTP の実装 は、Oracleのバージョンと比較して部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。

次の表に、 UTL_SMTP パッケージで 使用可能なパブリック変数を示し ます。

Public Variables

Data Type

Value

Description

connection

RECORD

 

SMTP接続の説明。

reply

RECORD

 

SMTPリプライ回線。

3.23.1                  CONNECTION

CONNECTION レコードタイプは、SMTP接続の記述を提供します。

TYPE connection IS RECORD (

    host            VARCHAR2(255),

    port            PLS_INTEGER,

    tx_timeout      PLS_INTEGER

);

 

3.23.2                  REPLY/REPLIES

REPLY レコードタイプは、SMTP応答線の記述を提供します。 REPLIES は複数のSMTP応答行の表です。

TYPE reply IS RECORD (

    code            INTEGER,

    text            VARCHAR2(508)

);

TYPE replies IS TABLE OF reply INDEX BY BINARY_INTEGER;

 

3.23.3                  CLOSE_DATA

CLOSE_DATA 手順は、次のシーケンスを送信することにより、電子メールメッセージを終了します。

<CR><LF>.<CR><LF>

これは、行頭の単一の期間です。

CLOSE_DATA( c IN OUT CONNECTION)

パラメーター

c

閉じられるSMTP接続。

 

 

3.23.4                  COMMAND

COMMAND COMMAND_REPLIES使用してください

reply コマンド( c IN OUT CONNECTION、 cmd VARCHAR2

[、 arg VARCHAR2])

 

COMMAND( c IN OUT CONNECTION、 cmd VARCHAR2 [、 arg VARCHAR2])

パラメーター

c

コマンドが送信されるSMTP接続。

cmd

処理されるSMTPコマンド。

arg

SMTPコマンドの引数。デフォルトはnullです。

reply

コマンドへのSMTPの応答。 SMTPは、複数の応答を返す場合、最後のものだけがで返される reply

REPLY REPLIES については、 3.23.2 項を参照してください

 

3.23.5                  COMMAND_REPLIES

COMMAND_REPLIES 機能は、複数の応答行を返すSMTPコマンドを処理します。 単一の応答行のみが必要な場合は、 COMMAND 使用してください

replies 返信コマンドを( c で実施CONNECTION、 cmd VARCHAR2

[、 arg VARCHAR2])

パラメーター

c

コマンドが送信されるSMTP接続。

cmd

処理されるSMTPコマンド。

arg

SMTPコマンドの引数。デフォルトはnullです。

replies

SMTP応答回線をコマンドに追加します。 REPLY REPLIES については、 3.23.2 項を参照してください

 

3.23.6                  DATA

DATA の手順は、電子メールメッセージの本文を指定する機能を提供します。メッセージは <CR><LF>.<CR><LF> シーケンスで終了します。

DATA( c IN OUT CONNECTION、 body VARCHAR2)

パラメーター

c

コマンドが送信されるSMTP接続。

body

送信される電子メールメッセージの本文。

 

3.23.7                  EHLO

EHLO 手順は、接続を確立した後、SMTPサーバーとの初期ハンドシェイクを実行します。 EHLO 手順は、RFC 1869には、サーバーの応答で返される情報の形式を指定するRFC 821に従って、クライアントがSMTPサーバーに自身を識別することができます。 HELO 手順 は、同等の機能を実行するが、サーバーに関する以下の情報を返します。

EHLO( c IN OUT CONNECTION、 domain VARCHAR2)

 

パラメーター

c

ハンドシェイクを実行するSMTPサーバーへの接続。

domain

送信ホストのドメイン名。

 

3.23.8                  HELO

HELO 手順は、接続を確立した後、SMTPサーバーとの初期ハンドシェイクを実行します。 HELO 手順は、RFC 821によれば、クライアントがSMTPサーバに対して自身を識別することを可能にする EHLO 手順 は、同等の機能を実行するが、サーバーの詳細情報を返します。

HELO( c IN OUT、 domain VARCHAR2)

パラメーター

c

ハンドシェイクを実行するSMTPサーバーへの接続。

domain

送信ホストのドメイン名。

 

3.23.9                  HELP

HELP 機能は、送信する機能を提供 HELP SMTPサーバーにコマンドを。

replies 返信のHELPを( c で実施CONNECTION [、 command VARCHAR2])

パラメーター

c

コマンドが送信されるSMTP接続。

command

ヘルプが要求されたコマンド。

replies

SMTP応答回線をコマンドに追加します。 REPLY REPLIES については、 3.23.2 項を参照してください

 

3.23.10               MAIL

MAIL 手続きはメールトランザクションを開始します。

MAIL( c IN OUT CONNECTION、 sender VARCHAR2

[、 parameters VARCHAR2])

パラメーター

c

メールトランザクションを開始するSMTPサーバーへの接続。

sender

送信者の電子メールアドレス。

parameters

mailコマンドのパラメータは、 RFC 1869で定義されている key=value という形式です

 

3.23.11               NOOP

NOOP 機能/手順は、SMTPサーバにヌルコマンドを送信します。 NOOP 正常な応答を取得する以外のサーバには影響を与えません。

reply NOOP( c IN OUT CONNECTION)

 

NOOP( c IN OUT CONNECTION)

 

パラメーター

c

コマンドを送信するSMTP接続。

reply

コマンドへのSMTPの応答。 SMTPは、複数の応答を返す場合、最後のものだけがで返される reply REPLY REPLIES については、 3.23.2 項を参照してください

 

3.23.12               OPEN_CONNECTION

OPEN_CONNECTION 機能は、SMTPサーバーへの接続を開きます。

c CONNECTION OPEN_CONNECTION( host VARCHAR2 [、 port PLS_INTEGER [、 tx_timeout PLS_INTEGER DEFAULT NULL]])

パラメーター

host

SMTPサーバーの名前。

port

SMTPサーバーがリスンしているポート番号。デフォルトは25です。

tx_timeout

タイムアウト値(秒単位)。待機しないことは、0を指定することによって示されます。無限に待機することは、timeoutをnullに設定することによって示されます。デフォルトはnullです。

c

SMTPサーバーから返された接続ハンドル。

 

3.23.13               OPEN_DATA

OPEN_DATA 手順では、送信 DATA SMTPサーバーにコマンドを。

OPEN_DATA( c IN OUT CONNECTION)

パラメーター

c

コマンドを送信するSMTP接続。

 

3.23.14               QUIT

QUIT 手順では、SMTPサーバとのセッションを閉じます。

終了( c IN OUT CONNECTION)

パラメーター

c

SMTP接続を終了します。

 

3.23.15               RCPT

RCPT 手順は、受信者の電子メールアドレスを提供します。複数の受信者をスケジュールするには、 RCPT 複数回 呼び出し ます。

RCPT( c IN OUT CONNECTION、 recipient VARCHAR2

[、 parameters VARCHAR2])

パラメーター

c

受信者を追加するSMTPサーバーへの接続。

recipient

受信者の電子メールアドレス。

parameters

mailコマンドのパラメータは、 RFC 1869で定義されている key=value という形式です

 

3.23.16               RSET

RSET 手順は、現在のメールトランザクションを終了する機能を提供します。

RSET( c IN OUT CONNECTION)

パラメーター

c

メールトランザクションをキャンセルするSMTP接続。

 

3.23.17               VRFY

VRFY 機能は、受信者の電子メールアドレスを検証し、検証するための機能を提供します。有効な場合は、受信者のフルネームと完全修飾メールボックスが返されます。

reply VRFY( c IN OUT CONNECTION、 recipient VARCHAR2)

パラメーター

c

電子メールアドレスを確認するためのSMTP接続。

recipient

受信者の電子メールアドレスを確認します。

reply

コマンドへのSMTPの応答。 SMTPは、複数の応答を返す場合、最後のものだけがで返される reply REPLY REPLIES については、 3.23.2 項を参照してください

 

3.23.18               WRITE_DATA

WRITE_DATA 手順は、追加する機能を提供 VARCHAR2 電子メールメッセージにデータを。 WRITE_DATA 手順を繰り返し、データを追加するために呼び出すことができます。

WRITE_DATA( c IN OUT CONNECTION、 data VARCHAR2)

 

パラメーター

c

データを追加するSMTP接続。

data

電子メールメッセージに追加するデータ。データはRFC 822仕様に準拠している必要があります。

 

3.23.19               Comprehensive Example

次の手順では、 UTL_SMTP パッケージ を使用してテキスト・電子メール・メッセージを構成して送信します

CREATE OR REPLACE PROCEDURE send_mail (

    p_sender        VARCHAR2,

    p_recipient     VARCHAR2,

    p_subj          VARCHAR2,

    p_msg           VARCHAR2,

    p_mailhost      VARCHAR2

)

IS

    v_conn          UTL_SMTP.CONNECTION;

    v_crlf          CONSTANT VARCHAR2(2) := CHR(13) || CHR(10);

    v_port          CONSTANT PLS_INTEGER := 25;

BEGIN

    v_conn := UTL_SMTP.OPEN_CONNECTION(p_mailhost,v_port);

    UTL_SMTP.HELO(v_conn,p_mailhost);

    UTL_SMTP.MAIL(v_conn,p_sender);

    UTL_SMTP.RCPT(v_conn,p_recipient);

    UTL_SMTP.DATA(v_conn, SUBSTR(

        'Date: ' || TO_CHAR(SYSDATE,

        'Dy, DD Mon YYYY HH24:MI:SS') || v_crlf

        || 'From: ' || p_sender || v_crlf

        || 'To: ' || p_recipient || v_crlf

        || 'Subject: ' || p_subj || v_crlf

        || p_msg

        , 1, 32767));

    UTL_SMTP.QUIT(v_conn);

END;

 

EXEC send_mail('asmith@enterprisedb.com','pjones@enterprisedb.com','Holiday Party','Are you planning to attend?','smtp.enterprisedb.com');

次の例では、使用 OPEN_DATA WRITE_DATA 、及び CLOSE_DATA 手順の代わりに、 DATA 手順を。

CREATE OR REPLACE PROCEDURE send_mail_2 (

    p_sender        VARCHAR2,

    p_recipient     VARCHAR2,

    p_subj          VARCHAR2,

    p_msg           VARCHAR2,

    p_mailhost      VARCHAR2

)

IS

    v_conn          UTL_SMTP.CONNECTION;

    v_crlf          CONSTANT VARCHAR2(2) := CHR(13) || CHR(10);

    v_port          CONSTANT PLS_INTEGER := 25;

BEGIN

    v_conn := UTL_SMTP.OPEN_CONNECTION(p_mailhost,v_port);

    UTL_SMTP.HELO(v_conn,p_mailhost);

    UTL_SMTP.MAIL(v_conn,p_sender);

    UTL_SMTP.RCPT(v_conn,p_recipient);

    UTL_SMTP.OPEN_DATA(v_conn);

    UTL_SMTP.WRITE_DATA(v_conn,'From: ' || p_sender || v_crlf);

    UTL_SMTP.WRITE_DATA(v_conn,'To: ' || p_recipient || v_crlf);

    UTL_SMTP.WRITE_DATA(v_conn,'Subject: ' || p_subj || v_crlf);

    UTL_SMTP.WRITE_DATA(v_conn,v_crlf || p_msg);

    UTL_SMTP.CLOSE_DATA(v_conn);

    UTL_SMTP.QUIT(v_conn);

END;

 

EXEC send_mail_2('asmith@enterprisedb.com','pjones@enterprisedb.com','Holiday Party','Are you planning to attend?','smtp.enterprisedb.com');

 

 

 

 

 

 

 

 

 

 

 

 

 

3.24 UTL_URL

UTL _ URL パッケージには、URLの中に違法と予約文字をエスケープする方法を提供します。

Function/Procedure

Return Type

Description

ESCAPE(url, escape_reserved_chars, url_charset)

VARCHAR2

ESCAPE 関数を 使用 して、URL内の不正な文字や予約文字をエスケープします。

UNESCAPE(url, url_charset)

VARCHAR2

UNESCAPE それの元のフォームにURLを変換する機能。

UTL_URL パッケージが返されます BAD_URL 関数の呼び出しが誤って形成されたURLが含まれている場合、例外を。

 

3.24.1                  ESCAPE

ESCAPE 機能を 使用する と、URL内の不正な文字や予約された文字をエスケープできます。署名は次のとおりです。

ESCAPE(url VARCHAR2, escape_reserved_chars BOOLEAN, url_charset VARCHAR2)

予約された文字は、エスケープ文字のascii値の2桁の16進コードの後に​​パーセント記号で置き換えられます。

パラメーター

url

url は、 UTL _ URL がエスケープ するUniform Resource Locatorを指定し URL

escape_reserved_chars

escape_reserved_chars は、 予約文字と不正な文字をエスケープ するように ESCAPE 関数に 指示 する BOOLEAN 値です

      場合は escaped _ reserved _ chars ある FALSE ESCAPE 指定されたURLにのみ不正な文字をエスケープします。

      場合は escape _ reserved _ chars ある TRUE ESCAPE 指定されたURLに不正な文字や予約文字の両方をエスケープします。

デフォルトでは、 escape _ reserved _ chars FALSE です。

URL内で有効な文字は次のとおりです。

大文字のAからZ

小文字のa〜z

0〜9

アスタリスク(*)

感嘆符 (!)

ハイフン( - )

左括弧(()

ピリオド(。)

右括弧())

一重引用符( '

チルダ(〜)

アンダースコア(_)

一部の文字はURLの一部では合法ですが、他の文字では違法です。不正な文字に関する包括的な規則を確認するには、RFC 2396を参照してください.URLのどの部分でも不正と見なされる文字のは次のとおりです。

Illegal Character

Escape Sequence

空白スペース(

%20

中括弧( { または }

%7b および %7d

ハッシュマーク( #

%23

ESCAPE 機能は、次の文字を予約すると考えると、あればそれらをエスケープします escape _ reserved _ chars に設定されている TRUE

Reserved Character

Escape Sequence

アンパサンド( &

%5C

記号( @

%25

コロン( :

%3a

コンマ( ,

%2c

ドル記号( $

%24

等号( =

%3d

プラス記号( +

%2b

疑問符( ?

%3f

セミコロン( ;

%3b

スラッシュ( /

%2f

url _ charset

url _ charset は、指定された文字がエスケープされる前に変換される charset 指定します。場合は url _ charset ある NULL 文字は変換されません。 url _ charset のデフォルト値 ISO-8859-1 です。

次の無名ブロックは、 ESCAPE 関数を 使用 してURL内の空白文字をエスケープします。

DECLARE
結果varchar2(400);
ベギン
結果:= UTL_URL.ESCAPE( 'http://www.example.com/ESCAPEを使用するfunction.html');
DBMS_OUTPUT.PUT_LINE(結果);
終わり;

結果の(エスケープされた)URLは次のとおりです。

http://www.example.com/Using%20the%20ESCAPE%20function.html

関数を呼び出すときに escape _ reserved _ chars パラメーターに TRUE 値を含めると、次のように なります。

DECLARE
  result varchar2(400);
BEGIN
 result := UTL_URL.ESCAPE('http://www.example.com/Using the ESCAPE function.html', TRUE);
  DBMS_OUTPUT.PUT_LINE(result);
END;

ESCAPE 機能は、予約文字だけでなく、URLで不正な文字をエスケープ:

http%3A%2F%2Fwww.example.com%2FUsing%20the%20ESCAPE%20function.html

 

3.24.2                  UNESCAPE

UNESCAPE 機能は、エスケープ文字を削除することにより、URLに付加 ESCAPE それは、元のフォームのURLに変換し、機能。

署名は次のとおりです。

UNESCAPE( url VARCHAR2, url _ charset VARCHAR2)

パラメーター

url

url は、 UTL _ URL がエスケープ するUniform Resource Locatorを指定し URL

url _ charset

文字をアンエスケープした後、文字は url_charset エンコーディングにあると みなされ 、返される前にそのエンコーディングからデータベースエンコーディングに変換されます。場合は url _ charset ある NULL 文字は変換されません。 url _ charset のデフォルト値 ISO-8859-1 です。

次の無名ブロックは、 ESCAPE 関数を 使用 してURL内の空白文字をエスケープします。

DECLARE
  result varchar2(400);
BEGIN
 result := UTL_URL.UNESCAPE('http://www.example.com/Using%20the%20UNESCAPE%20function.html');
  DBMS_OUTPUT.PUT_LINE(result);
END;

結果の(エスケープされていない)URLは次のとおりです。

http://www.example.com/Using the UNESCAPE function.html

 

 

 

 

4      謝辞

PostgreSQLの8.3、8.4、9.0、9.1、9.2、9.3、9.4及び9.5のドキュメントは、PostgreSQLに共通するこのガイドの部分のためのベースラインを提供し、ここに認められています。

この EnterpriseDB ソフトウェアおよびドキュメンテーションの 一部は 、以下の著作物を使用することができ、その使用はここで認められます。

PostgreSQLのドキュメント、データベース管理システム

PostgreSQL はPostgreSQLグローバル開発グループ 著作権©1996-2016に基づき、以下のカリフォルニア大学のライセンスの条項の下で配布されています。

Postgres95は カリフォルニア大学リージェントの著作権©1994-5。

上記の著作権表示と本項および次の2つの段落がすべてのコピーに記載されていれば、無償で、書面による合意なしに、本ソフトウェアおよびそのドキュメンテーションを使用、複製、改変、配布することが許可されます。

いかなる場合においても、カリフォルニア大学は、カリフォルニア大学が実施していたとしても、ソフトウェアおよびその文書の使用に起因する損害を含む、直接的、間接的、偶発的、派生的、派生的損害に対する賠償責任を負わないものとしますそのような損害の可能性を知らされた。

カリフォルニア州立大学は、商品性および特定目的への適合性の黙示的な保証を含む(ただしこれらに限定されない)いかなる保証も特に断ります。本契約に基づいて提供される本ソフトウェアは、現状のままであり、カリフォルニア州立大学は、保守、サポート、更新、拡張または改変を提供する義務を負いません。