> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# データベースへのエクスポート

> ABBYY FlexiCapture から ODBC 互換データベースに抽出されたデータを送信します。field mapping、自動テーブル作成、ストアドプロシージャのサポートに対応しています。

データベースへのエクスポートを設定するには、次の手順を実行します。

1. **Document Definition エディター** ウィンドウで、メニュー項目 **Document Definition →** Export Settings... を選択します。
2. Add... をクリックし、**Type** フィールドで Export to ODBC-compatible database を選択します。
3. エクスポートを必須にするかどうかを指定します。
4. 画像をエクスポートするかどうかを指定します。
5. エクスポートするドキュメント (エラーあり、エラーなし、またはその両方) を指定し、**Next>** をクリックします。
6. エクスポート設定を指定し、**Next>** をクリックします。
   * データベースへの接続を確立します。**Connection string** ウィンドウに接続パラメーターを入力するか、Setup... ボタンをクリックして **Data Link Properties** ダイアログで接続パラメーターを設定します。

Microsoft SQL 2016 SP2、2017、または 2019 データベースの場合:

1. Provider - OLE DB Provider for ODBC Drivers
   **注:** "OLE DB Provider for SQL Server" を選択すると、特定のデータ型や長い field を扱う際に問題が発生することがあります。
2. Driver - SQL Server

Access 2003、2007、または 2010 データベースの場合:

1. Provider - OLE DB Provider for ODBC Drivers
2. Driver - Microsoft Access Driver (Driver do Microsoft Access or Microsoft Access-Treiber)
   **注:** FlexiCapture の 64 ビット版から Access データベースに接続するには、Access Database Engine x64 ドライバーの 64 ビット版をインストールする必要があります。

Oracle 10g、11g、または 12c データベースの場合:

1. Provider - Oracle Provider for OLE DB
2. Driver を選択する必要はありません
   詳細は [Oracle データベースへのエクスポート](/ja/flexi-capture/templates/export-bd#export-to-oracle) を参照してください。

PostgreSQL データベースの場合:

1. Provider - OLE DB Provider for ODBC Drivers

2. Driver を選択する必要はありません

エクスポートを実行するコンピューターで、provider と driver を利用できる必要があります。

* ドロップダウンリストからスキーマを選択します。

Microsoft SQL を使用する場合 (エクスポート、キャッシュ、ルール管理) 、スキーマを指定する必要はありません。フィールドを空欄のままにすると、dbo スキーマが自動的に使用されます。

PostgreSQL を使用する場合は、*public* スキーマを指定します。

<Note>
  データベースにテーブルがない場合、dbo スキーマはスキーマ一覧に表示されません。dbo スキーマで作業を続けるには、schema フィールドで空白の値を選択します。
</Note>

* Test Connection ボタンをクリックすると、データベースとの接続を確認できます。
* Create Tables Automatically ボタンをクリックすると、ドキュメントからエクスポートされるデータのための新しいテーブルがデータベース内に自動的に作成されます。ドキュメントの各セクションごとに個別のテーブルが作成されます。自動作成されるテーブルの構造と field の形式は、Document Definition の field セットおよびそのデータ型に対応します。
  **注:** エクスポートの前に、ABBYY FlexiCapture はスキーマ内のすべての objects に関する情報をデータベースに照会します。エクスポートには、objects の少ないスキーマを使用することをお勧めします。そうしないと、テーブルの作成にかなり時間がかかることがあります (最大で数時間) 。
* 既存のデータベーステーブルにデータをエクスポートする必要がある場合は、Set Up Field Mapping... ボタンを使用して、Document Definition の field とデータベーステーブルの field の対応関係を設定します。
* Field Mapping ダイアログで、Document Definition の field values をデータベースのどのテーブルおよび table 列 にエクスポートするかを指定します。

Field Mapping ダイアログの左側には、ドキュメントのセクションと field が表示されます。右側では、それらをデータベース上のテーブルおよび field に対応付ける必要があります。データベースにデータエクスポート用のテーブルがすでにある場合は、Field Mapping ダイアログで、各ドキュメントセクションに対応するデータベーステーブルと、各 ドキュメント field に対応するデータベーステーブルの 列 を選択する必要があります。 (データベーステーブルへの直接エクスポートに加えて、**ストアドプロシージャ** を使用してデータベースにデータを保存することもできます。詳細は [データベースの ストアドプロシージャ を使用したデータエクスポート設定の詳細](/ja/flexi-capture/templates/export-bd#storedprocedures) を参照してください。

データベースにエクスポート用のテーブルがない場合は、Create Tables Automatically ボタンをクリックしてデータベーステーブルを自動的に作成できます。このボタンをクリックすると、プログラムがエクスポートに必要な構造のテーブルを作成します。ドキュメント field はテーブル列に対応付けられます。

field グループ、複数のインスタンスを持つfield、および文書テーブルは、データベース内の個別のテーブルにエクスポートされます。主テーブルと従属テーブルを関連付けるために、主キーと外部キーが使用されます。主テーブルでは、各エントリに主キーが追加されます。従属テーブルでは、各エントリに、主テーブル内の対応するエントリの主キー値を記録する外部キーが追加されます。主キーと外部キーは、必要に応じて自動的に追加されます。キーのエクスポート先となるfieldを指定するだけで済みます。

各ドキュメント fieldに対して、データベーステーブルの列を選択します。

<img src="https://mintcdn.com/abbyy/IFr-A2MDVJd80FDs/images/flexi-capture/Export_BD_Mapping.gif?s=3fc623d800b31c381ce4a5726fc98363" alt="" width="676" height="515" data-path="images/flexi-capture/Export_BD_Mapping.gif" />

あるfieldからデータをエクスポートする先の列がテーブルに存在しない場合、その列は既存のテーブルに自動的に追加できます。これを行うには、ドキュメント fieldと、同様の名前でコメントとして括弧内に (auto) が付いたデータベースfieldとの対応付けをそのまま残しておけば十分です。あるいは、fieldをマウスで選択し、Auto ボタンをクリックすることもできます。

また、Auto ボタンを使用して、Document Definition のセクション名またはテーブル名に似た名前の新しいテーブルをデータベース内に作成することもできます。名前や列見出しが Document Definition のfield名と異なる新しいテーブルを fields 対応設定ダイアログで作成する必要がある場合は、New ボタンを使用して各field用のテーブルを作成します。

データベース内に自動作成されるテーブルの列順を管理するには、Move Up ボタンと Move Down ボタンを使用します。

Format... ボタンを使用して、型付きfieldの保存パラメーターを設定します。たとえば、**Number** 型のfield値の小数点以下の桁数や、**Data** 型のfieldの書式および区切り文字を設定できます。

<Note>
  Time データ型のfieldをエクスポートする場合、データベーステーブルには対応する DateTime 型の列を作成する必要があります。既定では SmallDateTime 型の列が作成されるため、エラーが発生します。
</Note>

7. 画像を保存する必要がある場合 (文書画像および/または **Picture** 型のfield画像) 、画像の保存オプションを指定して **Next>** をクリックします。
   * 画像をデータベースに保存するか、ファイルとして保存するかを指定します。
   * 画像をファイルに保存することを選択した場合は、ファイル名テンプレートを指定し (Edit... をクリック) 、ファイル名が重複した場合に上書きするかどうかを指定します。詳細については、[エクスポートファイル名オプション](/ja/flexi-capture/templates/export-file-naming)を参照してください。
   * 必要に応じて、エクスポート時にマスクするfieldを指定します。

<Note>
  選択したオプションに応じて、Picture 型のfieldの内容と文書画像は、ファイルシステムまたはデータベースにエクスポートできます。
  個別のファイルにエクスポートする場合、画像または画像ファイルの名前とパスは、データベースの対応するfieldに保存されます (これはfieldの対応付けを設定するときに構成します) 。エクスポートフォルダーへのパスとしてネットワークディスク (画像、picture など用) が指定されている場合は、このディスクを使用するすべてのステーションからアクセスできることを確認してください。特別な手順を使用すると、任意のデータベース内のバイナリ画像をファイルに変換できます。
  **注:** 画像を個別のファイルにエクスポートする場合、ファイルへのパスを格納する string の長さが 255 文字を超えることがあり、その結果エラーメッセージが表示されます。この場合は、該当する列の文字数上限を増やす必要があります。
</Note>

8. 画像を保存するオプションを選択した場合は、[ファイル保存形式](/ja/flexi-capture/appendix/saving-file-format)を指定して **Next>** をクリックします。
   * 画像形式、品質、color を選択します。
   * 元の画像の解像度を変更するには、Change resolution to を選択し、一覧から適切な値を選択します。
   * 保存形式として PDF または PDF/A を選択した場合は、[検索可能な PDF ファイルを作成](/ja/flexi-capture/appendix/work-with-pdf)できます。

9. エクスポートプロファイル名を入力し、**Finish** をクリックします。

10. Picture は個別のファイルにエクスポートされます。picture ファイルの名前とパスは、データベースの対応するfieldに保存できます (これはfieldのmapping時に設定できます) 。

11. 画像、picture などの保存先フォルダーへのパスにネットワークディスクが含まれている場合は、そのプロジェクトで作業するすべての Processing Station がこのディスクにアクセスできることを確認してください。

## <a id="storedprocedures" />データベースのストアドプロシージャを使用したデータのエクスポート設定に関する注意点

データをデータベースのテーブルに直接エクスポートするだけでなく、ストアドプロシージャを使用してデータベースに保存することもできます。

**ストアドプロシージャ**は、一連のSQL命令で構成されるデータベースオブジェクトで、一度コンパイルされるとサーバー上に保存されます。ストアドプロシージャを使用すると、数値計算や文字データの処理を実行し、その結果を変数やパラメーターに割り当てられるほか、データベースに対する標準的な操作も実行できます。

データベースのテーブルに直接エクスポートする代わりに、ストアドプロシージャを使用する利点:

* データベース処理の高速化
* 追加の計算を使用できる
* データの整合性を確保できる

*MS SQL用の共通プロシージャのサンプル:*

```
Create procedure Export( @userId as int, @lastName as nvarchar(255), @firstName as nvarchar(255) )
as
begin
  if Exists( Select Id from Users where Id = @userId ) begin
     Update Users set LastName = @lastName, FirstName=@firstName where Id = @userId
  end else begin
     Insert into Users ( Id, LastName, FirstName ) values( @userId, @lastName, @firstName
)
  end
end
```

上記のプロシージャを使用して FlexiCapture からデータベースにデータを送信すると、次の操作が実行されます。

プロシージャの入力に渡される 3 つのパラメーターは、FlexiCapture ドキュメントの field です。

* 識別子 (UserId)
* 名 (FirstName)
* 姓 (LastName)

この識別子を持つエントリがデータベースのテーブル (Users) に存在しない場合は、テーブルに新しいエントリが追加されます。この識別子を持つエントリが存在する場合は、そのエントリ内の名と姓の値が新しい値 (FlexiCapture の field の値) に置き換えられます。

<div id="configuring-export-by-using-stored-procedures">
  ### ストアドプロシージャを使用したエクスポートの設定
</div>

ストアドプロシージャを使用したエクスポートを設定するには、まずデータベースへの接続を確立する必要があります (上記を参照) 。その後、ドキュメント fieldとストアドプロシージャのパラメーターの対応関係を設定するため、Set Up Field Mapping... をクリックします。

Set Up Field Mapping... ダイアログで、テーブルおよびデータベースのストアドプロシージャの一覧から、データの保存に必要なストアドプロシージャを選択します。

データベーステーブルの列に直接エクスポートする場合とは異なり、エクスポート対象として提示されるのはストアドプロシージャのパラメーターです。プロシージャのパラメーターにはそれぞれ型があります。マッピングを行うには、パラメーターの型がDocument Definition fieldのデータ型と一致している必要があります。

ドキュメント fieldとデータベースのストアドプロシージャのパラメーターをマッピングします。

<Note>
  ドキュメントから個々のfieldだけでなく、テーブルや複合field (たとえば、複数のインスタンスを持つfield) もエクスポートする必要がある場合は、子エントリをメインのドキュメントデータエントリに関連付けるための正しい index を設定する必要があります。ストアドプロシージャの戻り値 (@RETURN\_VALUE) または出力パラメーターを、エクスポート可能な主キー (ROW\_INDEX) として指定します。これにより、データのエクスポート時に、プロシージャはデータベーステーブルにデータを書き込み、子エントリのエクスポート用ストアドプロシージャに渡される現在のエントリの識別子を返します。
</Note>

## <a id="export-to-oracle" />Oracle データベースへのエクスポート

データベースにデータをエクスポートする際は、ユーザーで使用しているものと同じ認証方式を使用することをお勧めします。

データをエクスポートするには、次のパラメーターを指定する必要があります。

1. ロール: Connect
2. 権限:
   * テーブルを作成するための CREATE ANY TABLE
   * データをエクスポートするための INSERT ANY TABLE および UNLIMITED TABLESPACE

<Note>
  Field Mapping ダイアログの設定には、権限は必要ありません。
</Note>

<Note>
  Oracle データベースを使用している場合、Document Definitions では 30 文字を超える field 名を使用しないことをお勧めします。30 文字を超える名前は、Oracle データベースへのエクスポート時に切り詰められます。
</Note>
