DBMS_UTILITYパッケージは、各種のユーティリティ・サブプログラムを提供します。
この章では、次の項目について説明します。
セキュリティ・モデル
定数
例外
レコード・タイプ
表タイプ
DBMS_UTILITY
は、NAME_RESOLVEプロシージャおよびCOMPILE_SCHEMAプロシージャのコール・ユーザーの権限で実行されます。これは、SQLが正しく動作するために必要です。
このパッケージは、SYS
として実行されません。権限は、DBMS_DDL
を使用してチェックされます。
次の表に、DBMS_UTILITY
で発生する例外を示します。
表174-2 DBMS_UTILITYで発生する例外
例外 | エラー・コード | 説明 |
---|---|---|
|
-24237 |
|
|
-24238 |
コンパイラの設定が |
|
-24239 |
|
DBMS_UTILITY
パッケージでは、単一のレコード
・タイプと複数の表
タイプを定義します。
表174-4 DBMS_UTILITYパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
アクティブなインスタンスを戻します。 |
|
データベース内のすべての表、クラスタおよび索引を分析します。 |
|
指定した表および索引を分析します。 |
|
スキーマ内のすべての表、クラスタおよび索引を分析します。 |
|
指定した文字列を正規化します。 |
|
カンマで区切られた名前のリストを、名前のPL/SQL表に変換します。 |
|
指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージ、ビューおよびトリガーをコンパイルします。 |
CREATE_ALTER_TYPE_ERROR_TABLEプロシージャ |
|
|
現在接続しているインスタンス番号を戻します。 |
DATA_BLOCK_ADDRESS_BLOCKファンクション |
データ・ブロック・アドレスのブロック番号部分を取得します。 |
DATA_BLOCK_ADDRESS_FILEファンクション |
データ・ブロック・アドレスのファイル番号部分を取得します。 |
|
データベースに関するバージョン情報を戻します。 |
|
|
|
入力SQL問合せのすべてのビュー参照を対応するビュー副問合せと再帰的に置き換えます。 |
|
現行のコール・スタックをフォーマットします。 |
|
現行のエラーのポイントから、エラーが捕捉された例外ハンドラまでのバックトレースをフォーマットします。 |
|
現行のエラー・スタックをフォーマットします。 |
|
現在のCPU時間を100分の1秒単位で戻します。 |
|
渡されたオブジェクトの依存関係を示します。 |
|
データベース・プラットフォームのエンディアンを取得します。 |
|
指定した文字列についてハッシュ値を計算します。 |
|
指定したinit.oraパラメータの値を取得します。 |
|
MD5アルゴリズムを使用して、指定した文字列についてハッシュ値を計算します。 |
|
現在の時間を100分の1秒単位で戻します。 |
|
|
|
データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。 |
|
指定の |
|
データベースがクラスタ・データベース・モードで実行されているかどうかを判別します。 |
MAKE_DATA_BLOCK_ADDRESSファンクション |
ファイル番号とブロック番号を指定して、データ・ブロック・アドレスを作成します。 |
|
指定した名前を解決します。 |
|
指定した名前を解析するためにパーサーをコールします。 |
|
|
|
|
|
Oracleのバージョンおよびオペレーティング・システムを一意に識別する文字列を戻します。 |
|
SQL IDをハッシュ値に変換します。 |
|
名前のPL/SQL表を、カンマで区切られた名前のリストに変換します。 |
|
無効なデータベース・オブジェクトを有効にします。 |
|
表示された表にロックがあり、指定したSCNより前に開始されたすべてのトランザクション(コール元自体のトランザクションを除く)がコミットされるか、またはロールバックされるまで待機します。 |
このプロシージャは、データベース内のすべての表、クラスタおよび索引を分析します。
構文
DBMS_UTILITY.ANALYZE_DATABASE ( method IN VARCHAR2, estimate_rows IN NUMBER DEFAULT NULL, estimate_percent IN NUMBER DEFAULT NULL, method_opt IN VARCHAR2 DEFAULT NULL);
パラメータ
表174-6 ANALYZE_DATABASEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
推定する行の数。 |
|
推定する行のパーセント。 |
|
次の形式のメソッド・オプション: [ [ [ |
このプロシージャは、次のSQLと同じです。
"ANALYZE TABLE|INDEX [<schema>.]<object_name> PARTITION <pname> [<command_type>] [<command_opt>] [<sample_clause>]
構文
DBMS_UTILITY.ANALYZE_PART_OBJECT ( schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2 DEFAULT NULL, object_type IN CHAR DEFAULT 'T', command_type IN CHAR DEFAULT 'E', command_opt IN VARCHAR2 DEFAULT NULL, sample_clause IN VARCHAR2 DEFAULT 'sample 5 percent ');
パラメータ
表174-7 ANALYZE_PART_OBJECTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
分析するオブジェクトの名前。パーティション化されている必要があります。 |
|
オブジェクトのタイプ。 |
|
|
|
command_typeのその他のオプション。
|
|
|
このプロシージャは、スキーマ内のすべての表、クラスタおよび索引を分析します。
構文
DBMS_UTILITY.ANALYZE_SCHEMA ( schema IN VARCHAR2, method IN VARCHAR2, estimate_rows IN NUMBER DEFAULT NULL, estimate_percent IN NUMBER DEFAULT NULL, method_opt IN VARCHAR2 DEFAULT NULL);
パラメータ
表174-8 ANALYZE_SCHEMAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
|
|
|
推定する行の数。 |
|
推定する行のパーセント。 |
|
次の形式のメソッド・オプション: [ [ [ |
このプロシージャは、指定した文字列を正規化します。このプロシージャは単一の予約語またはキーワード('table'など)を処理し、' table 'がTABLEになるように単一の識別子の空白を取り除きます。
構文
DBMS_UTILITY.CANONICALIZE( name IN VARCHAR2, canon_name OUT VARCHAR2, canon_len IN BINARY_INTEGER);
使用上の注意
name
がNULLの場合、canon_name
はNULLになります。
name
がドットの付いた名前でない場合、およびname
が二重引用符で囲まれている場合、二重引用符を削除します。または、NLS_UPPERで大文字に変換します。この例には、スペースなどの特殊文字が使用されていても、二重引用符で囲まれていない名前は含まれません。
名前がドット付きの名前(a."b".cなど)の場合、ドット付きの名前の各要素の中に二重引用符で囲まれている要素がある場合、このコンポーネントに対する変換は行われません。かわりに、NLS_UPPERによって大文字に変換し、この要素の大文字の形式を二重引用符で囲みます。そのような場合、正規化された各要素は、"."で区切られて、入力位置に連結されます。
a[.b]*の後の他の文字は無視されます。
このプロシージャでは、'A B'のような例は処理されません。
これらのプロシージャは、カンマで区切られた名前のリストを、名前のPL/SQL表に変換します。2番目のバージョンでは、完全修飾属性名をサポートしています。
構文
DBMS_UTILITY.COMMA_TO_TABLE ( list IN VARCHAR2, tablen OUT BINARY_INTEGER, tab OUT uncl_array); DBMS_UTILITY.COMMA_TO_TABLE ( list IN VARCHAR2, tablen OUT BINARY_INTEGER, tab OUT lname_array);
このプロシージャは、指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージ、ビューおよびトリガーをコンパイルします。
構文
DBMS_UTILITY.COMPILE_SCHEMA ( schema IN VARCHAR2, compile_all IN BOOLEAN DEFAULT TRUE, reuse_settings IN BOOLEAN DEFAULT FALSE);
使用上の注意
このサブプログラムは、UTL_RECOMPパッケージのRECOMP_SERIALプロシージャのラッパーであることに注意してください。
このプロシージャのコール後、ステータスがINVALID
の項目をビューALL_OBJECTS
から選択して、すべてのオブジェクトが正常にコンパイルされたかどうかを調べます。
Enterprise Managerのコマンドを使用すると、INVALID
のオブジェクトに関連するエラーを表示できます。
SHOW ERRORS <type> <schema>.<name>
このプロシージャは、入力SQL問合せのすべてのビュー参照を対応するビュー副問合せと再帰的に置き換えます。
使用上の注意
拡張され、マージされたSQL文テキストは、正常完了時にoutput_sql_textにコピーされます。結果として得られる問合せのテキストは、基礎となる表への参照のみを含み、意味的には同等です。ただし、次の点に注意してください。
いずれかのビューで実行者権限のファンクションが呼び出されたときに、ビュー所有者が拡張SQLテキストのコンパイル・ユーザーまたは実行ユーザーと異なる場合、実行者権限のファンクションが、作成される問合せのテキストで別のユーザーで呼び出されることがあります。
動的WHERE
句を生成するファンクションが提供されると、VPDポリシーは別の方法で拡張されます。たとえば、ユーザーIDによって別の拡張が引き起こされた場合、このファンクションは別の方法で戻されます。
リモート・オブジェクトへの参照がある場合、結果は未定義になります。
このファンクションは、現行のコール・スタックをフォーマットします。このファンクションは、コール・スタックにアクセスするための任意ストアド・プロシージャまたはトリガーで使用できます。このファンクションは、デバッグ時に役立ちます。
このファンクションは、サブプログラムが範囲外の例外ハンドラから呼び出されているとしても、例外の発生場所にコール・スタックを表示します。出力は、SQLERRM
ファンクションの出力と似ていますが、サイズ制限が異なります。
例
CREATE OR REPLACE PROCEDURE Log_Errors ( i_buff in varchar2 ) IS g_start_pos integer := 1; g_end_pos integer; FUNCTION Output_One_Line RETURN BOOLEAN IS BEGIN g_end_pos := Instr ( i_buff, Chr(10), g_start_pos ); CASE g_end_pos > 0 WHEN true THEN DBMS_OUTPUT.PUT_LINE ( Substr ( i_buff, g_start_pos, g_end_pos-g_start_pos ) ); g_start_pos := g_end_pos+1; RETURN TRUE; WHEN FALSE THEN DBMS_OUTPUT.PUT_LINE ( Substr ( i_buff, g_start_pos, (Length(i_buff)-g_start_pos)+1 ) ); RETURN FALSE; END CASE; END Output_One_Line; BEGIN WHILE Output_One_Line() LOOP NULL; END LOOP; END Log_Errors; / Set Doc Off Set Feedback off Set Echo Off CREATE OR REPLACE PROCEDURE P0 IS e_01476 EXCEPTION; pragma exception_init ( e_01476, -1476 ); BEGIN RAISE e_01476; END P0; / Show Errors CREATE OR REPLACE PROCEDURE P1 IS BEGIN P0(); END P1; / SHOW ERRORS CREATE OR REPLACE PROCEDURE P2 IS BEGIN P1(); END P2; / SHOW ERRORS CREATE OR REPLACE PROCEDURE P3 IS BEGIN P2(); END P3; / SHOW ERRORS CREATE OR REPLACE PROCEDURE P4 IS BEGIN P3(); END P4; / CREATE OR REPLACE PROCEDURE P5 IS BEGIN P4(); END P5; / SHOW ERRORS CREATE OR REPLACE PROCEDURE Top_Naive IS BEGIN P5(); END Top_Naive; / SHOW ERRORS CREATE OR REPLACE PROCEDURE Top_With_Logging IS -- NOTE: SqlErrm in principle gives the same info as Format_Error_Stack. -- But SqlErrm is subject to some length limits, -- while Format_Error_Stack is not. BEGIN P5(); EXCEPTION WHEN OTHERS THEN Log_Errors ( 'Error_Stack...' || Chr(10) || DBMS_UTILITY.FORMAT_ERROR_STACK() ); Log_Errors ( 'Error_Backtrace...' || Chr(10) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() ); DBMS_OUTPUT.PUT_LINE ( '----------' ); END Top_With_Logging; / SHOW ERRORS -------------------------------------------------------------------------------- Set ServerOutput On call Top_Naive() /* ERROR at line 1: ORA-01476: divisor is equal to zero ORA-06512: at "U.P0", line 4 ORA-06512: at "U.P1", line 3 ORA-06512: at "U.P2", line 3 ORA-06512: at "U.P3", line 3 ORA-06512: at "U.P4", line 2 ORA-06512: at "U.P5", line 2 ORA-06512: at "U.TOP_NAIVE", line 3 */ ; Set ServerOutput On call Top_With_Logging() /* Error_Stack... ORA-01476: divisor is equal to zero Error_Backtrace... ORA-06512: at "U.P0", line 4 ORA-06512: at "U.P1", line 3 ORA-06512: at "U.P2", line 3 ORA-06512: at "U.P3", line 3 ORA-06512: at "U.P4", line 2 ORA-06512: at "U.P5", line 2 ORA-06512: at "U.TOP_WITH_LOGGING", line 6 ---------- */ ; /* ORA-06512: Cause: Backtrace message as the stack is unwound by unhandled exceptions. Action: Fix the problem causing the exception or write an exception handler for this condition. Or you may need to contact your application administrator or database administrator. */
このファンクションは、現行のエラー・スタックをフォーマットします。このファンクションは、全エラー・スタックを表示するための例外ハンドラで使用できます。
このファンクションは、現在のCPU処理時間を100分の1秒単位で戻します。2つのコールが戻す時間の差分によって、2つのポイント間のCPU処理時間(経過時間の合計ではない)を測定します。
このプロシージャは、渡されたオブジェクトの依存関係を示します。
使用上の注意
このプロシージャは、DBMS_OUTPUTパッケージを使用して結果を表示するため、依存性を表示したい場合は、SET SERVEROUTPUT ON
を宣言する必要があります。また、DBMS_OUTPUT
出力バッファをチェックするアプリケーションでこのサブプログラムを起動し、DBMS_OUTPUT
などのGET_LINES
サブプログラムを使用して出力を取得することもできます。
このファンクションは、指定したinit.ora
パラメータの値を取得します。
構文
DBMS_UTILITY.GET_PARAMETER_VALUE ( parnam IN VARCHAR2, intval IN OUT BINARY_INTEGER, strval IN OUT VARCHAR2, listno IN BINARY_INTEGER DEFAULT 1) RETURN BINARY_INTEGER;
使用上の注意
このファンクションを実行するには、V$PARAMETER動的ビューに対するSELECT
権限が必要です。
DBMS_UTILITY.GET_PARAMETER_VALUE
を使用すると、init.ora
に次のように設定されている場合、先頭のパラメータ設定の/dir1
のみが戻されます。
utl_file_dir = /dir1 utl_file_dir = /dir2
ただし、次のように指定すると、完全なカンマ区切り文字列が戻されます。
utl_file_dir = /dir1, /dir2
例
DECLARE parnam VARCHAR2(256); intval BINARY_INTEGER; strval VARCHAR2(256); partyp BINARY_INTEGER; BEGIN partyp := dbms_utility.get_parameter_value('max_dump_file_size', intval, strval); dbms_output.put('parameter value is: '); IF partyp = 1 THEN dbms_output.put_line(strval); ELSE dbms_output.put_line(intval); END IF; IF partyp = 1 THEN dbms_output.put('parameter value length is: '); dbms_output.put_line(intval); END IF; dbms_output.put('parameter type is: '); IF partyp = 1 THEN dbms_output.put_line('string'); ELSE dbms_output.put_line('integer'); END IF; END;
このファンクションは、MD5アルゴリズムを使用して、指定した文字列についてハッシュ値を計算します。
構文
Dbms_utility.get_sql_hash ( name IN VARCHAR2, hash OUT RAW, pre10ihash OUT NUMBER) RETURN NUMBER;
このファンクションは、現在の時間を100分の1秒単位で判別します。このサブプログラムは、主に経過時間を確認するために使用します。このサブプログラムは、2回(プロセスの開始時と終了時)コールされ、2つ目の(後の)数から1つ目の(先の)数を引くことで経過時間を判別します。
このプロシージャは、データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。また、無効化されるオブジェクトに(直接的または間接的に)依存するすべてのオブジェクトも無効化します。
構文
DBMS_UTILITY.INVALIDATE ( p_object_id NUMBER, p_plsql_object_settings VARCHAR2 DEFAULT NULL, p_option_flags PLS_INTEGER DEFAULT 0);
パラメータ
表174-26 INVALIDATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
無効化するオブジェクトのID番号。これは、 |
|
|
|
このオプション・パラメータのデフォルト値はゼロ(フラグなし)です。INVALIDATEによってサポートされるオプション・フラグです。
|
使用上の注意
p_object_id
によって指定されるオブジェクトのオブジェクト・タイプ(ALL_OBJECTS
のobject_type
列)は、PROCEDURE
、FUNCTION
、PACKAGE
、PACKAGE
BODY
、TRIGGER
、TYPE
、TYPE
BODY
、LIBRARY
、VIEW
、OPERATOR
、SYNONYM
、またはJAVA
CLASS
である必要があります。オブジェクトがこれらのタイプのいずれでもなく、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生しますが、そうでない場合は、何も実行されません。
p_object_id
によって指定されるオブジェクトがSTANDARD
のパッケージ仕様部、DBMS_STANDARD
のパッケージ仕様部、あるいはDBMS_UTILITY
のパッケージ仕様部または本体であり、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生します。そうでない場合は、何も実行されません。
p_object_id
によって指定されるオブジェクトがオブジェクト・タイプ仕様部であり、そのタイプに依存する表が存在し、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生します。そうでない場合は、何も実行されません。
例
例1
DBMS_UTILITY.INVALIDATE (1232, 'PLSQL_OPTIMIZE_LEVEL = 2 REUSE SETTINGS');
object_id
1232がHR
スキーマのremove_emp
プロシージャを参照するとします。この場合、前述のコールはremove_empプロシージャを無効とマークし、そのPLSQL_OPTIMIZE_LEVEL
コンパイラ設定を2に変更します。REUSE
SETTINGS
が指定されているため、他のコンパイラ設定の値は変更されません。
hr
.remove_emp
に依存するオブジェクトも無効とマークされます。これらのコンパイラのパラメータは変更されません。
例2
DBMS_UTILITY.INVALIDATE (40775, 'plsql_code_type = native');
object_id
40775がOE
スキーマのタイプ本体leaf_category_typ
を参照するとします。この場合、前述のコールは、このタイプ本体を無効とマークし、そのPLSQL_CODE_TYPE
コンパイラ設定をNATIVE
に変更します。REUSE
SETTINGS
が指定されているため、他のコンパイラ設定の値は現行のセッション環境から取得されます。
本体に依存できるオブジェクトはないため、無効化の伝達はありません。
例3
DBMS_UTILITY.INVALIDATE (40796);
object_id
40796がOE
スキーマのビューoc_orders
を参照するとします。この場合、前述のコールはoc_orders
ビューを無効とマークします。
oe
.oc_orders
に依存するオブジェクトも無効とマークされます。
このファンクションは、ファイル番号とブロック番号を指定したデータ・ブロック・アドレスを作成します。データ・ブロック・アドレスは、データベース内のブロックを識別するために使用する内部構造です。このファンクションは、データ・ブロック・アドレスを含んだ特定の固定表にアクセスするときに役立ちます。
このプロシージャは、指定した名前を解決します。必要に応じてシノニム変換と認可チェックが含まれます。
構文
DBMS_UTILITY.NAME_RESOLVE ( name IN VARCHAR2, context IN NUMBER, schema OUT VARCHAR2, part1 OUT VARCHAR2, part2 OUT VARCHAR2, dblink OUT VARCHAR2, part1_type OUT NUMBER, object_number OUT NUMBER);
パラメータ
表174-30 NAME_RESOLVEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクト名。 これは、[[a.]b.]c[@d]の形式で指定でき、この場合、a、b、cはSQL識別子、dは、dblinkです。dblinkでは、構文チェックは実行されません。dblinkが指定されている場合や名前がdblinkの一部に変換される場合、オブジェクトは解決されませんが、 a、bおよびcは、デリミタ付き識別子の場合があり、グローバリゼーション・サポート(NLS)文字(シングルおよびマルチバイト)を含む場合があります。 |
|
0から9の範囲の整数を指定します。
|
|
オブジェクトのスキーマ。 |
|
名前の最初の部分。この名前のタイプは、 |
|
|
|
このパラメータが |
|
|
|
オブジェクト識別子。 |
このプロシージャは、次のように指定した名前を解析するパーサーをコールします。
a [. b [. c ]][@ dblink ]
二重引用符を削除するか、または引用符がない場合は大文字に変換します。ソートに関するすべてのコメントは無視し、意味的な分析は行いません。不明な値はNULL
のまま残ります。
このファンクションは、オペレーティング・システムと、TWO
TASK
PROTOCOL
バージョンのデータベースを識別する文字列を戻します。たとえば、VAX/VMX-7
.1
.0
.0
が戻ります。
最大長はポート固有の長さです。
このプロシージャは、名前のPL/SQL表を名前のカンマ区切りリストに変換します。PL/SQL表を1..n
に変換してn+1
null
で終了します。2番目のバージョンでは、完全修飾属性名をサポートしています。
構文
DBMS_UTILITY.TABLE_TO_COMMA ( tab IN UNCL_ARRAY, tablen OUT BINARY_INTEGER, list OUT VARCHAR2); DBMS_UTILITY.TABLE_TO_COMMA ( tab IN lname_array, tablen OUT BINARY_INTEGER, list OUT VARCHAR2);
このプロシージャは、無効なデータベース・オブジェクトを有効にします。
構文
DBMS_UTILITY.VALIDATE( object_id NUMBER); DBMS_UTILITY.VALIDATE( owner VARCHAR2, objname VARCHAR2, namespace NUMBER, edition_name := SYS_CONTEXT ('USERENV', 'CURRENT_EDITION'));
パラメータ
表174-34 VALIDATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトを所有するユーザーの名前。 |
|
検証するオブジェクトの名前。 |
|
オブジェクトのネームスペース。
|
|
(注意: 現在使用不可。将来使用するために予約されています。) |
使用上の注意
オブジェクトが、存在しないか、すでに有効か、検証不可能な場合、エラーは発生しません。
検証されるオブジェクトが指定したエディションに実在しない場合、サブプログラムは検証前にオブジェクトが実在するエディションに自動的に切り替わります。つまり、VALIDATEをコールしても、指定したエディションではオブジェクトは実体化されません。
INVALIDATEプロシージャはデータベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。無効化するオブジェクトはそのobject_id
で指定します。無効化の前に、サブプログラムは自動的にオブジェクトが実在するエディションに切り替わります。つまり、INVALIDATE
をコールしても、現行のエディションではオブジェクトは実体化されません。
このファンクションは、リストされた表にロックをかけていて、指定したscn
より前に開始されているすべてのトランザクション(コール元自体のトランザクションを除く)がコミットされるか、またはロールバックされるまで待機します。
構文
DBMS_UTILITY.WAIT_ON_PENDING_DML ( tables IN VARCHAR2, timeout IN BINARY_INTEGER, scn IN OUT NUMBER) RETURN BOOLEAN;
パラメータ
表174-35 WAIT_ON_PENDING_DMLファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
1つ以上の表の名前のカンマ区切りリスト。このリストは、COMMA_TO_TABLEプロシージャに対して有効である必要があり、各項目がNAME_RESOLVEプロシージャに対して有効である必要があります。名前には、列指定子またはDBLINK(データベース・リンク)指定子いずれも使用できず、それぞれの名前がローカル・データベースの既存の表に解決される必要があります。 |
|
待機する最大秒数(すべての表およびトランザクションでの合計)。 |
|
SCNで、トランザクションがこの要求に関連するとみなされるには、このSCNより前に開始されている必要があります。値が |