DBMS_SQL_TRANSLATOR
パッケージには、SQL翻訳プロファイルを作成、構成および使用するためのインタフェースが用意されています。
関連項目: 『Oracle Database移行ガイド』のSQL翻訳フレームワークのアーキテクチャと概要 |
この章では、次の項目について説明します。
セキュリティ・モデル
定数
使用上の注意
例外
例
DBMSL_SQL_TRANSLATOR
は実行者権限のパッケージです。
SQL文またはエラーの翻訳時に、トランスレータ・パッケージ・プロシージャは、SQL文が解析されている対象と同じ現在のユーザーおよび現在のスキーマを使用して呼び出されます。トランスレータ・パッケージの所有者には、現在のユーザーのTRANSLATE SQL
ユーザー権限が付与される必要があります。
さらに、現在のユーザーには、トランスレータ・パッケージ上のEXECUTE
権限が付与される必要があります。
DBMS_SQL_TRANSLATOR
パッケージでは、表150-1「DBMS_SQL_TRANSLATORの定数」に示す定数が使用されます。
表150-1 DBMS_SQL_TRANSLATORの定数
定数 | 値 | タイプ | 説明 |
---|---|---|---|
|
|
|
SQL翻訳プロファイル属性の名前で、この属性は、所有者のスキーマにあるSQL翻訳プロファイルのスキーマ・オブジェクト・タイプに対してエディショニングが後で有効化される場合に、SQL翻訳プロファイルがエディション化オブジェクトか、または非エディション化オブジェクトになることを指定します(「使用上の注意」を参照)。 |
|
|
|
SQL翻訳プロファイル属性の名前で、この属性は、プロファイルが外部SQL構文の翻訳用であるかどうかを示します(「使用上の注意」を参照)。 |
|
|
|
SQL翻訳プロファイル属性の名前で、この属性は、プロファイルでデータベース・アラート・ログ内の翻訳エラーを記録するかどうかを制御します(「使用上の注意」を参照)。 |
|
|
|
SQL翻訳プロファイル属性の名前で、この属性は、SQL文またはエラーの翻訳に失敗した場合にプロファイルで翻訳エラーを生成するかどうかを制御します(「使用上の注意」を参照)。 |
|
|
|
SQL翻訳プロファイル属性の名前で、この属性は、プロファイルで新しいSQL文およびエラーを翻訳するかどうかを制御します(「使用上の注意」を参照)。 |
|
|
|
トレースを制御するSQL翻訳プロファイル属性の名前(「使用上の注意」を参照)。 |
|
|
|
トランスレータ・パッケージを指定するSQL翻訳プロファイル属性の名前(「使用上の注意」を参照)。 |
|
|
|
SQL翻訳プロファイル属性をtrueに設定する値です(「使用上の注意」)。 |
|
|
|
SQL翻訳プロファイル属性をfalseに設定する値です(「使用上の注意」)。 |
プロファイルを変更するサブプログラムには、DDLトランザクション・セマンティクスがあり、起動されるとセッションでオープンになっているトランザクションがコミットされます。
ATTR_EDITIONABLEの定数
デフォルトでは、エディションの有効化がtrueです。
ATTR_FOREIGN_SQL_SYNTAXの定数
デフォルトでは、外部SQL構文がtrueです。
ATTR_LOG_TRANSLATION_ERRORの定数
SQL翻訳プロファイルでログ翻訳が有効化されていて、SQL文またはエラーにカスタム翻訳が見つからない場合は、アラート・ログがデータベースのアラート・ログに書き込まれます。これにより、ユーザーは、プロファイル内のカスタム翻訳にあるすべてのエラーを捕捉できます。
デフォルトでは、ログ翻訳エラーはfalseです。
ATTR_RAISE_TRANSLATION_ERRORの定数
デフォルトでは、翻訳エラーの生成はfalseです。
ATTR_TRANSLATE_NEW_SQLの定数
SQL翻訳プロファイル属性の名前で、この属性は、プロファイルで新しいSQL文およびエラーを翻訳するかどうかを制御します。翻訳する場合に、翻訳パッケージが登録されている場合は、そのパッケージによって、カスタム翻訳でまだ翻訳されていない新しいSQL文またはエラーを翻訳し、またその新しい翻訳をカスタム翻訳として登録します。翻訳しない場合は、どのようなSQL文またはエラーが新規に発生しても翻訳エラーになります。
デフォルトでは、新しいSQL文およびエラーの翻訳はtrueです。
ATTR_TRACE_TRANSLATIONの定数
トレースがSQL翻訳プロファイルで有効な場合、データベース・セッションのプロファイルによって翻訳された任意のSQL文またはエラー、およびその翻訳がデータベース・セッションのトレース・ファイルに書き込まれます。
トレースはデフォルトで無効になっています。
ATTR_TRANSLATORの定数
トランスレータ・パッケージは、次の3つのプロシージャを含むPL/SQLパッケージである必要があります。TRANSLATE_SQLプロシージャおよびTRANSLATE_ERRORプロシージャは、SQL文およびエラーを翻訳するためにコールされます。翻訳プロシージャのパラメータの名前がこれに続く必要があります。
PROCEDURE TRANSLATE_SQL( sql_text IN CLOB, translated_text OUT CLOB); PROCEDURE TRANSLATE_ERROR( error_code IN BINARY_INTEGER, translated_code OUT BINARY_INTEGER, translated_sqlstate OUT VARCHAR2); Parameters: profile_name - profile name sql_text - SQL statement to be translated translated_text - translated SQL statement error_code - Oracle error code translated_code - translated error code translated_sqlstate - translated SQLSTATE
translated_text
、translated_code
またはtranslated_sqlstate
でNULL
が返される場合は、翻訳の必要がないかわりに、元のSQL文、エラー・コードまたはSQLSTATE
を使用することが示されます。
トランスレータ・パッケージの名前は、[schema.]package_name
形式のデータベース・パッケージのネーミング規則に従います。スキーマ名およびパッケージ名が使用される場合、二重引用符で囲まれていないかぎり、デフォルトで大文字に設定されます。たとえば、トランスレータ・パッケージの設定では、translator => 'dbms_tsql_translator'
は、translator => 'Dbms_Tsql_Translator'
およびtranslator => 'DBMS_TSQL_TRANSLATOR'
と同じですが、translator => '"dbms_tsql_translator"'
とは同じではありません。デフォルトのスキーマ名はプロファイルの所有者です。
トランスレータ属性はデフォルトでは設定されません。
ATTR_VALUE_TRUEの定数
SQL翻訳プロファイル属性をtrueに設定する値です。
ATTR_VALUE_FALSEの定数
SQL翻訳プロファイル属性をfalseに設定する値です。
次の表に、DBMS_SQL_TRANSLATOR
パッケージで発生する例外を示します。
表150-2 DBMS_SQL_TRANSLATORで発生する例外
例外 | エラー・コード | 説明 |
---|---|---|
|
|
不正な引数がPL/SQLインタフェースに渡されました |
|
|
ユーザーには、この操作の権限がありません |
|
|
プロファイルが存在しません |
|
|
プロファイルの所有者が存在しません |
|
|
SQL文またはエラー・コードの翻訳が見つかりません |
|
|
プロファイルがすでに存在します |
表150-3 DBMS_SQL_TRANSLATORパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
SQL翻訳プロファイルを作成します。 |
|
SQL翻訳プロファイルのSQL文のカスタム翻訳を登録解除します。 |
|
SQL翻訳プロファイルのOracleエラー・コードおよび |
|
SQL翻訳プロファイルおよびその内容を削除します。 |
|
SQL翻訳プロファイルでOracleエラー・コードのカスタム翻訳を有効または無効にします。 |
|
SQL翻訳プロファイルでSQL文のカスタム翻訳を有効または無効にします。 |
|
SQL翻訳プロファイルの内容をエクスポートします。 |
|
SQL翻訳プロファイルの内容をインポートします。 |
|
SQL翻訳プロファイルのOracleエラー・コードおよび |
|
SQL翻訳プロファイルのSQL文のカスタム翻訳を登録します。 |
|
SQL翻訳プロファイルの属性を設定します。 |
|
SQL翻訳プロファイルのSQL文のハッシュ値を計算します。 |
|
SQL翻訳プロファイルのSQL文のSQL識別子を計算します。 |
|
SQL翻訳プロファイルを使用して、Oracleエラー・コードおよびANSI |
|
SQL翻訳プロファイルを使用して、SQL文を翻訳します。 |
このプロシージャは、SQL翻訳プロファイルを作成します。
使用上の注意
SQL翻訳プロファイルは、SQL翻訳プロファイル・ネームスペースにあるデータベース・スキーマ・オブジェクトです。その名前は、[schema.]name
形式のデータベース・オブジェクトのネーミング規則に従います。スキーマ名およびプロファイル名がDBMS_SQL_TRANSLATOR
パッケージで使用される場合、二重引用符で囲まれていないかぎり大文字になります。たとえば、翻訳プロファイルprofile_name => 'tsql_application'
は、profile_name => 'Tsql_Application'
およびprofile_name => 'TSQL_APPLICATION'
と同じですが、profile_name => '"tsql_application"'
とは同じではありません。
SQL翻訳プロファイルは、エディション化可能なオブジェクト・タイプです。
SQL翻訳プロファイルは、マルチテナント・コンテナ・データベース(CDB)の共通オブジェクトとして作成できません。
SQL翻訳プロファイルを破棄するには、DROP_PROFILEプロシージャを使用します。
このプロシージャは、SQL翻訳プロファイルのOracleエラー・コードおよびSQLSTATE
の翻訳を登録解除します。
構文
DBMS_SQL_TRANSLATOR.DEREGISTER_ERROR_TRANSLATION ( profile_name IN VARCHAR2, error_code IN PLS_INTEGER);
このプロシージャは、SQL翻訳プロファイルでOracleエラー・コードのカスタム翻訳を有効または無効にします。
構文
DBMS_SQL_TRANSLATOR.ENABLE_ERROR_TRANSLATION ( profile_name IN VARCHAR2, sql_text IN CLOB, enable IN BOOLEAN DEFAULT TRUE);
このプロシージャは、SQL翻訳プロファイルでSQL文のカスタム翻訳を有効または無効にします。
構文
DBMS_SQL_TRANSLATOR.ENABLE_SQL_TRANSLATION ( profile_name IN VARCHAR2, sql_text IN CLOB, enable IN BOOLEAN DEFAULT TRUE);
このプロシージャは、SQL翻訳プロファイルの内容をエクスポートします。
使用上の注意
SQL翻訳プロファイルの内容は、次のようにXML形式でエクスポートされます。プロファイル名はエクスポートされないことに注意してください。
SQLTranslationProfile Translator="translator package name" ForeignSQLSyntax="TRUE|FALSE" TranslateNewSQL="TRUE|FALSE" RaiseTranslationError="TRUE|FALSE" LogTranslationError="TRUE|FALSE" TraceTranslation="TRUE|FALSE" Editionable="TRUE|FALSE"> <SQLTranslations> <SQLTranslation Enabled="TRUE|FALSE"> <SQLText>original SQL text</SQLText> <TranslatedText>translated SQL text</TranslatedText> </SQLTranslation> ... </SQLTranslations> <ErrorTranslations> <ErrorTranslation Enabled="TRUE|FALSE"> <ErrorCode>Oracle error code</ErrorCode> <TranslatedCode>translated error code</TranslatedCode> <TranslatedSQLSTATE>translated SQLSTATE</TranslatedSQLSTATE> </ErrorTranslation> ... </ErrorTranslations> </SQLTranslationProfile>
内容をSQL翻訳プロファイルにインポートするには、IMPORT_PROFILEプロシージャを使用します。
このプロシージャは、SQL翻訳プロファイルの内容をインポートします。
使用上の注意
SQL翻訳プロファイルの内容は、EXPORT_PROFILEプロシージャで使用されるXML形式である必要があります。すべての要素および属性はオプションです。
プロファイルが存在しない場合は作成されます。プロファイルが存在する場合、その内容によって既存の属性、トランスレータ・パッケージ、SQLまたはエラーの翻訳登録が上書きされます。
内容をSQL翻訳プロファイルにエクスポートするには、EXPORT_PROFILEプロシージャを使用します。
このプロシージャは、SQL翻訳プロファイルのOracleエラー・コードおよびSQLSTATE
のカスタム翻訳を登録します。
構文
DBMS_SQL_TRANSLATOR.REGISTER_ERROR_TRANSLATION ( profile_name IN VARCHAR2, error_code IN PLS_INTEGER, translated_code IN PLS_INTEGER DEFAULT NULL, translated_sqlstate IN VARCHAR2 DEFAULT NULL, enable IN BOOLEAN DEFAULT TRUE);
使用上の注意
Oracle Databaseは、翻訳プロファイルを使用してOracleエラー・コードを翻訳するときに、まず登録されたカスタム翻訳を検索し、一致が見つからなかった場合にのみトランスレータ・パッケージを起動します。
プロファイルに翻訳が登録されている場合、翻訳を無効にできます。Oracle Databaseは、無効になっている翻訳を検索しません。
エラー・コードおよびSQLSTATE
の古い翻訳がある場合、新しい翻訳に置き換えられます。
翻訳を登録解除するには、DEREGISTER_ERROR_TRANSLATIONプロシージャを使用します。
このプロシージャは、SQL翻訳プロファイルのSQL文のカスタム翻訳を登録します。
構文
DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION ( profile_name IN VARCHAR2, sql_text IN CLOB, translated_text IN CLOB DEFAULT NULL, enable IN BOOLEAN DEFAULT TRUE);
使用上の注意
Oracle Databaseは、翻訳プロファイルを使用して文を翻訳するときに、まず登録されたカスタム翻訳を検索し、一致が見つからなかった場合にのみトランスレータ・パッケージを起動します。
プロファイルに翻訳が登録されている場合、翻訳を無効にできます。Oracle Databaseは、無効になっている翻訳を検索しません。
translated_text
がNULL
の場合、翻訳の必要はなく、元の文が使用されます。
SQL文の古い翻訳がある場合、新しい翻訳に置き換えられます。
翻訳を登録解除するには、DEREGISTER_SQL_TRANSLATIONプロシージャを使用します。
このプロシージャは、SQL翻訳プロファイルの属性を設定します。
構文
DBMS_SQL_TRANSLATOR.SET_ATTRIBUTE ( profile_name IN VARCHAR2, attribute_name IN VARCHAR2, attribute_value IN VARCHAR2;)
このプロシージャは、セッションのSQL翻訳プロファイルを使用してOracleエラー・コードとANSI SQLSTATEを翻訳します。
構文
DBMS_SQL_TRANSLATOR.TRANSLATE_ERROR ( error_code IN PLS_INTEGER, translated_code OUT PLS_INTEGER, translated_sqlstate OUT NOCOPY VARCHAR2);