154 DBMS_SQL_TRANSLATOR

DBMS_SQL_TRANSLATORパッケージには、SQL翻訳プロファイルを作成、構成および使用するためのインタフェースが用意されています。

この章のトピックは、次のとおりです:

参照:

『Oracle Database移行ガイド』のSQL翻訳フレームワークのアーキテクチャと概要

154.1 DBMS_SQL_TRANSLATORのセキュリティ・モデル

DBMS_SQL_TRANSLATORは実行者権限のパッケージです。

SQL文またはエラーの翻訳時に、トランスレータ・パッケージ・プロシージャは、SQL文が解析されている対象と同じ現在のユーザーおよび現在のスキーマを使用して呼び出されます。トランスレータ・パッケージの所有者には、現在のユーザーのTRANSLATE SQLユーザー権限が付与される必要があります。

さらに、現在のユーザーには、トランスレータ・パッケージ上のEXECUTE権限が付与される必要があります。

154.2 DBMS_SQL_TRANSLATORの定数

DBMS_SQL_TRANSLATORは、パラメータ値の指定時に使用するいくつかの定数を定義します。

これらを、次の表に示します。

表154-1 DBMS_SQL_TRANSLATORの定数

定数 タイプ 説明

ATTR_EDITIONABLE

'EDITIONABLE'

VARCHAR2(30)

SQL翻訳プロファイル属性の名前で、この属性は、所有者のスキーマにあるSQL翻訳プロファイルのスキーマ・オブジェクト・タイプに対してエディショニングが後で有効化される場合に、SQL翻訳プロファイルがエディション化オブジェクトか、または非エディション化オブジェクトになることを指定します(「使用上の注意」を参照)。

ATTR_FOREIGN_SQL_SYNTAX

'FOREIGN_SQL_SYNTAX'

VARCHAR2(30)

SQL翻訳プロファイル属性の名前で、この属性は、プロファイルが外部SQL構文の翻訳用であるかどうかを示します(「使用上の注意」を参照)。

ATTR_LOG_TRANSLATION_ERROR

'TRANSLATION_ERROR'

VARCHAR2(30)

SQL翻訳プロファイル属性の名前で、この属性は、プロファイルでデータベース・アラート・ログ内の翻訳エラーを記録するかどうかを制御します(「使用上の注意」を参照)。

ATTR_RAISE_TRANSLATION_ERROR

'TRANSLATION_ERROR '

VARCHAR2(30)

SQL翻訳プロファイル属性の名前で、この属性は、SQL文またはエラーの翻訳に失敗した場合にプロファイルで翻訳エラーを生成するかどうかを制御します(「使用上の注意」を参照)。

ATTR_TRANSLATE_NEW_SQL

'TRANSLATE_NEW_SQL'

VARCHAR2(30)

SQL翻訳プロファイル属性の名前で、この属性は、プロファイルで新しいSQL文およびエラーを翻訳するかどうかを制御します(「使用上の注意」を参照)。

ATTR_TRACE_TRANSLATION

'TRACE_TRANSLATION'

VARCHAR2(30)

トレースを制御するSQL翻訳プロファイル属性の名前(「使用上の注意」を参照)。

ATTR_TRANSLATOR

'TRANSLATOR'

VARCHAR2(30)

トランスレータ・パッケージを指定するSQL翻訳プロファイル属性の名前(「使用上の注意」を参照)。

ATTR_VALUE_TRUE

'TRUE'

VARCHAR2(30)

SQL翻訳プロファイル属性をtrueに設定する値です(「使用上の注意」)。

ATTR_VALUE_FALSE

'FALSE'

VARCHAR2(30)

SQL翻訳プロファイル属性をfalseに設定する値です(「使用上の注意」)。

154.3 DBMS_SQL_TRANSLATORの使用上の注意

プロファイルを変更するサブプログラムには、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_texttranslated_codeまたはtranslated_sqlstateNULLが返される場合は、翻訳の必要がないかわりに、元の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に設定する値です。

154.4 DBMS_SQL_TRANSLATORの例外

次の表に、DBMS_SQL_TRANSLATORパッケージで発生する例外を示します。

表154-2 DBMS_SQL_TRANSLATORで発生する例外

例外 エラー・コード 説明

BAD_ARGUMENT

29261

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

1031

ユーザーには、この操作の権限がありません

NO_SUCH_PROFILE

24252

プロファイルが存在しません

NO_SUCH_USER

1918

プロファイルの所有者が存在しません

NO_TRANSLATION_FOUND

24253

SQL文またはエラー・コードの翻訳が見つかりません

PROFILE_EXISTS

955

プロファイルがすでに存在します

154.5 DBMS_SQL_TRANSLATORの例

これは、DBMS_SQL_TRANSLATORを使用した基本SQL翻訳の例です。

基本SQL翻訳

BEGIN
  DBMS_SQL_TRANSLATOR.CREATE_PROFILE(
    profile_name     => ' tsql_application');
  DBMS_SQL_TRANSLATOR.SET_ATTRIBUTE(
    profile_name     =>  'tsql_application', 
    attribute_name   =>  DBMS_SQL_TRANSLATOR.ATTR_TRANSLATOR, 
    attribute_value  =>  'migration_repo.sybase_tsql_translator');
END;

154.6 DBMS_SQL_TRANSLATORサブプログラムの要約

この表は、DBMS_SQL_TRANSLATORサブプログラムを示し、簡単に説明しています。

表154-3 DBMS_SQL_TRANSLATORパッケージのサブプログラム

サブプログラム 説明

CREATE_PROFILEプロシージャ

SQL翻訳プロファイルを作成します。

DEREGISTER_SQL_TRANSLATIONプロシージャ

SQL翻訳プロファイルのSQL文のカスタム翻訳を登録解除します。

DEREGISTER_ERROR_TRANSLATIONプロシージャ

SQL翻訳プロファイルのOracleエラー・コードおよびSQLSTATEの翻訳を登録解除します。

DROP_PROFILEプロシージャ

SQL翻訳プロファイルおよびその内容を削除します。

ENABLE_ERROR_TRANSLATIONプロシージャ

SQL翻訳プロファイルでOracleエラー・コードのカスタム翻訳を有効または無効にします。

ENABLE_SQL_TRANSLATIONプロシージャ

SQL翻訳プロファイルでSQL文のカスタム翻訳を有効または無効にします。

EXPORT_PROFILEプロシージャ

SQL翻訳プロファイルの内容をエクスポートします。

IMPORT_PROFILEプロシージャ

SQL翻訳プロファイルの内容をインポートします。

REGISTER_ERROR_TRANSLATIONプロシージャ

SQL翻訳プロファイルのOracleエラー・コードおよびSQLSTATEのカスタム翻訳を登録します。

REGISTER_SQL_TRANSLATIONプロシージャ

SQL翻訳プロファイルのSQL文のカスタム翻訳を登録します。

SET_ATTRIBUTEプロシージャ

SQL翻訳プロファイルの属性を設定します。

SQL_HASHファンクション

SQL翻訳プロファイルのSQL文のハッシュ値を計算します。

SQL_IDファンクション

SQL翻訳プロファイルのSQL文のSQL識別子を計算します。

TRANSLATE_ERRORプロシージャ

SQL翻訳プロファイルを使用して、Oracleエラー・コードおよびANSI SQLSTATEを翻訳します。

TRANSLATE_SQLプロシージャ

SQL翻訳プロファイルを使用して、SQL文を翻訳します。

154.6.1 CREATE_PROFILEプロシージャ

このプロシージャは、SQL翻訳プロファイルを作成します。

構文

DBMS_SQL_TRANSLATOR.CREATE_PROFILE (
   profile_name    IN  VARCHAR2);

パラメータ

表154-4 CREATE_PROFILEプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

例外

表154-5 CREATE_PROFILEプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

PROFILE_EXISTS

プロファイルがすでに存在します

使用上の注意

  • 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プロシージャを使用します。

BEGIN
  DBMS_SQL_TRANSLATOR.CREATE_PROFILE(profile_name => 'tsql_application');
END;

154.6.2 DEREGISTER_SQL_TRANSLATIONプロシージャ

このプロシージャは、SQL翻訳プロファイルのSQL文のカスタム翻訳を登録解除します。

構文

DBMS_SQL_TRANSLATOR.DEREGISTER_SQL_TRANSLATION (
   profile_name      IN  VARCHAR2,
   sql_text          IN  CLOB);

パラメータ

表154-6 DEREGISTER_SQL_TRANSLATIONプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

sql_text

SQL文

例外

表154-7 DEREGISTER_SQL_TRANSLATIONプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

PROFILE_EXISTS

プロファイルがすでに存在します

BEGIN
    DBMS_SQL_TRANSLATOR.DEREGISTER_SQL_TRANSLATION(
      profile_name => 'tsql_application',
      sql_text     => 'select top 5 * from emp');
END;

154.6.3 DEREGISTER_ERROR_TRANSLATIONプロシージャ

このプロシージャは、SQL翻訳プロファイルのOracleエラー・コードおよびSQLSTATEの翻訳を登録解除します。

構文

DBMS_SQL_TRANSLATOR.DEREGISTER_ERROR_TRANSLATION (
   profile_name          IN   VARCHAR2,
   error_code            IN   PLS_INTEGER);

パラメータ

表154-8 DEREGISTER_ERROR_TRANSLATIONプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

error_code

Oracleエラー・コード

例外

表154-9 DEREGISTER_ERROR_TRANSLATIONプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

BEGIN
   DBMS_SQL_TRANSLATOR.DEREGISTER_ERROR_TRANSLATION(
      profile_name    => 'tsql_application',
      error_code      => 1);
END;

154.6.4 DROP_PROFILEプロシージャ

このプロシージャは、SQL翻訳プロファイルおよびその内容を削除します。

構文

DBMS_SQL_TRANSLATOR.DROP_PROFILE (
   profile_name     IN    VARCHAR2);

パラメータ

表154-10 DROP_PROFILEプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

例外

表154-11 DROP_PROFILEプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

BEGIN
    DBMS_SQL_TRANSLATOR.DROP_PROFILE(
      profile_name    =>  'tsql_application');
END;

154.6.5 ENABLE_ERROR_TRANSLATIONプロシージャ

このプロシージャは、SQL翻訳プロファイルでOracleエラー・コードのカスタム翻訳を有効または無効にします。

構文

DBMS_SQL_TRANSLATOR.ENABLE_ERROR_TRANSLATION (
   profile_name      IN  VARCHAR2,
   sql_text          IN CLOB,
   enable            IN BOOLEAN DEFAULT TRUE);

パラメータ

表154-12 ENABLE_ERROR_TRANSLATIONプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

sql_text

SQL文

enable

翻訳を有効または無効にします

例外

表154-13 ENABLE_ERROR_TRANSLATIONプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

BEGIN
  DBMS_SQL_TRANSLATOR.ENABLE_ERROR_TRANSLATION( 
      profile_name => 'tsql_application',
      sql_text     => 'SELECT TOP 5 * FROM emp'
      enable       => TRUE);
END;

154.6.6 ENABLE_SQL_TRANSLATIONプロシージャ

このプロシージャは、SQL翻訳プロファイルでSQL文のカスタム翻訳を有効または無効にします。

構文

DBMS_SQL_TRANSLATOR.ENABLE_SQL_TRANSLATION (
   profile_name      IN    VARCHAR2,
   sql_text          IN    CLOB,
   enable            IN BOOLEAN DEFAULT TRUE);

パラメータ

表154-14 ENABLE_SQL_TRANSLATIONプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

sql_text

SQL文

enable

翻訳を有効または無効にします

例外

表154-15 ENABLE_SQL_TRANSLATIONプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

BEGIN
  DBMS_SQL_TRANSLATOR.ENABLE_SQL_TRANSLATION(
      profile_name => 'tsql_application',
      sql_text     => 'select top 5 * from emp',
      enable       => TRUE);
END;

154.6.7 EXPORT_PROFILEプロシージャ

このプロシージャは、SQL翻訳プロファイルの内容をエクスポートします。

構文

DBMS_SQL_TRANSLATOR.EXPORT_PROFILE (
   profile_name     IN          VARCHAR2,
   content          OUT NOCOPY  CLOB);

パラメータ

表154-16 EXPORT_PROFILEプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

content

プロファイルの内容

例外

表154-17 EXPORT_PROFILEプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

使用上の注意

  • 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プロシージャを使用します。

DECLARE
  content CLOB;
BEGIN
    DBMS_SQL_TRANSLATOR.EXPORT_PROFILE(
      profile_name    =>  'tsql_application',
      content         =>  content);
END;

154.6.8 IMPORT_PROFILEプロシージャ

このプロシージャは、SQL翻訳プロファイルの内容をインポートします。

構文

DBMS_SQL_TRANSLATOR.IMPORT_PROFILE (
   profile_name       IN   VARCHAR2,
   content            IN   CLOB);

パラメータ

表154-18 IMPORT_PROFILEプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

content

プロファイルの内容

例外

表154-19 IMPORT_PROFILEプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

使用上の注意

  • SQL翻訳プロファイルの内容は、EXPORT_PROFILEプロシージャで使用されるXML形式である必要があります。すべての要素および属性はオプションです。

  • プロファイルが存在しない場合は作成されます。プロファイルが存在する場合、その内容によって既存の属性、トランスレータ・パッケージ、SQLまたはエラーの翻訳登録が上書きされます。

  • 内容をSQL翻訳プロファイルにエクスポートするには、EXPORT_PROFILEプロシージャを使用します。

DECLARE
  content CLOB;
BEGIN
    DBMS_SQL_TRANSLATOR.IMPORT_PROFILE(
      profile_name    =>  'tsql_application',
      content         =>  content);
END;

154.6.9 REGISTER_ERROR_TRANSLATIONプロシージャ

このプロシージャは、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);

パラメータ

表154-20 REGISTER_ERROR_TRANSLATIONプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

error_code

Oracleエラー・コード

translated_code

翻訳されたエラー・コード

translated_sqlstate

翻訳されたSQLSTATE

enable

翻訳を有効または無効にします

例外

表154-21 REGISTER_ERROR_TRANSLATIONプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

使用上の注意

  • Oracle Databaseは、翻訳プロファイルを使用してOracleエラー・コードを翻訳するときに、まず登録されたカスタム翻訳を検索し、一致が見つからなかった場合にのみトランスレータ・パッケージを起動します。

  • プロファイルに翻訳が登録されている場合、翻訳を無効にできます。Oracle Databaseは、無効になっている翻訳を検索しません。

  • エラー・コードおよびSQLSTATEの古い翻訳がある場合、新しい翻訳に置き換えられます。

  • 翻訳を登録解除するには、DEREGISTER_ERROR_TRANSLATIONプロシージャを使用します。

BEGIN
      DBMS_SQL_TRANSLATOR.REGISTER_ERROR_TRANSLATION(
      profile_name    => 'tsql_application',
      error_code      => 1,
      translated_code => 2601);
END;

154.6.10 REGISTER_SQL_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);

パラメータ

表154-22 REGISTER_SQL_TRANSLATIONプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

sql_text

SQL文

translated_text

翻訳されたSQL文

enable

翻訳を有効または無効にします

例外

表154-23 REGISTER_SQL_TRANSLATIONプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

使用上の注意

  • Oracle Databaseは、翻訳プロファイルを使用して文を翻訳するときに、まず登録されたカスタム翻訳を検索し、一致が見つからなかった場合にのみトランスレータ・パッケージを起動します。

  • プロファイルに翻訳が登録されている場合、翻訳を無効にできます。Oracle Databaseは、無効になっている翻訳を検索しません。

  • translated_textNULLの場合、翻訳の必要はなく、元の文が使用されます。

  • SQL文の古い翻訳がある場合、新しい翻訳に置き換えられます。

  • 翻訳を登録解除するには、DEREGISTER_SQL_TRANSLATIONプロシージャを使用します。

BEGIN
    DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION(
      profile_name    => 'tsql_application',
      sql_text        => 'select top 5 * from emp',
      translated_text => 'SELECT * FROM emp WHERE rownum <= :SYS_N_001');
END;

154.6.11 SET_ATTRIBUTEプロシージャ

このプロシージャは、SQL翻訳プロファイルの属性を設定します。

構文

DBMS_SQL_TRANSLATOR.SET_ATTRIBUTE (
   profile_name      IN  VARCHAR2,
   attribute_name    IN  VARCHAR2,
   attribute_value   IN  VARCHAR2;)

パラメータ

表154-24 SET_ATTRIBUTEプロシージャのパラメータ

パラメータ 説明

profile_name

プロファイルの名前

attribute_name

属性の名前

attribute_value

属性の値

例外

表154-25 SET_ATTRIBUTEプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

使用上の注意

「定数」を参照してください

154.6.12 SQL_HASHファンクション

このプロシージャは、セッションのSQL翻訳プロファイルでSQL文のハッシュ値を計算します。

構文

DBMS_SQL_TRANSLATOR.SQL_HASH (
   sql_text         IN    CLOB) 
RETURN NUMBER DETERMINISTIC;

パラメータ

表154-26 SQL_HASHファンクションのパラメータ

パラメータ 説明

sql_text

SQL文

戻り値

SQL翻訳プロファイルのSQL文のハッシュ値を戻します。

例外

表154-27 SQL_HASHファンクションの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

DECLARE
  sqltext CLOB;
  txltext CLOB;
  sqlhash NUMBER;
BEGIN
  sqltext  :=  'SELECT TOP 1 * FROM emp';
  sqlhash  :=  DBMS_SQL_TRANSLATOR.SQL_HASH (sqltext);
  SELECT translated_text INTO txltext
    FROM user_sql_translations
    WHERE sql_hash = sqlhash 
    AND DBMS_LOB.COMPARE (sql_text, sqltext) = 0;
END;

154.6.13 SQL_IDファンクション

このプロシージャは、SQL翻訳プロファイルのSQL文のSQL識別子を計算します。

構文

DBMS_SQL_TRANSLATOR.SQL_ID (
   sql_text         IN    CLOB) 
RETURN VARCHAR2 DETERMINISTIC;

パラメータ

表154-28 SQL_IDファンクションのパラメータ

パラメータ 説明

sql_text

SQL文

戻り値

SQL翻訳プロファイルのSQL文のSQL IDを戻します。

例外

表154-29 SQL_IDファンクションの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

DECLARE
  sqltext CLOB;
  sqlid   VARCHAR2(13);
BEGIN
  sqltext :=  'SELECT TOP 1 * FROM emp';
  sqlid   :=  DBMS_SQL_TRANSLATOR.SQL_ID (sqltext);
END;

154.6.14 TRANSLATE_ERRORプロシージャ

このプロシージャは、セッションのSQL翻訳プロファイルを使用してOracleエラー・コードとANSI SQLSTATEを翻訳します。

構文

DBMS_SQL_TRANSLATOR.TRANSLATE_ERROR (
   error_code           IN           PLS_INTEGER,
   translated_code      OUT          PLS_INTEGER,
   translated_sqlstate  OUT NOCOPY   VARCHAR2);

パラメータ

表154-30 TRANSLATE_ERRORプロシージャのパラメータ

パラメータ 説明

error_code

Oracleエラー・コード

translated_code

翻訳されたエラー・コード

translated_sqlstate

翻訳されたSQLSTATE

例外

表154-31 TRANSLATE_ERRORプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

NO_TRANSLATION_FOUND

SQL文またはエラー・コードの翻訳が見つかりません

DECLARE
  translated_code      BINARY_INTEGER;
  translated_sqlstate  VARCHAR2(5);
BEGIN
    DBMS_SQL_TRANSLATOR.TRANSLATE_ERROR(
      error_code           => 1,
      translated_code      => translated_code,
      translated_sqlstate  => translated_sqlstate);
END;

154.6.15 TRANSLATE_SQLプロシージャ

このプロシージャは、SQL翻訳プロファイルを使用して、SQL文を翻訳します。

構文

DBMS_SQL_TRANSLATOR.TRANSLATE_SQL (
   sql_text          IN           CLOB,
   translated_text   OUT  NOCOPY  CLOB);

パラメータ

表154-32 TRANSLATE_SQLプロシージャのパラメータ

パラメータ 説明

sql_text

SQL文

translated_text

翻訳されたSQL文

例外

表154-33 TRANSLATE_SQLプロシージャの例外

例外 説明

BAD_ARGUMENT

不正な引数がPL/SQLインタフェースに渡されました

INSUFFICIENT_PRIVILEGE

ユーザーには、この操作の権限がありません

NO_SUCH_USER

プロファイルの所有者が存在しません

NO_SUCH_PROFILE

プロファイルが存在しません

ALTER SESSION SET SQL_TRANSLATION_PROFILE =  tsql_application;
 
DECLARE
  translated_text CLOB;
BEGIN
    DBMS_SQL_TRANSLATOR.TRANSLATE_SQL(
      sql_text         => 'select top 5 * from emp',
      translated_text  => translated_text);
END;