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
オラクルのデータベース互換性とは、アプリケーションがOracle環境だけでなく、 EDB Postgres Advanced Server(Advanced Server)環境でも実行されることを意味します。このガイドでは、Advanced Serverによって提供されるパッケージサポートに関連する機能のみに焦点を当てています。
Advanced Serverが提供する他の互換機能の使用方法の詳細については、Advanced Serverの全ガイドを参照してください。
http://www.enterprisedb.com/products-services-training/products/documentation
このマニュアルでは、さまざまな用語の意味と使用法を明確にするために、特定の表記規則が使用されています コマンド、文、プログラム、例などがあります。この節では、これらの規則の概要を示します。
以下の説明では、 用語 は、言語キーワード、ユーザ提供値、リテラルなどの任意の単語または単語群を指す。用語の正確な意味は、それが使用される文脈に依存する。
・ イタリック体のフォントで は、通常、最初に定義された文章に新しい用語が導入されています。
· 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 」を 持っているかもしれないことを意味します 。
この章では、 Advanced Server のパッケージの概念について説明し ます 。 パッケージ識別子- パッケージは、 一般的な修飾子を使用して参照されている関数、プロシージャ、変数、カーソル、ユーザー定義のレコードタイプ、およびレコードの名前付きコレクションです。パッケージには次の特徴があります。
・ パッケージは、関連する目的を果たす機能と手順を整理する便利な手段を提供します。パッケージのファンクションとプロシージャを使用する権限は、パッケージ全体に付与された1つの特権に依存します。すべてのパッケージプログラムは、共通名で参照する必要があります。
・ パッケージ内の特定の関数、プロシージャ、変数、型などはpublicとして宣言できます。パブリック・エンティティーは可視であり 、パッケージに対する EXECUTE 特権 が与えられている他のプログラムから参照でき ます。パブリック関数とプロシージャーの場合、プログラム名、パラメーター(存在する場合)、関数の戻り値のタイプのみが表示されます。これらのファンクションとプロシージャのSPLコードには他人からアクセスできないため、パッケージを利用するアプリケーションは、手続き型ロジック自体ではなく、シグネチャで利用可能な情報のみに依存します。
・ パッケージ内の他の関数、手続き、変数、型などはprivateとして宣言することができます。プライベートエンティティは、パッケージ内の関数とプロシージャによって参照され、使用されますが、他の外部アプリケーションでは参照および使用されません。プライベートエンティティは、パッケージ内のプログラムによってのみ使用されます。
・ 関数名とプロシージャー名は、パッケージ内でオーバーロードすることができます。 1つ以上の関数/プロシージャを同じ名前で定義できますが、シグネチャは異なります。これにより、同じジョブを実行する同じ名前のプログラムを作成することができますが、異なるタイプの入力を使用することができます。
パッケージは、次の2つの主要コンポーネントで構成されています。
・ パッケージ仕様 :これはパブリックインタフェースです(パッケージ外で参照できる要素です)。私たちは、仕様内でパッケージの一部となるすべてのデータベースオブジェクトを宣言します。
・ パッケージ本体 :これには、パッケージ仕様内で宣言されたすべてのデータベースオブジェクトの実際の実装が含まれます。
パッケージ本体は、パッケージ仕様の仕様を実装します。アプリケーションには見えない実装の詳細やプライベートな宣言が含まれています。仕様を変更することなく、パッケージ本体をデバッグ、拡張、または置換することができます。同様に、呼び出しのプログラムを再コンパイルせずに本体を変更することもできます。これは、実装の詳細がアプリケーションから見えないためです。
パッケージ仕様は、パッケージ(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
パッケージ実装の詳細はパッケージ本体にあります。パッケージ本体には、パッケージユーザーが見ることのできないオブジェクトが含まれている場合があります。 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ではサポートされていません。 パッケージは実行可能なコードではありません。むしろそれはコードのリポジトリです。パッケージを使用する場合、実際にはパッケージ内の要素を実行または参照します。 パッケージ仕様には、パッケージの外部から参照できるパッケージ内のすべての要素の定義が含まれています。これらはパッケージのパブリック要素と呼ばれ、パッケージインタフェースとして機能します。次のコードサンプルはパッケージ仕様です。 -- -- 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 文に 追加することもでき ます。 パッケージの本体には、パッケージ仕様の背後にある実際の実装が含まれています。上記の 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; パッケージ仕様内で宣言された型、項目、およびサブプログラムを参照するために、ドット表記法を使用します。例えば: 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 で なければなりません 。 次の例は、前の章で説明したさまざまなユーザー定義型をパッケージのコンテキスト内に組み込んでいます。 パッケージ仕様 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 パッケージ全体またはパッケージ本体のみを削除する構文は次のとおりです。 DROP PACKAGE [ BODY ] package_name ; キーワード BODY を省略すると、パッケージ仕様とパッケージ本体の両方が削除されます。つまり、パッケージ全体が削除されます。キーワード BODY が指定されている 場合は 、パッケージ本体のみが削除されます。パッケージの仕様は変更されません。 package_name は、削除するパッケージの識別子です。 次の文は、 emp_admin のパッケージ本体のみを破壊します 。 DROP PACKAGE BODY emp_admin; 次の文は、 emp_admin パッケージ 全体を emp_admin ます。 DROP PACKAGE emp_admin; この章では、 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; 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 ファイルのパラメータを変更するには、変更を有効にするためにサーバを再起動する必要があります。 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... REMOVE 手順は、指定されたアラートのセッションの登録を解除します。 REMOVE( name VARCHAR2) パラメーター name 登録を解除するアラートの名前。 REMOVEALL 手順は、すべてのアラートのセッションの登録を解除します。 REMOVEALL 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 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 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 次の例では、 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 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 ENQUEUE プロシージャは、キューにエントリを追加します。署名は次のとおりです。 ENQUEUE( パラメーター queue_name 既存のキューの名前(スキーマ修飾名も可)スキーマ名を省略すると、サーバーは SEARCH _ PATH 指定されたスキーマを使用します 。 Oracleとは異なり、引用符で囲まれていない識別子は格納する前に小文字に変換されます。特殊文字を含めるか、大文字小文字を区別する名前を使用するには、名前を二重引用符で囲みます。 キューの作成の詳細については、 DBMS _ AQADM を参照してください 。 CREATE _ QUEUE 。 enqueue _ options enqueue _ options は型の値です、 enqueue _ options _ t : DBMS_AQ.ENQUEUE_OPTIONS_T IS RECORD( 現在、 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( でサポートされる値 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 によって維持され ます。状態は次のとおりです。 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; DEQUEUE 手順は、メッセージをデキューします。署名は次のとおりです。 DEQUEUE( パラメーター queue_name 既存のキューの名前(スキーマ修飾名も可)スキーマ名を省略すると、サーバーは SEARCH _ PATH 指定されたスキーマを使用します 。 Oracleとは異なり、引用符で囲まれていない識別子は格納する前に小文字に変換されます。特殊文字を含めるか、大文字小文字を区別する名前を使用するには、名前を二重引用符で囲みます。 キューの作成の詳細については、 DBMS _ AQADM を参照してください 。 CREATE _ QUEUE 。 dequeue _ options dequeue _ options は、タイプの値です dequeue _ options _ t : DEQUEUE_OPTIONS_T IS RECORD( 現在、 dequeue _ options_t のサポートされているパラメータ値 は次の options_t です。 consumer_name NULL. 必要があり NULL. dequeue_mode デキュー操作のロック動作。次のいずれかである必要があります。 navigation 取得されるメッセージを識別します。次のいずれかである必要があります。 NEXT_MESSAGE - 最初の用語に一致する次のメッセージ。 visibility ON_COMMIT 必要があり ON_COMMIT - 現在のトランザクションをロールバックすると、デキューされたアイテムはキューに残ります。 wait 0より大きい数値である必要があります。 DBMS _ AQ 。 FOREVER - 無期限に待ってください。 msgid デキューされるメッセージのメッセージID。 correlation 互換性のために受け入れられ、無視されます。 deq_condition VARCHAR2 に評価される式 BOOLEAN メッセージをデキューするかどうかを示す値。 signature 互換性のために受け入れられ、無視されます。 transformation 互換性のために受け入れられ、無視されます。 delivery_mode PERSISTENT なければなりません 。バッファリングされたメッセージは現時点ではサポートされていません。 message_properties message_properties タイプの値で、 message _ properties _ t: message_properties_t IS RECORD( でサポートされる値 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 によって維持され ます。状態は次のとおりです。 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 。 アイテムがエンキューまたはデキューされたときに通知される電子メールアドレス、プロシージャまたはURLを登録 するには、 REGISTER プロシージャを 使用し ます。署名は次のとおりです。 REGISTER( パラメーター 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プロシージャへのコールのみがサポートされています。呼び出しは次の形式になります。 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 。 UNREGISTER プロシージャを 使用して、 エンキューおよびデキューに関する通知をオフにします。署名は次のとおりです。 UNREGISTER( パラメーター 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プロシージャへのコールのみがサポートされています。呼び出しは次の形式になります。 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 。 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 既存のキューを変更 するには、 ALTER_QUEUE プロシージャを 使用し ます。署名は次のとおりです。 ALTER_QUEUE( パラメーター 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); ALTER_QUEUE_TABLE 使用する 署名は次のとおりです。 ALTER_QUEUE_TABLE ( パラメーター 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 です。このコマンドは、キュー表の定義にコメントを追加します。 CREATE_QUEUE プロシージャを 使用 して、既存のキュー表にキューを作成します。署名は次のとおりです。 CREATE_QUEUE( パラメーター 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; キュー表を作成 するには、 CREATE_QUEUE_TABLE プロシージャーを使用してください。署名は次のとおりです。 CREATE_QUEUE_TABLE ( パラメーター 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 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 。 キューを削除 するには、 DROP_QUEUE プロシージャを使用します。署名は次のとおりです。 DROP_QUEUE( パラメーター queue_name ドロップするキューの名前。 auto_commit auto_commit は互換性のために受け入れられますが、無視されます。 例 以下の匿名ブロックは、キューという名前の低下 work _ order : BEGIN DBMS_AQADM.DROP_QUEUE(queue_name => 'work_order'); END; キュー表を削除 するには、 DROP_QUEUE_TABLE プロシージャーを使用します。署名は次のとおりです。 DROP_QUEUE_TABLE( パラメーター 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; キュー表からメッセージを削除 するには、 PURGE_QUEUE_TABLE プロシージャーを使用します。署名は次のとおりです。 PURGE_QUEUE_TABLE( パラメーター 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; START_QUEUE プロシージャを 使用 して、キューをエンキューおよびデキュー可能にします。署名は次のとおりです。 START_QUEUE( パラメーター queue_name queue_name は、開始するキューの名前を指定します。 enqueue エンキュー(デフォルト)を有効に する場合は TRUE 、現在の設定を変更しない FALSE を 指定し FALSE 。 dequeue デキュー(デフォルト)を有効に する場合は TRUE 、現在の設定を変更しない FALSE を 指定し FALSE 。 例 以下の匿名ブロックは、指定されたキューになり work _ order エンキューのために利用可能に: BEGIN DBMS_AQADM.START_QUEUE (queue_name => 'work_order); END; 使用 STOP_QUEUE エンキューまたは指定したキューにデキュー無効にする手順を。署名は次のとおりです。 STOP_QUEUE( パラメーター 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; 未処理のトランザクションが完了すると、エンキューおよびデキューは停止します。 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 同義語である ことに注意してください 。 DECRYPT 関数またはプロシージャは、ユーザが指定した暗号化アルゴリズム、キーおよびオプションの初期化ベクトルを用いてデータを復号化します。 DECRYPT 関数 のシグネチャは次の DECRYPT です。 DECRYPT DECRYPT プロシージャ のシグネチャは次の DECRYPT です。 DECRYPT または DECRYPT プロシージャーとして呼び出されると、 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 CREATE FUNCTION get_password(username VARCHAR2) RETURN RAW AS DECRYPT 呼び出す DECRYPT ENCRYPTING の目標を。 ENCRYPT 関数またはプロシージャは、暗号化するために、ユーザが指定したアルゴリズム、キー、および任意の初期化ベクトルを使用して RAW 、 BLOB または CLOB データを。 ENCRYPT 関数 の署名は次の ENCRYPT です。 ENCRYPT ENCRYPT プロシージャ の署名は次の ENCRYPT です。 ENCRYPT または ENCRYPT プロシージャーとして呼び出されると、 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 ENCRYPT はキーの値として my secret key と my 初期化ベクトル initialization password 暗号化するときの vector 。 password 解読するときに同じキーと初期化ベクトルを指定してください 。 HASH 関数は、ハッシュ値を返すために、ユーザー指定のアルゴリズムを使用して RAW または CLOB 値。 HASH 関数は、次の3つの形式で提供されています: HASH HASH パラメーター 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 MAC 機能は、ユーザが指定した使用 MAC ハッシュを返す関数を MAC 値 RAW または CLOB 値。 MAC 機能は、次の3種類の形式で提供されています: MAC MAC パラメーター 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 DBMS _ CRYPTO 。 MAC は my キー値を使用します secret cleartext MAC 値を 計算する際の key source 。 RANDOMBYTES 関数は戻り RAW 暗号ランダムバイトを含む、指定された長さの値。署名は次のとおりです。 RANDOMBYTES パラメーター number_bytes number_bytes は、返されるランダムなバイト数を指定します。 例 次の例では、 RANDOMBYTES を 使用 して 1024 バイトの 値を返し ます。 DECLARE RANDOMINTEGER() 関数は、ランダム返し INTEGER の間に 0 と 268,435,455 。署名は次のとおりです。 RANDOMINTEGER() RETURNS INTEGER 例 次の例では、 RANDOMINTEGER 関数を 使用して 、暗号的に強いランダムな INTEGER 値 を返し ます。 DECLARE RANDOMNUMBER() 関数は、ランダム返し NUMBER 0との間に 268,435,455 。署名は次のとおりです。 RANDOMNUMBER() RETURNS NUMBER 例 次の例では、 RANDOMNUMBER 関数を 使用し て暗号的に強い乱数を返します。 DECLARE 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; 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; 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; INTERVAL 手順では、ジョブを実行する頻度の周波数を設定します。 INTERVAL( job BINARY_INTEGER, interval VARCHAR2) パラメーター job 変更するジョブの識別子。 interval 評価されると、ジョブが実行される次の日付/時刻を提供する日付関数。 例 1週間に1回実行するようにジョブを変更する: BEGIN DBMS_JOB.INTERVAL(104,'SYSDATE + 7'); END; 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; REMOVE 手順は、データベースから指定したジョブを削除します。ジョブを再 実行するには 、 SUBMIT プロシージャ を使用してジョブを再送信する必要があります 。ジョブに関連付けられたストアドプロシージャは削除されないことに注意してください。 REMOVE( job BINARY_INTEGER) パラメーター job データベースから削除されるジョブの識別子。 例 データベースからジョブを削除する: BEGIN DBMS_JOB.REMOVE(104); END; RUN 手順は、その状態が壊れている場合でも、ジョブが実行されるように強制します。 RUN( job BINARY_INTEGER) パラメーター job 実行されるジョブの識別子。 例 強制的にジョブを実行します。 BEGIN DBMS_JOB.RUN(104); 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) WHAT 手順ジョブが実行されるストアドプロシージャを変更します。 WHAT( job BINARY_INTEGER, what VARCHAR2) パラメーター job ストアドプロシージャを変更するジョブの識別子。 what 実行するストアドプロシージャの名前。 例 list_emp プロシージャ を実行するようにジョブを変更し ます。 BEGIN DBMS_JOB.WHAT(104,'list_emp;'); 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 の 場合、長さとオフセットは文字単位で測定されます 。 APPEND 手順は、別のラージオブジェクトを追加する能力を提供します。両方の大きなオブジェクトは同じタイプでなければなりません。 APPEND( dest_lob IN OUT { BLOB | CLOB }, src_lob { BLOB | CLOB }) パラメーター dest_lob 宛先オブジェクトのラージオブジェクトロケータ。 src_lob と同じデータ型でなければなりません 。 src_lob ソースオブジェクトのラージオブジェクトロケータ。 dest_lob と同じデータ型でなければなりません 。 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 ゼロ未満です。 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。 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。 COPY 手順は、別の大きなオブジェクトをコピーする機能を提供します。ソースラージオブジェクトと宛先ラージオブジェクトは、同じデータ型でなければなりません。 COPY( dest_lob src_lob [、 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です。 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です。 GET_STORAGE_LIMIT 機能は、最大許容ラージオブジェクトの制限を返します。 size INTEGER GET_STORAGE_LIMIT(BLOBのlob_loc ) size INTEGER GET_STORAGE_LIMIT( lob_loc CLOB) パラメーター size このデータベース内のラージオブジェクトの最大許容サイズ。 lob_loc このパラメータは無視されますが、互換性のために含まれています。 GETLENGTH
amount INTEGER GETLENGTH( lob_loc BLOB) amount INTEGER GETLENGTH( lob_loc CLOB) パラメーター lob_loc 長さを取得するラージオブジェクトのラージオブジェクトロケータ。 amount BLOB の場合 のラージ・オブジェクトの長さ(バイト単位) または CLOB の 場合の文字数 。 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 。 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 。 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 。 TRIM 手順は、指定された長さにラージ・オブジェクトを切り捨てるする能力を提供します。 TRIM( lob_loc IN OUT {BLOB | CLOB}、 newlen INTEGER) パラメーター lob_loc トリミングするラージオブジェクトのラージオブジェクトロケータ。 newlen ラージオブジェクトをトリミングするバイト数/文字数。 WRITE 手順は、ラージ・オブジェクトにデータを書き込むための能力を提供します。指定された長さの指定されたオフセットのラージオブジェクト内の既存のデータは、バッファに指定されたデータによって上書きされます。 WRITE( lob_loc IN OUT {BLOB | CLOB}、 offset INTEGER、 buffer {RAW | VARCHAR2}) パラメーター lob_loc 書き込まれるラージオブジェクトのラージオブジェクトロケータ。 amount ラージオブジェクトに書き込まれる buffer 内のバイト数または文字数 。 offset 書き込み操作を開始するためのラージオブジェクトの先頭からのバイト数/文字単位のオフセット(原点は1)。 buffer ラージオブジェクトに書き込まれるデータが格納されます。場合 lob_loc ある BLOB 、その後、 buffer なければなりません RAW 。場合 lob_loc ある CLOB 、その後、 buffer なければなりません VARCHAR2 。 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 。 Advanced Serverは DBMS_LOCK をサポートしてい DBMS_LOCK 。 SLEEP 手順。 Function/Procedure Return Type Description SLEEP( 秒 ) 該当なし 指定した 秒 数だけセッションを中断します 。 Advanced Serverの DBMS_LOCK の実装 は、Oracleのバージョンと比較して部分実装です。 DBMS_LOCK.SLEEP のみ がサポートされています。 SLEEP 手順は、指定した秒数のため、現在のセッションを中断します。 SLEEP( seconds NUMBER) パラメーター seconds seconds セッションを中断する秒数を指定します。 seconds は分数値にすることができます。たとえば、 1.75 と 入力 して1秒の3分の1秒を指定します。 マテリアライズド・ビューおよびその依存関係を管理およびリフレッシュするに は、 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のバージョンと比較して部分的に実装されています。上記の表にリストされている機能とプロシージャのみがサポートされています。 マテリアライズド・ビューの名前が指定されると、 GET_MV_DEPENDENCIES は、指定されたビューに依存するアイテムのリストを戻します。署名は次のとおりです。 GET_MV_DEPENDENCIES( パラメーター list list は、マテリアライズド・ビューの名前、またはマテリアライズド・ビュー名のカンマ区切り list 指定します。 deplist deplist は、スキーマ修飾された依存関係のコンマ区切りのリストです。 deplist は VARCHAR2 値です。 例 次の例: DECLARE public.emp_view というマテリアライズド・ビューの依存関係のリストを表示します 。 REFRESH プロシージャを 使用して 、コンマで区切られたビュー名のリストまたは DBMS_UTILITY.UNCL_ARRAY 値の 表のいずれかに指定されたすべてのビューをリフレッシュします 。手順には2つの署名があります。カンマ区切りのビュー名のリストを指定する場合は、最初の形式を使用します。 REFRESH( 2番目の形式を使用して、 DBMS_UTILITY.UNCL_ARRAY 値の 表にビュー名を指定し ます。 REFRESH( パラメーター 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'); REFRESH_ALL_MVIEWS プロシージャを 使用 して、ビューが依存する表またはビューが変更されてからリフレッシュされていないマテリアライズド・ビューをリフレッシュします。署名は次のとおりです。 REFRESH_ALL_MVIEWS( パラメーター 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 には失敗の数が含まれます。 REFRESH _ DEPENDENT プロシージャを 使用し て、プロシージャのコールで指定されたビューに依存するすべてのマテリアル・ビューをリフレッシュします。カンマ区切りリストを指定するか、 DBMS_UTILITY.UNCL_ARRAY 値の 表にビュー名を指定できます 。 プロシージャの最初の形式を使用して、コンマ区切りのリストで指定されたビューに依存するすべてのマテリアル・ビューをリフレッシュします。 REFRESH_DEPENDENT( プロシージャの2番目の形式を使用して、 DBMS_UTILITY.UNCL_ARRAY 値の 表に指定されたビューに依存するすべてのマテリアル・ビューをリフレッシュし ます。 REFRESH_DEPENDENT( パラメーター 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 には失敗の数が含まれます。 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 メッセージ行の場合。 CHARARR 複数のメッセージ行を格納するためのものです。 TYPE chararr IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER; DISABLE 手順は、メッセージバッファをクリアします。 DISABLE プロシージャの実行 時にバッファ内のメッセージに アクセスできなくなります。その後、 PUT 、 PUT_LINE 、または NEW_LINE プロシージャで 送信されたメッセージ は破棄されます。 PUT 、 PUT_LINE 、または NEW_LINE プロシージャが実行され、メッセージが無効になっている ときに、エラーは送信者に返されません 。 メッセージの送受信を再び有効にするには 、 ENABLE プロシージャーまたは SERVEROUTPUT(TRUE) プロシージャーを 使用し ます。 DISABLE 例 この匿名ブロックは、現在のセッションでの送受信メッセージを無効にします。 BEGIN DBMS_OUTPUT.DISABLE; END; 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; 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) 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) NEW_LINE 手順は、メッセージバッファに行末文字列を書き込みます。 NEW_LINE パラメーター NEW_LINE 手順は、パラメータを期待していません。 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 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 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 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 呼び出し からのメッセージだけ がローカルメッセージバッファに保存されます。 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 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 PACK_MESSAGE 手順では、セッションのローカル・メッセージ・バッファにデータの項目を配置します。 PACK_MESSAGE は、 SEND_MESSAGE 呼び出しを 発行する前に少なくとも1回実行する必要があります 。 PACK_MESSAGE( item {DATE | NUMBER | VARCHAR2 | RAW}) RECEIVE_MESSAGE コール を使用してメッセージが取得されると 、 UNPACK_MESSAGE プロシージャを 使用 してデータ項目を取得し ます。 パラメーター item 許容可能なパラメーター・データ・タイプのいずれかに評価される式。この値は、セッションのローカルメッセージバッファに追加されます。 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 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 バッファーのメッセージが大きすぎます 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 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? 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 機能が中断されました 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 UNPACK_MESSAGE 手順コピー指定されたプログラム変数にローカルメッセージバッファからメッセージのデータ項目。メッセージは、 UNPACK_MESSAGE を使用する前に 、 RECEIVE_MESSAGE 関数を使用 してローカルメッセージバッファに配置する必要があります 。 UNPACK_MESSAGE( item OUT {DATE | NUMBER | VARCHAR2 | RAW}) パラメーター item ローカルメッセージバッファからデータ項目を受け取る型互換変数。 次の例では、パイプを「メールボックス」として使用しています。メールボックスの作成、メールボックスへの複数項目メッセージの追加(最大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 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 データフラッシュ操作が失敗しました。 FLUSH_DATA 機能/手順は、プロファイラセッションを終了せずに、現在のセッションで収集されたデータをフラッシュします。データは、「Advanced Server Performance Features Guide」で説明されている表にフラッシュされます。関数とプロシージャのシグネチャは次のとおりです。 status INTEGER FLUSH_DATA FLUSH_DATA パラメーター status 操作によって返されるステータスコード。 GET_VERSION 手順は、のバージョンを返し DBMS_PROFILER 。プロシージャのシグネチャは次のとおりです。 GET_VERSION( major OUT INTEGER, minor OUT INTEGER) パラメーター major DBMS_PROFILER のメジャー・バージョン番号 。 minor DBMS_PROFILER のマイナー・バージョン番号 。 INTERNAL_VERSION_CHECK 機能は、現在のバージョンのことを確認 DBMS_PROFILER 現在のデータベースで動作します。関数のシグネチャは次のとおりです。 status INTEGER INTERNAL_VERSION_CHECK パラメーター status 操作によって返されるステータスコード。 PAUSE_PROFILER 機能/手順は、プロファイリングセッションを一時停止します。関数とプロシージャのシグネチャは次のとおりです。 status INTEGER PAUSE_PROFILER PAUSE_PROFILER パラメーター status 操作によって返されるステータスコード。 RESUME_PROFILER 機能/手順は、プロファイリングセッションを一時停止します。関数とプロシージャのシグネチャは次のとおりです。 status INTEGER RESUME_PROFILER RESUME_PROFILER パラメーター status 操作によって返されるステータスコード。 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 操作によって返されるステータスコード。 STOP_PROFILER 機能/手順は、プロファイリングセッションを停止しにパフォーマンス情報をフラッシュ DBMS_PROFILER テーブルとビュー。関数とプロシージャのシグネチャは次のとおりです。 status INTEGER STOP_PROFILER STOP_PROFILER パラメーター status 操作によって返されるステータスコード。 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 スキーマに 格納されている ) に対して特定の権限を付与しない限り、プロファイル情報は表示されません 。これにより、特権を持たないユーザーは、管理者が秘密を保持したいかもしれない情報を公開することなく、パフォーマンス統計を収集することができます。 次のステップバイステップの例では、DBMS_PROFILERを使用して、Advanced Serverとともに配布されたサンプル・データに含まれるプロシージャ、ファンクション、およびトリガーのパフォーマンス情報を取得します。 acctg=# EXEC dbms_profiler.start_profiler('profile list_emp'); EDB-SPL Procedure successfully completed (注意: start_profiler() コールに は、DBMS_PROFILERがプロファイラー・セッションに関連付けるコメントが含まれています)。 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) acctg=# EXEC dbms_profiler.stop_profiler; EDB-SPL Procedure successfully completed acctg=# EXEC dbms_profiler.start_profiler('profile get_dept_name and emp_sal_trig'); EDB-SPL Procedure successfully completed acctg=# SELECT get_dept_name(10); get_dept_name --------------- ACCOUNTING (1 row) 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 acctg=# EXEC dbms_profiler.stop_profiler; EDB-SPL Procedure successfully completed 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) 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) 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) 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) Advanced Serverインストーラは、PL / SQLパフォーマンス・プロファイル情報を確認するために問合せできる次の表およびビューを作成します。 Table Name Description PLSQL_PROFILER_RUNS runid で整理されたすべてのプロファイラ実行に関する情報を含むテーブル 。 PLSQL_PROFILER_UNITS ユニットごとに整理されたすべてのプロファイラ実行に関する情報を含むテーブル。 PLSQL_PROFILER_DATA パフォーマンス統計を含むビュー。 PLSQL_PROFILER_RAWDATA DRITAカウンタとタイマー のパフォーマンス統計 と 拡張パフォーマンス統計を 含むテーブル 。 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 現在未使用 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 現在未使用 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 現在未使用 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 イベントの待機に費やされた合計時間。 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 未満の 値を持つ乱数を返します 。 INITIALIZE 手順は、初期化 DBMS_RANDOM シード値を持つパッケージ。署名は次のとおりです。 INITIALIZE( val の整数) この手順は推奨されなくなりました。下位互換性のためにのみ含まれています。 パラメーター val val は DBMS _ RANDOM パッケージ・アルゴリズムで 使用されるシード値 です。 例 次のコード・スニペットは 、 DBMS _ RANDOM パッケージをシード値 6475 で初期化する INITIALIZE プロシージャの コールを示しています 。 DBMS_RANDOM.INITIALIZE(6475); NORMAL 機能は、型の乱数を返し NUMBER 。署名は次のとおりです。 結果 NUMBER NORMAL() パラメーター result result は NUMBER 型のランダム値です 。 例 次のコードスニペットは、 NORMAL 関数の 呼び出しを示しています 。 x:= DBMS_RANDOM.NORMAL(); RANDOM 関数 は、 -2 ^ 31以上2 ^ 31未満の ランダムな INTEGER 値を 返します 。署名は次のとおりです。 result INTEGER RANDOM() この関数は推奨されなくなりました。下位互換性のためにのみ含まれています。 パラメーター result result は INTEGER 型のランダム値 INTEGER 。 例 次のコードスニペットは、 RANDOM 関数の 呼び出しを示しています 。この呼び出しは乱数を返します: x := DBMS_RANDOM.RANDOM(); SEED プロシージャ の最初の形式は、 DBMS _ RANDOM パッケージの シード値を INTEGER 値で リセットし ます。 SEED 手順は、次の2つの形式で提供されています。最初の形式の署名は次のとおりです。 SEED( val IN INTEGER) パラメーター val val は DBMS _ RANDOM パッケージ・アルゴリズムで 使用されるシード値 です。 例 次のコードスニペットは、 SEED プロシージャの 呼び出しを示してい ます。コールはシード値を 8495 設定します 。 DBMS_RANDOM.SEED(8495); 2番目の形式の SEED プロシージャは、 DBMS _ RANDOM パッケージの シード値を 文字列値で リセットし ます。 SEED 手順は、次の2つの形式で提供されています。 2番目の形式の署名は次のとおりです。 SEED( val IN VARCHAR2) パラメーター val val は DBMS _ RANDOM パッケージ・アルゴリズムで 使用されるシード値 です。 例 次のコードスニペットは、 SEED プロシージャの 呼び出しを示してい ます。コールはシード値を abc123 設定します 。 DBMS_RANDOM.SEED('abc123'); 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); TERMINATE 手順は効果がありません。署名は次のとおりです。 TERMINATE TERMINATE プロシージャは非推奨と考えるべきです。この手順は互換性のためだけにサポートされています。 VALUE 関数 は、 38桁の精度で0以上、1未満の 乱数 NUMBER を 返します 。 VALUE 機能は、2つの形式があります。最初の形式の署名は次のとおりです。 result NUMBER VALUE() パラメーター result result は NUMBER 型のランダム値です 。 例 次のコードスニペットは、 VALUE 関数の 呼び出しを示しています 。呼び出しは乱数 NUMBER 返します 。 x := DBMS_RANDOM.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); 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; 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) 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; 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; 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( n/a スケジュールを作成 するには、 CREATE_SCHEDULE プロシージャーを 使用 します。 DEFINE_PROGRAM_ARGUMENT( n/a DEFINE_PROGRAM_ARGUMENT プロシージャ の最初の形式を使用 して、デフォルト値を持つプログラム引数を定義します。 DEFINE_PROGRAM_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( n/a DROP_PROGRAM_ARGUMENT の最初の形式を使用して 、引数の位置を指定してプログラムの引数を削除します。 DROP_PROGRAM_ARGUMENT( 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( n/a EVALUATE_CALENDAR_STRING を 使用 して、ユーザー定義のカレンダースケジュールで記述された実行日を確認します。 RUN_JOB( job_name , use_current_session , manually ) n/a 直ちにジョブを実行 するには、 RUN_JOB プロシージャを 使用し ます。 SET_JOB_ARGUMENT_VALUE( n/a 最初の SET_JOB_ARGUMENT 値を 使用して 、引数の位置で記述されたジョブ引数の値を設定します。 SET_JOB_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 表の 作成後 、スーパーユーザーのみがデータベースのダンプまたはリロードを実行できることに 注意してください 。 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桁の年式で、 BYDATE BYDATE= date (, date )... どこ date MMDD です。 MM は月の2桁の表現で、 BYHOUR BYHOUR= hour ここで、 hour は 0〜23の 値です。 BYMINUTE BYMINUTE= minute ここで、 minute は 0〜59の 値です。 使用 CREATE_JOB ジョブを作成する手順を。手順には2つの形式があります。プロシージャの最初の形式は、ジョブ定義内のスケジュールと、ジョブの実行時に呼び出されるジョブ・アクションを指定します。 _ job ( 2番目の形式では、ジョブスケジュールを使用して、ジョブの実行スケジュールを指定し、ジョブの実行時に実行されるプログラムの名前を指定します。 _ job ( パラメーター 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); 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 不可にされるまで実行され ます。 DBMS_SCHEDULER プログラム を作成 するには、 CREATE_PROGRAM プロシージャを 使用 します 。署名は次のとおりです。 CREATE_PROGRAM( パラメーター 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_type => 'PLSQL_BLOCK', program_action => 'BEGIN INSERT INTO my_log VALUES(current_timestamp); enabled => TRUE, comment => 'This program adds a row to the my_log table.'); update_log は、現在の日付と時刻を含む行を my_log 表に 追加するPL / SQLブロックです 。プログラムは、 CREATE_PROGRAM プロシージャーが実行 されるときに使用可能になり ます。 ジョブスケジュールを作成 するには、 CREATE_SCHEDULE プロシージャを 使用 します。 CREATE_SCHEDULE プロシージャ のシグネチャ は次のとおりです。 create _ schedule ( パラメーター 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 で無効になるまでスケジュールは無期限に実行されます 。 プログラムの引数を定義 するには、 DEFINE_PROGRAM_ARGUMENT プロシージャーを使用します。 DEFINE_PROGRAM_ARGUMENT 手順は、2つの形式があります。最初の形式はデフォルト値を持つ引数を定義します。 DEFINE_PROGRAM_ARGUMENT( 2番目の形式では、デフォルト値のない引数が定義されています。 DEFINE_PROGRAM_ARGUMENT( パラメーター 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番目の引数にはデフォルト値はありません。 プログラムまたはジョブを無効に するには、 DISABLE プロシージャを使用します。 DISABLE プロシージャ のシグネチャ は次のとおりです。 disable ( パラメーター 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'); 使用 DROP_JOB ための手順を DROP 、仕事を DROP ジョブに属している任意の引数を、そして将来のジョブ実行を排除します。プロシージャの署名は次のとおりです。 drop_job ( パラメーター 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'); DROP_PROGRAM 手順 DROP_PROGRAM プロシージャ のシグネチャは次の DROP_PROGRAM です。 DROP_PROGRAM( パラメーター 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'); プログラムの引数を削除 するには、 DROP_PROGRAM_ARGUMENT プロシージャを 使用し ます。 DROP_PROGRAM_ARGUMENT 手順は、2つの形式があります。最初の形式では、引数の位置を使用して、削除する引数を指定します。 drop _ program _ argument ( 2番目の形式は引数名をとります: drop _ program _ argument ( パラメーター 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'); DROP_SCHEDULE プロシージャを 使用し てスケジュールを削除します。署名は次のとおりです。 DROP_SCHEDULE( パラメーター schedule_name schedule_name は、ドロップされているスケジュールの名前を指定します。 force force は、指定されたスケジュールがジョブによって参照されている場合のサーバーの動作を指定します。 ・ 指定 されたスケジュールがジョブによって参照されている場合、サーバーにエラーを戻すように指示するには、 FALSE を 指定し FALSE 。これがデフォルト動作です。 ・ スケジュールを削除する前に、指定されたスケジュールを使用するすべてのジョブを無効にするように TRUE を 指定 します。実行中のジョブは、スケジュールを削除する前に完了することができます。 例 DROP_SCHEDULE への次の呼び出しによって、 DROP_SCHEDULE という名前のスケジュールが削除され weeknights_at_5 。 DBMS_SCHEDULER.DROP_SCHEDULE('weeknights_at_5', TRUE); サーバーは、スケジュールを削除する前にスケジュールを使用するすべてのジョブを使用不可にします。 無効なプログラムまたはジョブを有効に するには、 ENABLE プロシージャを 使用し ます。 ENABLE プロシージャ のシグネチャ は次のとおりです。 ENABLE( パラメーター 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'); EVALUATE_CALENDAR_STRING プロシージャを 使用 して、 CREATE_SCHEDULE プロシージャ を使用してスケジュールを作成するときに指定 された repeat_interval 値 を評価し ます。 EVALUATE_CALENDAR_STRING 手順では、指定したスケジュールは、実際の仕事のスケジュールを設定せずに実行された日付と時刻を返します。 EVALUATE_CALENDAR_STRING プロシージャ のシグネチャ は次のとおりです。 evaluate _ calendar _ string ( パラメーター 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時までスケジュールは実行されません。 直ちにジョブを実行 するには、 RUN_JOB プロシージャを 使用し ます。 RUN_JOB プロシージャ のシグネチャは次の RUN_JOB です。 _ job ( パラメーター 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 値を渡すと、 サーバーは現在のセッションでジョブを呼び出すように指示します。 SET_JOB_ARGUMENT_VALUE プロシージャを 使用して 、引数の値を指定します。 SET_JOB_ARGUMENT_VALUE 手順は、2つの形式があります。最初の形式は、どの引数を位置で変更するかを指定します。 set_job_argument_value ( 2番目の形式では、引数名を使用して、変更する引数を指定します。 set_job_argument_value ( 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'); 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 のみ がサポートされています。 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'); 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を参照してください。 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 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 の長さ が仮定されます。 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 の長さ が仮定されます。 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; 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; 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 切り捨て前のデータの実際の長さ。 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 切り捨て前のデータの実際の長さ。 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; 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 文字に 切り捨てられ ます。 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 文字に 切り捨てられ ます。 DESCRIBE _ COLUMNS 手順では、カーソルで返される列について説明します。 DESCRIBE_COLUMNS(c INTEGER, col_cnt OUT INTEGER, desc_t OUT パラメーター 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 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; 機能 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 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 IS_OPEN 関数は、指定されたカーソルが開いているかどうかをテストする能力を提供します。 status BOOLEAN IS_OPEN( c INTEGER) パラメーター c テストするカーソルのカーソルID。 status カーソルが開いている場合は TRUE 設定され 、カーソルが開いて いない場合は FALSE に設定され FALSE 。 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 OPEN_CURSOR 機能は、新しいカーソルを作成します。動的SQL文を解析して実行するには、カーソルを使用する必要があります。一度カーソルを開くと、同じまたは異なるSQLステートメントで再使用できます。再利用するために、カーソルを閉じる必要はありません。 c INTEGER OPEN_CURSOR パラメーター c 新しく作成されたカーソルに関連付けられたカーソルID番号。 例 次の例では、新しいカーソルを作成します。 DECLARE curid INTEGER; BEGIN curid := DBMS_SQL.OPEN_CURSOR; . . . END; 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; 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 ユーザーと名前のリスト。 LNAME_ARRAY 完全修飾名を含む長い名前のリストを格納するためのものです。 TYPE lname_array IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER; UNCL_ARRAY 、ユーザーと名前のリストを格納するためのものです。 TYPE uncl_array IS TABLE OF VARCHAR2(227) INDEX BY BINARY_INTEGER; 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 } この引数は無視されますが、互換性のために含まれています。 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 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 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 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 をクレームなしで 受け入れます 。 FORMAT_CALL_STACK 機能は、現在のコールスタックのフォーマットされた内容を返します。 DBMS_UTILITY.FORMAT_CALL_STACK この関数は、現在の呼び出しスタックを読み取り可能な形式で返すために、ストアドプロシージャ、関数、またはパッケージで使用できます。この関数は、デバッグの目的に役立ちます。 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 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() 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 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 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 NAME_TOKENIZE 手順は、その構成部品に名前を解析します。二重引用符のない名前は大文字です。二重引用符は二重引用符で囲まれた名前から削除されます。 NAME_TOKENIZE( name VARCHAR2、 OUT VARCHAR2、 a パラメーター 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 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 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 関数を 使用し ます。 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) 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) 使用 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) 使用 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) 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) 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) 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) 文字列をユーザー指定の文字セットに変換し、その文字列をエンコードするには 、 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) 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) 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) 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 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 ファイル で設定することによっても設定 できます。 FCLOSE 手順は、開いているファイルを閉じます。 FCLOSE( file IN OUT FILE_TYPE) パラメーター file 閉じられるファイルのファイルハンドルを含む FILE_TYPE 型の変数 。 FLCLOSE_ALL 手順は、開いているすべてのファイルを閉じます。終了するファイルが開いていない場合でも、プロシージャは正常に実行されます。 FCLOSE_ALL 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 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; FOPEN 機能は、I / O用のファイルを開きます。 filetype FILE_TYPE FOPEN( location VARCHAR2、 パラメーター 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 型の変数 。 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 FRENAME 手順では、指定したファイルの名前を変更します。これにより、ある場所から別の場所にファイルを効果的に移動します。 FRENAME( location VARCHAR2、 filename VARCHAR2、 dest_dir VARCHAR2、 dest_file VARCHAR2、 パラメーター 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 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 IS_OPEN 関数は、指定したファイルが開いているか否かを判断します。 status BOOLEAN IS_OPEN( file FILE_TYPE) パラメーター file テストされるファイルのファイルハンドルを含む FILE_TYPE 型の変数 。 status 指定されたファイルが開いている場合は TRUE 、 それ以外の場合 は FALSE ます。 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 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 PUT_LINE 手順は、行末文字列を含む指定したファイルに、単一の行を書き込みます。 PUT_LINE( file FILE_TYPE、 パラメーター 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 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 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. 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; UTL_HTTP パッケージ は、 HTML_PIECES という型を宣言します 。この 型 は、 VARCHAR2 型の表です。 (2000) BINARY によって索引付けされる INTEGER 。この型の値は、 REQUEST _ PIECES 関数 によって返され ます。 TYPE html_pieces IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER; 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 ); 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 ); 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が使用されます。 END_REQUEST 手順は、HTTPリクエストを終了します。 HTTP要求を完了せずに応答を待つことなく、HTTP要求を終了させるには 、 END_REQUEST プロシージャーを 使用し ます。通常のプロセスでは、要求を開始し、応答を得てから応答を閉じます。署名は次のとおりです。 END_REQUEST( r IN OUT UTL_HTTP.REQ) パラメーター r r はHTTP要求レコードです。 END_RESPONSE 手順は、HTTPレスポンスを終了します。 END_RESPONSE 手順は、HTTPリクエストとレスポンスを完了します。これは、要求および応答プロセスを終了する通常の方法です。署名は次のとおりです。 END_RESPONSE( r IN OUT UTL_HTTP.RESP) パラメーター r r は HTTP 応答レコードです。 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) GET_FOLLOW_REDIRECT 手順が許可リダイレクトの最大数の現在の設定を返します。署名は次のとおりです。 GET_FOLLOW_REDIRECT( max_redirects OUT INTEGER) パラメーター max_redirects max_redirects は許可されるリダイレクトの最大数です。 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 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 GET_HEADER_COUNT 機能は、HTTP応答ヘッダーの数を返します。署名は次のとおりです。 GET_HEADER_COUNT( r IN OUT UTL_HTTP.RESP) RETURN INTEGER この関数は、 INTEGER 値を 返し ます。 パラメーター r r はHTTP応答レコードです。 GET_RESPONSE 機能は、ネットワーク要求を送信し、任意のHTTPレスポンスを返します。署名は次のとおりです。 GET_RESPONSE( r IN OUT UTL_HTTP.REQ) RETURN UTL_HTTP.RESP この関数は、 UTL_HTTP.RESP レコードを 戻します 。 パラメーター r r はHTTP要求レコードです。 GET_RESPONSE_ERROR_CHECK 手順は、応答エラー・チェックが設定されているかどうかを返します。署名は次のとおりです。 GET_RESPONSE_ERROR_CHECK( enable OUT BOOLEAN) パラメーター enable enable は 応答エラーチェックが設定されている場合 は TRUE 返し 、そうでない場合は FALSE 返し FALSE 。 GET_TRANSFER_TIMEOUT 手順は、HTTPリクエストの現在の、デフォルトの転送タイムアウト設定を返します。署名は次のとおりです。 GET_TRANSFER_TIMEOUT( timeout OUT INTEGER) パラメーター timeout timeout は秒単位の転送タイムアウト設定です。 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[//><!-- 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 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/ 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; 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; SET_BODY_CHARSET 手順は、将来のHTTP要求の本体のデフォルトの文字セットを設定します。署名は次のとおりです。 SET_BODY_CHARSET( charset VARCHAR2 DEFAULT NULL) パラメーター charset charset は、将来のリクエストの本文の文字セットです。デフォルトはNULLです。この場合、データベース・キャラクタ・セットが使用されます。 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
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です。 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 です。 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秒です。 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 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 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 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 添付ファイルがあります。 注: 管理者は、このパッケージを使用する前に各ユーザーまたはグループに実行権限を与える必要があります。 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; 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 です。 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 です。 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のバージョンと比較して部分実装です。上記の表に記載されている機能およびプロシージャのみがサポートされています。 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 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 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; -------- 結果(連結された値)は 、 CAST_TO_VARCHAR2 関数 によって VARCHAR2 形式に 変換され ます。 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:= UTL_RAW.CAST_TO_RAW(v); この例では、 VARCHAR2 値、 RAW 値および変換された値が戻されます。 Accounts \x4163636f756e7473 \x4163636f756e7473 \x4163636f756e7473 LENGTH 関数は、の長さを返し RAW 値。署名は次のとおりです。 LENGTH( r RAW) この関数は RAW 値を 返し ます。 パラメーター r RAW その値 LENGTH 評価します。 例 次の例では、 LENGTH 関数を 使用し て RAW 値の 長さを返し ます。 SELECT UTL_RAW.LENGTH(UTL_RAW.CAST_TO_RAW('Accounts')) FROM DUAL; -------- 次の例では、 LENGTH 関数を 使用して、 マルチバイト文字を含む RAW 値の 長さを返し ます。 SELECT UTL_RAW.LENGTH(UTL_RAW.CAST_TO_RAW(' 独孤求 败 ')); length -------- 12 (1 row) 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 次の例では、 SUBSTR 関数を 使用して 、 RAW 値の 最後から 5 バイト を開始する部分文字列を選択し ます。 SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), -5 , 3) FROM DUAL; substr -------- oun (1 row) 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リプライ回線。 CONNECTION レコードタイプは、SMTP接続の記述を提供します。 TYPE connection IS RECORD ( host VARCHAR2(255), port PLS_INTEGER, tx_timeout PLS_INTEGER ); REPLY レコードタイプは、SMTP応答線の記述を提供します。 REPLIES は複数のSMTP応答行の表です。 TYPE reply IS RECORD ( code INTEGER, text VARCHAR2(508) ); TYPE replies IS TABLE OF reply INDEX BY BINARY_INTEGER; CLOSE_DATA 手順は、次のシーケンスを送信することにより、電子メールメッセージを終了します。 <CR><LF>.<CR><LF> これは、行頭の単一の期間です。 CLOSE_DATA( c IN OUT CONNECTION) パラメーター c 閉じられるSMTP接続。 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 項を参照してください 。 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 項を参照してください 。 DATA の手順は、電子メールメッセージの本文を指定する機能を提供します。メッセージは <CR><LF>.<CR><LF> シーケンスで終了します。 DATA( c IN OUT CONNECTION、 body VARCHAR2) パラメーター c コマンドが送信されるSMTP接続。 body 送信される電子メールメッセージの本文。 EHLO 手順は、接続を確立した後、SMTPサーバーとの初期ハンドシェイクを実行します。 EHLO 手順は、RFC 1869には、サーバーの応答で返される情報の形式を指定するRFC 821に従って、クライアントがSMTPサーバーに自身を識別することができます。 HELO 手順 は、同等の機能を実行するが、サーバーに関する以下の情報を返します。 EHLO( c IN OUT CONNECTION、 domain VARCHAR2) パラメーター c ハンドシェイクを実行するSMTPサーバーへの接続。 domain 送信ホストのドメイン名。 HELO 手順は、接続を確立した後、SMTPサーバーとの初期ハンドシェイクを実行します。 HELO 手順は、RFC 821によれば、クライアントがSMTPサーバに対して自身を識別することを可能にする EHLO 手順 は、同等の機能を実行するが、サーバーの詳細情報を返します。 HELO( c IN OUT、 domain VARCHAR2) パラメーター c ハンドシェイクを実行するSMTPサーバーへの接続。 domain 送信ホストのドメイン名。 HELP 機能は、送信する機能を提供 HELP SMTPサーバーにコマンドを。 replies 返信のHELPを( c で実施CONNECTION [、 command VARCHAR2]) パラメーター c コマンドが送信されるSMTP接続。 command ヘルプが要求されたコマンド。 replies SMTP応答回線をコマンドに追加します。 REPLY と REPLIES については、 3.23.2 項を参照してください 。 MAIL 手続きはメールトランザクションを開始します。 MAIL( c IN OUT CONNECTION、 sender VARCHAR2 [、 parameters VARCHAR2]) パラメーター c メールトランザクションを開始するSMTPサーバーへの接続。 sender 送信者の電子メールアドレス。 parameters mailコマンドのパラメータは、 RFC 1869で定義されている key=value という形式です 。 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 項を参照してください 。 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サーバーから返された接続ハンドル。 OPEN_DATA 手順では、送信 DATA SMTPサーバーにコマンドを。 OPEN_DATA( c IN OUT CONNECTION) パラメーター c コマンドを送信するSMTP接続。 QUIT 手順では、SMTPサーバとのセッションを閉じます。 終了( c IN OUT CONNECTION) パラメーター c SMTP接続を終了します。 RCPT 手順は、受信者の電子メールアドレスを提供します。複数の受信者をスケジュールするには、 RCPT 複数回 呼び出し ます。 RCPT( c IN OUT CONNECTION、 recipient VARCHAR2 [、 parameters VARCHAR2]) パラメーター c 受信者を追加するSMTPサーバーへの接続。 recipient 受信者の電子メールアドレス。 parameters mailコマンドのパラメータは、 RFC 1869で定義されている key=value という形式です 。 RSET 手順は、現在のメールトランザクションを終了する機能を提供します。 RSET( c IN OUT CONNECTION) パラメーター c メールトランザクションをキャンセルするSMTP接続。 VRFY 機能は、受信者の電子メールアドレスを検証し、検証するための機能を提供します。有効な場合は、受信者のフルネームと完全修飾メールボックスが返されます。 reply VRFY( c IN OUT CONNECTION、 recipient VARCHAR2) パラメーター c 電子メールアドレスを確認するためのSMTP接続。 recipient 受信者の電子メールアドレスを確認します。 reply コマンドへのSMTPの応答。 SMTPは、複数の応答を返す場合、最後のものだけがで返される reply 。 REPLY と REPLIES については、 3.23.2 項を参照してください 。 WRITE_DATA 手順は、追加する機能を提供 VARCHAR2 電子メールメッセージにデータを。 WRITE_DATA 手順を繰り返し、データを追加するために呼び出すことができます。 WRITE_DATA( c IN OUT CONNECTION、 data VARCHAR2) パラメーター c データを追加するSMTP接続。 data 電子メールメッセージに追加するデータ。データはRFC 822仕様に準拠している必要があります。 次の手順では、 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'); 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が含まれている場合、例外を。 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 結果の(エスケープされた)URLは次のとおりです。 http://www.example.com/Using%20the%20ESCAPE%20function.html 関数を呼び出すときに 、 escape _ reserved _ chars パラメーターに TRUE 値を含めると、次のように なります。 DECLARE ESCAPE 機能は、予約文字だけでなく、URLで不正な文字をエスケープ: http%3A%2F%2Fwww.example.com%2FUsing%20the%20ESCAPE%20function.html 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 結果の(エスケープされていない)URLは次のとおりです。 http://www.example.com/Using the UNESCAPE function.html 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つの段落がすべてのコピーに記載されていれば、無償で、書面による合意なしに、本ソフトウェアおよびそのドキュメンテーションを使用、複製、改変、配布することが許可されます。 いかなる場合においても、カリフォルニア大学は、カリフォルニア大学が実施していたとしても、ソフトウェアおよびその文書の使用に起因する損害を含む、直接的、間接的、偶発的、派生的、派生的損害に対する賠償責任を負わないものとしますそのような損害の可能性を知らされた。 カリフォルニア州立大学は、商品性および特定目的への適合性の黙示的な保証を含む(ただしこれらに限定されない)いかなる保証も特に断ります。本契約に基づいて提供される本ソフトウェアは、現状のままであり、カリフォルニア州立大学は、保守、サポート、更新、拡張または改変を提供する義務を負いません。 2.2 パッケージの作成
2.2.1 Creating the Package Specification
2.2.2 Creating the Package Body
2.3 パッケージの参照
2.4 ユーザー定義型のパッケージの使用
2.5 パッケージを削除する
3 組み込みパッケージ
3.1 DBMS_ALERT
3.1.1 REGISTER
3.1.2 REMOVE
3.1.3 REMOVEALL
3.1.4 SIGNAL
3.1.5 WAITANY
3.1.6 WAITONE
3.1.7 Comprehensive Example
3.2 DBMS_A Q
3.2.1 ENQUEUE
キュー _ 名 IN VARCHAR2、
エンキュー _ オプション IN DBMS_AQ.ENQUEUE_OPTIONS_T、
メッセージ _ プロパティ IN DBMS_AQ.MESSAGE_PROPERTIES_T、
ペイロード IN < タイプ _ 名前 >、
msgid " RAW")
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);
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);
DBMS _ AQ 。 WAITING - 遅延に達していません。
DBMS _ AQ 。 READY - キュー項目は処理可能です。
DBMS _ AQ 。 PROCESSED - キューエントリが処理されました。
DBMS _ AQ 。 EXPIRED - キュー項目が例外キューに移動されました。 3.2.2 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)
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)
DBMS _ AQ 。 BROWSE - ロックを取得せずにメッセージを読み取ります。
DBMS _ AQ 。 LOCKED - ロックを取得した後でメッセージを読み取ります。
DBMS _ AQ 。 REMOVE - メッセージを削除する前にメッセージを読み取ります。
DBMS _ AQ 。 REMOVE _ NODATA - メッセージを読むが、メッセージは削除しないでください。
FIRST_MESSAGE - 検索用語に一致するキュー内の最初のメッセージ。
DBMS _ AQ 。 NO _ WAIT - 待たないでください。
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);
DBMS _ AQ 。 WAITING - 遅延に達していません。
DBMS _ AQ 。 READY - キュー項目は処理可能です。
DBMS _ AQ 。 PROCESSED - キューエントリが処理されました。
DBMS _ AQ 。 EXPIRED - キュー項目が例外キューに移動されました。 3.2.3 REGISTER
reg _ list IN SYS.AQ$_REG_INFO_LIST,
count IN NUMBER)
plsql:// schema . procedure
場所:
schema は、プロシージャーが存在するスキーマを指定します。
procedure は、通知されるプロシージャーの名前を指定します。 3.2.4 UNREGISTER
reg _ list IN SYS.AQ$_REG_INFO_LIST,
count IN NUMBER)
plsql:// schema . procedure
場所:
schema は、プロシージャーが存在するスキーマを指定します。
procedure は、通知されるプロシージャーの名前を指定します。 3.3 DBMS_AQADM
3.3.1 ALTER_QUEUE
max _ INET NUMBER DEFAULT NULL、
再試行 _ 遅延 IN NUMBER DEFAULT 0
保持 時間 IN NUMBER DEFAULT 0、
オート _ コミット BOOLEAN DEFAULT TRUE)
コメント IN VARCHAR2 DEFAULT NULL、 3.3.2 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, 3.3.3 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) 3.3.4 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)
priority, enq_time
priority
enq_time 3.3.5 DROP_QUEUE
キュー _ 名 IN VARCHAR2、
オート _ コミット BOOLEAN DEFAULT TRUE) 3.3.6 DROP_QUEUE_TABLE
キュー _ 表 IN VARCHAR2、
BOOLEANデフォルトFALSEの力 、
auto _ commit IN BOOLEANデフォルトTRUE) 3.3.7 PURGE_QUEUE_TABLE
キュー _ 表 IN VARCHAR2、
purge_condition IN VARCHAR2、
purge_options IN aq $ _purge_options_t) 3.3.8 START_QUEUE
キュー _ 名 IN VARCHAR2、
エンキュー IN BOOLEAN DEFAULT TRUE、
BOOLEAN DEFAULT TRUEのデキュー ) 3.3.9 STOP_QUEUE
キュー _ 名 IN VARCHAR2、
エンキュー IN BOOLEAN DEFAULT TRUE、
デブイ IN BOOLEAN DEFAULT TRUE、
BOOLEAN DEFAULT TRUEを待ちます ) 3.4 DBMS_CRYPTO
3.4.1 DECRYPT
(src IN RAW, typ IN INTEGER, key IN RAW, iv IN RAW
DEFAULT NULL) RETURN RAW
(dst INOUT BLOB, src IN BLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)
(dst INOUT CLOB, src IN CLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)
(
principal VARCHAR2(90) PRIMARY KEY, -- username
ciphertext RAW(9) -- encrypted password
);
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; 3.4.2 ENCRYPT
( src IN RAW, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL) RETURN RAW
( dst INOUT BLOB, src IN BLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)
( dst INOUT BLOB, src IN CLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)
(
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; 3.4.3 HASH
( src IN RAW, typ IN INTEGER) RETURN RAW
( src IN CLOB, typ IN INTEGER) RETURN RAW
typ INTEGER := DBMS_CRYPTO.HASH_MD5;
hash_value RAW(100);
BEGIN
hash_value := DBMS_CRYPTO.HASH('cleartext source', typ);
END; 3.4.4 MAC
(src IN RAW, typ IN INTEGER, key IN RAW) RETURN RAW
(src IN CLOB, typ IN INTEGER, key IN RAW) RETURN RAW
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; 3.4.5 RANDOMBYTES
( number _ bytes IN INTEGER) RETURNS RAW
result RAW(1024);
BEGIN
result := DBMS_CRYPTO.RANDOMBYTES(1024);
END; 3.4.6 RANDOMINTEGER
result INTEGER;
BEGIN
result := DBMS_CRYPTO.RANDOMINTEGER();
DBMS_OUTPUT.PUT_LINE(result);
END; 3.4.7 RANDOMNUMBER
result NUMBER;
BEGIN
result := DBMS_CRYPTO.RANDOMNUMBER();
DBMS_OUTPUT.PUT_LINE(result);
END; 3.5 DB MS_JOB
3.5.1 BROKEN
3.5.2 CHANGE
3.5.3 INTERVAL
3.5.4 NEXT_DATE
3.5.5 REMOVE
3.5.6 RUN
3.5.7 SUBMIT
3.5.8 WHAT
3.6 DB MS_LOB
3.6.1 APPEND
3.6.2 COMPARE
3.6.3 CONVERTTOBLOB
3.6.4 CONVERTTOCLOB
3.6.5 COPY
{BLOB | CLOB}、
amount INTEGER 3.6.6 ERASE
3.6.7 GET_STORAGE_LIMIT
3.6.8 GETLENGTH
3.6.9 INSTR
3.6.10 READ
3.6.11 SUBSTR
3.6.12 TRIM
3.6.13 WRITE
amount BINARY_INTEGER、 3.6.14 WRITEAPPEND
3.7 DBMS_LOCK
3.7.1 SLEEP
3.8 DBMS_MVIEW
3.8.1 GET_MV_DEPENDENCIES
list IN VARCHAR2,
deplist OUT VARCHAR2);
deplist VARCHAR2(1000);
BEGIN
DBMS_MVIEW.GET_MV_DEPENDENCIES('public.emp_view', deplist);
DBMS_OUTPUT.PUT_LINE('deplist: ' || deplist);
END; 3.8.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);
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); 3.8.3 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);
errors INTEGER;
BEGIN
DBMS_MVIEW.REFRESH_ALL_MVIEWS(errors, method => 'C');
END; 3.8.4 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);
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);
errors INTEGER;
BEGIN
DBMS_MVIEW.REFRESH_DEPENDENT(errors, list => 'public.emp_view', method => 'C');
END; 3.9 DBMS_OUTPUT
3.9.1 CHARARR
3.9.2 DISABLE
3.9.3 ENABLE
3.9.4 GET_LINE
3.9.5 GET_LINES
3.9.6 NEW_LINE
3.9.7 PUT
3.9.8 PUT_LINE
3.9.9 SERVEROUTPUT
3.10 DBMS_PIPE
3.10.1 CREATE_PIPE
3.10.2 NEXT_ITEM_TYPE
3.10.3 PACK_MESSAGE
3.10.4 PURGE
3.10.5 RECEIVE_MESSAGE
3.10.6 REMOVE_PIPE
3.10.7 RESET_BUFFER
3.10.8 SEND_MESSAGE
3.10.9 UNIQUE_SESSION_NAME
3.10.10 UNPACK_MESSAGE
3.10.11 Comprehensive Example
3.11 DBMS_PROFILER
3.11.1 FLUSH_DATA
3.11.2 GET_VERSION
3.11.3 INTERNAL_VERSION_CHECK
3.11.4 PAUSE_PROFILER
3.11.5 RESUME_PROFILER
3.11.6 START_PROFILER
3.11.7 STOP_PROFILER
3.11.8 Using DBMS_PROFILER
セッション内で実行される各ステートメントのパフォーマンスカウンターとタイマーが含まれます。
各実行の要約が含まれます( PLSQL_PROFILER_RAWDATA ある情報の集約 )。
セッション内で実行される各コードユニット(関数、プロシージャー、トリガー、または無名ブロック)の要約が含まれます。 3.11.8.1 Querying the DBMS_PROFILER Tables and View
3.11.8.2 DBMS_PROFILER - Reference
3.11.8.2.1 PLSQL_PROFILER_RUNS
3.11.8.2.2 PLSQL_PROFILER_UNITS
3.11.8.2.3 PLSQL_PROFILER_DATA
3.11.8.2.4 PLSQL_PROFILER_RAWDATA
3.12 DBMS_RANDOM
3.12.1 INITIALIZE
3.12.2 NORMAL
3.12.3 RANDOM
3.12.4 SEED
3.12.5 SEED
3.12.6 STRING
3.12.7 TERMINATE
3.12.8 VALUE
3.12.9 VALUE
3.13 DBMS_RLS
3.13.1 ADD_POLICY
3.13.2 DROP_POLICY
3.13.3 ENABLE_POLICY
3.14 DBMS_SCHEDULER
schedule_name , start_date , repeat_interval , end_date , comments )
program_name , argument_position , argument_name , argument_type , default_value , out_argument )
program_name , argument_position , argument_name , argument_type , out_argument )
program_name , argument_position )
program_name , argument_name )
calendar_string , start_date , return_date_after , next_run_date )
job_name , argument_position , argument_value )
job_name , argument_name , argument_value ) 3.14.1 Using Calendar Syntax to Specify a Repeating Interval
MM は月の2桁の表現で、
そして DD 日の2桁の日で表現したものです。
そして DD 日の2桁の日で表現したものです 3.14.2 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) 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)
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)
END;', 3.14.3 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 => 'update_log',
END;', 3.14.4 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) 3.14.5 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)
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) 3.14.6 DISABLE
name IN VARCHAR2,
force IN BOOLEAN DEFAULT FALSE,
commit_semantics IN VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR') 3.14.7 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') 3.14.8 DROP_PROGRAM
program_name IN VARCHAR2,
force IN BOOLEAN DEFAULT FALSE) 3.14.9 DROP_PROGRAM_ARGUMENT
program _ name IN VARCHAR2,
argument_position IN PLS_INTEGER)
program _ name IN VARCHAR2,
argument_name IN VARCHAR2) 3.14.10 DROP_SCHEDULE
schedule_name IN VARCHAR2,
force IN BOOLEAN DEFAULT FALSE) 3.14.11 ENABLE
name IN VARCHAR2,
commit_semantics IN VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR') 3.14.12 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) 3.14.13 RUN_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 3.14.14 SET_JOB_ARGUMENT_VALUE
job_name IN VARCHAR2,
argument_position IN PLS_INTEGER,
argument_value IN VARCHAR2)
job_name IN VARCHAR2,
argument_name IN VARCHAR2,
argument_value IN VARCHAR2) 3.15 DBMS_ SESSION
3.15.1 S ET_ROLE
3.16 DBMS_SQL
3.16.1 BIND_VARIABLE
3.16.2 BIND_VARIABLE_CHAR
3.16.3 BIND VARIABLE RAW
3.16.4 CLOSE_CURSOR
3.16.5 COLUMN_VALUE
3.16.6 COLUMN_VALUE_CHAR
3.16.7 COLUMN VALUE RAW
3.16.8 DEFINE_COLUMN
3.16.9 DEFINE_COLUMN_CHAR
3.16.10 DEFINE COLUMN RAW
3.16.11 D ESCRIBE COLUMNS
DESC_TAB); 3.16.12 EXECUTE
3.16.13 EXECUTE_AND_FETCH
3.16.14 FETCH_ROWS
3.16.15 IS_OPEN
3.16.16 LAST_ROW_COUNT
3.16.17 OPEN_CURSOR
3.16.18 PARSE
3.17 DB MS_UTILITY
3.17.1 LNAME_ARRAY
3.17.2 UNCL_ARRAY
3.17.3 ANALYZE_DATABASE , ANALYZE SCHEMA and ANALYZE PART_OBJECT
3.17.4 CANONICALIZE
3.17.5 COMMA_TO_TABLE
3.17.6 DB_VERSION
3.17.7 EXEC_DDL_STATEMENT
3.17.8 FOR MAT_CALL_STACK
return VARCHAR2 3.17.9 GET_CPU_TIME
3.17.10 GET_DEPENDENCY
3.17.11 GET_HASH_VALUE
3.17.12 GET_PARAMETER_VALUE
3.17.13 GET_TIME
3.17.14 NAME_TOKENIZE
b OUT VARCHAR2、 c OUT VARCHAR2、 dblink OUT VARCHAR2、
nextpos OUT BINARY_INTEGER) 3.17.15 TABLE_TO_COMMA
3.18 UTL_ENCODE
3.18.1 BASE64_DECODE
3.18.2 BASE64_ENCODE
3.18.3 MIMEHEADER_DECODE
3.18.4 MIMEHEADER_ENCODE
3.18.5 QUOTED_PRINTABLE_DECODE
3.18.6 QUOTED_PRINTABLE_ENCODE
3.18.7 TEXT_DECODE
3.18.8 TEXT_ENCODE
3.18.9 UUDECODE
3.18.10 UUENCODE
3.19 UTL_FILE
3.19.1 Setting File Permissions with utl_file.umask
3.19.2 FCLOSE
3.19.3 FCLOSE_ALL
3.19.4 FCOPY
3.19.5 FFLUSH
3.19.6 FOPEN
filename VARCHAR2、 open_mode VARCHAR2
[、 max_linesize BINARY_INTEGER]) 3.19.7 FREMOVE
3.19.8 FRENAME
[ BOOLEANを overwrite ]) 3.19.9 GET_LINE
3.19.10 IS_OPEN
3.19.11 NEW_LINE
3.19.12 PUT
3.19.13 PUT_LINE
buffer {DATE | NUMBER | TIMESTAMP | VARCHAR2}) 3.19.14 PUTF
3.20 UTL_HTTP
HTML_PIECES 3.20.1 HTML_PIECES
3.20.2 REQ
3.20.3 RESP
3.20.4 BEGIN_REQUEST
3.20.5 END_REQUEST
3.20.6 END_RESPONSE
3.20.7 GET_BODY_CHARSET
3.20.8 GET_FOLLOW_REDIRECT
3.20.9 GET_HEADER
3.20.10 GET_HEADER_BY_NAME
3.20.11 GET_HEADER_COUNT
3.20.12 GET_RESPONSE
3.20.13 GET_RESPONSE_ERROR_CHECK
3.20.14 GET_TRANSFER_TIMEOUT
3.20.15 READ_LINE
3.20.16 READ_RAW
3.20.17 READ_TEXT
3.20.18 REQUEST
3.20.19 REQUEST_PIECES
3.20.20 SET_BODY_CHARSET
3.20.21 SET_FOLLOW_REDIRECT
3.20.22 SET_HEADER
3.20.23 SET_RESPONSE_ERROR_CHECK
3.20.24 SET_TRANSFER_TIMEOUT
3.20.25 WRITE_LINE
3.20.26 WRITE_RAW
3.20.27 WRITE_TEXT
3.21 UT L_MAIL
3.21.1 SEND
3.21.2 SEND_ATTACH_RAW
3.21.3 SEND_ATTACH_VARCHAR2
3.22 UTL_RAW
3.22.1 CAST_TO_RAW
3.22.2 CAST_TO_VARCHAR2
3.22.3 CONCAT
concat
abc
(1 row) 3.22.4 CONVERT
r RAW;
v VARCHAR2;
BEGIN
v:= 'Accounts';
dbms_output.put_line(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);
3.22.5 LENGTH
length
8
(1 row) 3.22.6 SUBSTR
--------
count
(1 row) 3.23 UTL_SMTP
3.23.1 CONNECTION
3.23.2 REPLY/REPLIES
3.23.3 CLOSE_DATA
3.23.4 COMMAND
3.23.5 COMMAND_REPLIES
3.23.6 DATA
3.23.7 EHLO
3.23.8 HELO
3.23.9 HELP
3.23.10 MAIL
3.23.11 NOOP
3.23.12 OPEN_CONNECTION
3.23.13 OPEN_DATA
3.23.14 QUIT
3.23.15 RCPT
3.23.16 RSET
3.23.17 VRFY
3.23.18 WRITE_DATA
3.23.19 Comprehensive Example
3.24 UTL_URL
3.24.1 ESCAPE
結果varchar2(400);
ベギン
結果:= UTL_URL.ESCAPE( 'http://www.example.com/ESCAPEを使用するfunction.html');
DBMS_OUTPUT.PUT_LINE(結果);
終わり;
result varchar2(400);
BEGIN
result := UTL_URL.ESCAPE('http://www.example.com/Using the ESCAPE function.html', TRUE);
DBMS_OUTPUT.PUT_LINE(result);
END; 3.24.2 UNESCAPE
result varchar2(400);
BEGIN
result := UTL_URL.UNESCAPE('http://www.example.com/Using%20the%20UNESCAPE%20function.html');
DBMS_OUTPUT.PUT_LINE(result);
END; 4 謝辞