UiPath Documentation
activities
latest
false
開発者向けのアクティビティ
重要 :
このコンテンツの一部は機械翻訳によって処理されており、完全な翻訳を保証するものではありません。 新しいコンテンツの翻訳は、およそ 1 ~ 2 週間で公開されます。

ベスト プラクティス

データベース アクティビティのベスト プラクティス。SQL Server、Oracle、MySQL などのデータベースの接続文字列、ストアド プロシージャ、トラブルシューティングについて説明しています。

OracleRefCursor でストアド プロシージャを使用する​

Oracle でストアド プロシージャを使用する場合は、REF CURSOR が Oracle.ManagedDataAccess.Types.OracleRefCursor 変数に正しくバインドされていることを確認してください。

そのためには、パラメーターの数とその型が、[クエリを実行] アクティビティの [パラメーター] プロパティで設定したものと一致していることを確認する必要があります。

[ コードを呼び出し ] アクティビティを使用してカーソルの内容を取得するか、入力パラメーターとして別のデータベース クエリに渡すことができます。データ テーブルに変換する [コードを呼び出し] の例を次に示します。

Oracle.ManagedDataAccess.Client.OracleDataReader reader2 = myRefCursor.GetDataReader();
                dt = new DataTable();
                dt.Load(reader2);
Oracle.ManagedDataAccess.Client.OracleDataReader reader2 = myRefCursor.GetDataReader();
                dt = new DataTable();
                dt.Load(reader2);

使い終わったカーソルは破棄する必要があります。これは、[コードを呼び出し] アクティビティ (myRefCursor.Dispose)、システム アクティビティ パッケージの [メソッドを呼び出し] アクティビティ、または実行する SQL コマンドを使用して実行できます。

パラメーターを使用してストアド プロシージャを実行する​

[ クエリを実行 ] アクティビティと [ コマンドを実行 ] アクティビティでは、プレーンな SQL ステートメントの代わりにストアド プロシージャを呼び出すことができます。プロシージャが結果セットを返す場合は [ クエリを実行 ] を使用し、結果セットが返されない場合は [ コマンドを実行 ] を使用します。

ストアド プロシージャを呼び出すには、以下の手順を実行します。

  1. [ コマンドの種類 ] プロパティを [ ストアド プロシージャ] に設定します。
  2. [ SQL ] フィールドに、 EXEC または CALL のラッパーを付けずにプロシージャ名を入力します。
  3. 各プロシージャ パラメーターに対して 1 つのエントリを [ パラメーター] コレクションに追加します。

各 パラメーター エントリには次の属性があります。

  • 名前。
  • 方向 (In、 Out、または In/Out)。
  • 型。
  • 値。

Out 値と In/Out 値は呼び出し後に読み戻されます。パラメーター名と順序の解釈方法はデータベース プロバイダーによって異なるため、次のセクションではデータベースごとに異なるガイダンスを提供します。

データベースプロバイダー呼び出し方法パラメーターのバインド
Microsoft SQL ServerMicrosoft.Data.SqlClientコマンドの種類 = ストアド プロシージャ、 SQL = プロシージャ名名前で (@name);順序は関係ありません
OracleOracle.ManagedDataAccess.Clientコマンドの種類 = ストアド プロシージャ、 SQL = プロシージャ名ポジション別プロシージャの宣言された順序でパラメーターを追加します
MySQL / MariaDBオープン データベース接続 (ODBC)コマンドの種類 = テキスト、 SQL = CALL procedure_name(?, ?)プレースホルダーの位置?
PostgreSQLODBCコマンドの種類 = テキスト、 SELECT * FROM function_name(?) 、または CALL procedure_name(?)プレースホルダーの位置?
SQLiteMicrosoft.Data.Sqlite該当なしSQLiteにはストアドプロシージャがありません

Microsoft SQL Server​

SQL Server はパラメーターを名前でバインドするので、 Parameters のエントリ名はプロシージャの @プレフィックス パラメーターと一致する必要があり、その順序は処理に関係しません。出力パラメーターは、[入力方向] を [ Out] に設定すると返されます。

CREATE PROCEDURE dbo.usp_CountCustomers @Country NVARCHAR(5), @Total INT OUTPUT AS
BEGIN
    SET NOCOUNT ON;
    SELECT @Total = COUNT(*) FROM dbo.customer WHERE country = @Country;
END;
CREATE PROCEDURE dbo.usp_CountCustomers @Country NVARCHAR(5), @Total INT OUTPUT AS
BEGIN
    SET NOCOUNT ON;
    SELECT @Total = COUNT(*) FROM dbo.customer WHERE country = @Country;
END;

[コマンド を実行 ] を [ コマンドの種類 ] = [ストアド プロシージャ ] で [SQL = dbo.usp_CountCustomers] に設定し、次のパラメーターを追加します。

名前方向入力値 (Value)
@CountryInStringUS
@TotalOutInt32—

実行後、 @Total がカウントを保持します。行を返すプロシージャの場合は、代わりに [クエリを実行] を使用します。結果は [データ テーブル ] の出力で確認できます。

Oracle​

Oracleでは、パラメータは名前ではなく位置でバインドされるため、プロシージャが宣言した順序と同じ順序で パラメータ ・エントリを追加する必要があります。プロシージャは、OUT SYS_REFCURSOR パラメーターを使用して結果セットを返します。そのエントリにOracleRefCursorの種類とOut方向を指定して宣言すると、行は [クエリを実行] の [データ テーブル] 出力に返されます。「 OracleRefCursor でストアド プロシージャを使用する」もご覧ください。

CREATE OR REPLACE PROCEDURE get_customers(p_country IN VARCHAR2, p_cursor OUT SYS_REFCURSOR) AS
BEGIN
    OPEN p_cursor FOR SELECT id, name FROM customer WHERE country = p_country ORDER BY id;
END;
CREATE OR REPLACE PROCEDURE get_customers(p_country IN VARCHAR2, p_cursor OUT SYS_REFCURSOR) AS
BEGIN
    OPEN p_cursor FOR SELECT id, name FROM customer WHERE country = p_country ORDER BY id;
END;

[ クエリを実行] を [ コマンドの種類 ] = [ストアド プロシージャ ] で [ SQL = get_customers] に設定し、パラメーターを宣言の順に追加します。

名前方向入力値 (Value)
p_countryInStringUS
p_cursorOutOracleRefCursor—
警告:

Oracleは、パラメータを位置でバインドします。パラメーター エントリがプロシージャで宣言された順序でない場合、値が誤ったパラメーターに割り当てられ、呼び出しは失敗するか、空の出力が返されます。

MySQL と MariaDB​

ODBC を介して MySQL または MariaDB に接続する場合は、Text コマンドの種類と、位置?プレースホルダーを使用する CALL ステートメントを使用してプロシージャを呼び出します。プロシージャ内のSELECTは、[クエリを実行] の [データ テーブル] 出力に返されます。

CREATE PROCEDURE list_customers(IN p_country VARCHAR(5))
BEGIN
    SELECT id, name FROM customer WHERE country = p_country ORDER BY id;
END
CREATE PROCEDURE list_customers(IN p_country VARCHAR(5))
BEGIN
    SELECT id, name FROM customer WHERE country = p_country ORDER BY id;
END

[ クエリを実行] を [ コマンドの種類 ] = [ テキスト ]、[ SQL クエリ ] = [ CALL list_customers(?)] で構成し、プレースホルダーに In パラメーターを 1 つ追加します。

注:

OUT パラメーターを持つ MySQL プロシージャの場合は、返された結果セットから値を読み取るか、CALL procedure_name(?, @out); SELECT @out; パターンを使用します。OUT値が ODBC を介してパラメーター エントリにマップされるとは限らないためです。

PostgreSQL​

PostgreSQLは、 で呼び出される関数と、 で呼び出されるプロシージャの2種類のルーチン SELECT公開 CALL。ODBC 経由で接続する場合は、 テキスト コマンドの種類 と、位置プレースホルダー ? プレースホルダーを使用します。行を返す関数には 、[クエリを実行 ] を使用します。

CREATE FUNCTION get_customers_by_country(p_country text)
RETURNS TABLE(id int, name text) LANGUAGE sql AS $$
    SELECT id, name FROM customer WHERE country = p_country ORDER BY id;
$$;
CREATE FUNCTION get_customers_by_country(p_country text)
RETURNS TABLE(id int, name text) LANGUAGE sql AS $$
    SELECT id, name FROM customer WHERE country = p_country ORDER BY id;
$$;

[ クエリを実行] を [ コマンドの種類 ] = [テキスト ]、[ SQL クエリ ] = [ SELECT * FROM get_customers_by_country(?)] で設定し、 In パラメーターを 1 つ追加します。CREATE PROCEDUREで作成したプロシージャを呼び出すには、代わりに CALL procedure_name(?) を使用してください。

SQLite​

SQLite はストアド プロシージャをサポートしていません。パラメーター化された [クエリを実行 ] ステートメントと [コマンドを実行 ] ステートメントを使用してワークフロー内にロジックを保持するか、再利用可能なビューを定義します。

異なるデータベース システムの接続文字列​

このガイドでは、[ データベースに接続 ] アクティビティの接続文字列の例を提供します。ネイティブ ドライバーと ODBC ドライバーを使用してさまざまなデータベースに接続できるようにします。以下の接続文字列の例が含まれています。

  • Microsoft SQL Server (Microsoft Entra ID 認証を含む)
  • Oracle
  • PostgreSQL
  • MySQL
  • Amazon Aurora
  • Microsoft Access
  • SAP HANA
  • IBM Db2
  • SQLite

一般的な接続エラーの トラブルシューティング セクション は、以下の例に続きます。ベスト プラクティスに従って、セキュリティで保護された効率的なデータベース接続を確保します。

Microsoft SQL Server​

Microsoft.Data.SqlClient を使用する場合の Microsoft SQL Server の一般的な接続文字列の形式。

SQL Server と ODBC の認証​
  1. SQL Server 認証を使用する場合

    Data Source=SERVER_NAME;Initial Catalog=DATABASE_NAME;User ID=USERNAME;Password=<your-password>;

  2. 特定のポートの場合:

    Data Source=SERVER_NAME,PORT_NUMBER;Initial Catalog=DATABASE_NAME;User ID=USERNAME;Password=<your-password>;

  3. ODBC ドライバーを使用する場合

    Driver={ODBC Driver 18 for SQL Server};Server=SERVER_NAME;Database=DATABASE_NAME;Uid=USERNAME;Pwd=<your-password>;Encrypt=yes;TrustServerCertificate=no;

重要:

既定では、これらのアクティビティは に接続 Encrypt=True。自己署名証明書またはその他の方法で信頼されていない証明書を使用するサーバーへの接続は、 TrustServerCertificate=True を追加するか (テストまたは開発に限定される)、信頼できる証明書をインストールしない限り失敗します。予測可能な動作を得るには、両方のキーワードを明示的に設定します (例: Encrypt=True;TrustServerCertificate=False;)。

Microsoft Entra ID の認証​
  1. パスワード認証を使用する (Microsoft により非推奨であり、多要素認証 (MFA) に対応していない。対話型、サービス プリンシパル、またはマネージド ID を優先します):

    Server=tcp:SERVER.database.windows.net,1433;Initial Catalog=DATABASE_NAME;Authentication=Active Directory Password;User ID=user@yourtenant.onmicrosoft.com;Password=<your-password>;Encrypt=True;

  2. サービス プリンシパル認証を使用する (Unattended ロボットの場合):

    Server=tcp:SERVER.database.windows.net,1433;Initial Catalog=DATABASE_NAME;Authentication=Active Directory Service Principal;User ID=APP_CLIENT_ID;Password=<your-client-secret>;Encrypt=True;

  3. マネージド ID 認証を使用する (システム割り当て ID の場合は User ID を省略し、ユーザー割り当て ID の場合は ID のクライアント ID に設定します)。

    Server=tcp:SERVER.database.windows.net,1433;Initial Catalog=DATABASE_NAME;Authentication=Active Directory Managed Identity;User ID=USER_ASSIGNED_MI_CLIENT_ID;Encrypt=True;

  4. 統合認証を使用する (統合 Windows 認証とフェデレーション オンプレミス Active Directory ID を使用):

    Server=tcp:SERVER.database.windows.net,1433;Initial Catalog=DATABASE_NAME;Authentication=Active Directory Integrated;Encrypt=True;

  5. 対話型認証を使用する (MFA プロンプトでブラウザーを開きます。有人または開発専用であり、Unattended ロボットには使用できません):

    Server=tcp:SERVER.database.windows.net,1433;Initial Catalog=DATABASE_NAME;Authentication=Active Directory Interactive;User ID=user@yourtenant.onmicrosoft.com;Encrypt=True;

ODBC ドライバーの場合、同等のキーワード値 ( ActiveDirectoryPassword、 ActiveDirectoryServicePrincipal、 ActiveDirectoryMsi (マネージド ID)、 ActiveDirectoryIntegrated、 ActiveDirectoryInteractiveにスペースがありません。ActiveDirectoryInteractive は Windows でのみ利用できます。

ヒント:

同じワークフローをロボットと開発マシンの両方で実行する場合は、 を使用します Authentication=Active Directory Default。DefaultAzureCredentialを使用し、環境変数、ワークロード ID、マネージド ID を試行してから、開発者ツールの資格情報にフォールバックします。

接続文字列の構文の詳細については、 Microsoft の公式ドキュメント を、Microsoft Entra 認証の詳細については、 Microsoft Entra 認証のドキュメントをご覧ください。

Excel ファイル​

Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\full\path\to\the\sampleFile.xlsx;

オラクル・マネージド・データ・アクセス​

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)));User Id=system;Password=<your-password>;

Easy Connect の短縮形 ( Data Source=//HOST_NAME:1521/SERVICE_NAME;User Id=USERNAME;Password=<your-password>;) を使用することもできます。

詳細は、 Oracle Data Provider for .NET のドキュメントを参照してください。

MySQL ODBC 8.3 Unicodeドライバ​

Driver={MySQL ODBC 8.3 Unicode Driver};Server=SERVER_NAME;Database=DATABASE_NAME;User=USERNAME;Password=<your-password>;Option=3;

詳細については、 こちらの MySQL 公式ドキュメントページを参照してください。

MySQL ODBC 8.3 ANSI ドライバ​

Driver={MySQL ODBC 8.3 ANSI Driver};Server=SERVER_NAME;Database=DATABASE_NAME;User=USERNAME;Password=<your-password>;Option=3;

ドライバー名のバージョンを、マシンにインストールされている MySQL Connector/ODBC のバージョンに置き換えます (例: MySQL ODBC 9.4 Unicode Driver)。名前は、登録されているドライバーと完全に一致する必要があります。非 ASCII データの破損を避けるために、ANSI ドライバーよりも Unicode ドライバーを優先的に使用します。レガシ Option=3 フラグは任意であり、通常の使用では必須ではありません。

PostgreSQL​

Driver={PostgreSQL Unicode};Server=SERVER_NAME;Port=5432;Database=DATABASE_NAME;Uid=USERNAME;Pwd=<your-password>;

ANSI バリアント Driver={PostgreSQL ANSI};… は、レガシの 1 バイト エンコーディングにのみ使用してください。UTF-8 データベース用の Unicode ドライバーを推奨します。TLS を適用するには、 sslmode=require; (小文字) を追加します。

重要:

Driver={...}名は、ロボットを実行するマシンに登録されているドライバーと一致する必要があります。インストーラーに応じて、64 ビット psqlODBC ドライバーは PostgreSQL Unicode または PostgreSQL Unicode(x64) (および同等の ANSI) として登録されます。名前が登録済みドライバーと一致しない場合、「データ ソース名が見つかりません」というエラーで接続に失敗します。

64 ビットの ODBC Data Source Administrator (C:\Windows\System32\odbcad32.exe) で正確な登録名を確認します。

Amazon Aurora (MySQL 対応)​

Amazon Aurora MySQL 互換エディションは MySQL ワイヤプロトコルを使用するため、MySQL コネクタ/ODBC ドライバーを使用して接続します。Serverを Aurora クラスター (ライター) エンドポイントでポイントします。

Driver={MySQL ODBC 9.4 Unicode Driver};Server=CLUSTER.cluster-xxxx.REGION.rds.amazonaws.com;Port=3306;Database=DATABASE_NAME;User=USERNAME;Password=<your-password>;

Oracle Autonomous Database (ATP/ADW)とウォレット​

Oracle Autonomous Database (Autonomous Transaction ProcessingまたはAutonomous Data Warehouse)に接続するには:

  1. Oracle Cloud Infrastructureからインスタンス・ウォレット(Wallet_DBNAME.zip)をダウンロードします。
  2. ウォレット アーカイブからロボット端末のフォルダーにすべてのファイルを展開します。
  3. TNS_ADMIN環境変数を目的のフォルダーに設定します。
  4. ウォレットのsqlnet.oraにあるWALLET_LOCATIONディレクトリを同じフォルダーに編集します。ウォレットには ?/network/admin プレースホルダーが付属しています。 TNS_ADMIN だけでは不十分なため、置換する必要があります。

自動ログインウォレット(cwallet.sso)を使用すると、ウォレットのパスワードは必要ありません。それ以外の場合は、ウォレットのパスワードを入力して、ドライバーがパスワードで保護された ewallet.p12を開けるようにします。

次に、 tnsnames.ora のサービス エイリアス (DBNAME_high、 DBNAME_medium、または DBNAME_lowに加えて、トランザクション処理データベースの DBNAME_tp と DBNAME_tpurgent を使用します。

Data Source=DBNAME_low;User Id=USERNAME;Password=<your-password>;

ヒント:

Autonomous DatabaseインスタンスがTLS接続を許可するように構成されている場合、一方向TLSを使用してウォレットなしで接続することもできます。相互 TLS (mTLS) のみ用に設定されたインスタンスでは、引き続きウォレットが必要です。

Microsoft Access​

ODBC ドライバーを使用する場合

Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\full\path\to\database.accdb;Uid=Admin;Pwd=;

OLE DB プロバイダー (System.Data.OleDb、Windows でのみ利用可能) を使用する。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\full\path\to\database.accdb;Persist Security Info=False;

パスワードで保護されたファイルの場合は、OLE DB 文字列に Jet OLEDB:Database Password=<your-password>; を追加します。

重要:

ODBC ドライバーと ACE OLE DB プロバイダーはどちらも Microsoft Access データベース エンジン再頒布可能パッケージから提供され、そのアーキテクチャ (x86 または x64) はロボットとプロジェクトのアーキテクチャに一致している必要があります。不一致があると、「プロバイダーがローカル マシンに登録されていません」というエラーが発生します。

SAP HANA​

Driver={HDBODBC};ServerNode=HOST_NAME:3NN15;UID=USERNAME;PWD=<your-password>;

64 ビットのロボットには HDBODBC を使用します ( は 32 ビット プロセスの場合にのみHDBODBC32 )。単一コンテナー データベースまたは最初のテナントの場合、ポートは 3NN15です。NN は 2 桁のインスタンス番号です (例: 00の場合は 30015、例: 05の場合は 30515)。

マルチテナントデータベースコンテナ(MDC)システムの場合、システムデータベースポート 3NN13 を介して接続し、SAPが推奨する形式であるテナントに名前を付けます。

Driver={HDBODBC};ServerNode=HOST_NAME:30013;DATABASENAME=TENANT_DB;UID=USERNAME;PWD=<your-password>;

重要:

SAP HANA Cloud (オンプレミスの SAP HANA とは対照的) の場合、ホストはポート 443の UUID スタイルのエンドポイントであり、接続は常に暗号化されます。SAP HANA クライアント 2.5 以前に対して明示的に encrypt=TRUE を設定します。新しいクライアントは、ポート 443でこれを推測します。3NN15 ポート スキームは、オンプレミス システムにのみ適用されます。

IBM Db2​

Driver={IBM DB2 ODBC DRIVER};Database=DATABASE_NAME;Hostname=HOST_NAME;Port=50000;Protocol=TCPIP;Uid=USERNAME;Pwd=<your-password>;

登録済みドライバー名は、インストール・システム固有の名前にすることができます (複数の Db2 コピーがある場合は、 と IBM DB2 ODBC DRIVER - DB2COPY1場合があります。Windows の場合は ODBC Data Source Administrator で、Linux の場合は odbcinst.ini で正確な名前を確認します。ポート 50000 が一般的な既定値ですが、実際のポートはインスタンスごとに SVCENAMEで設定されます。

SQLite​

データベース アクティビティでは Microsoft.Data.Sqliteを使用します。データベース ファイルへのパスを指定します。

Data Source=C:\full\path\to\database.db;

任意のキーワードには、 Mode=ReadOnly (または ReadWrite / ReadWriteCreate)、参照整合性を適用するための Foreign Keys=True 、および Cache=Sharedがあります。Version=3 キーワードはここでは無効です。古い System.Data.SQLite プロバイダーに属しているため、エラーが発生します。

データベース アクティビティは .NET 上で実行され、JDBC ドライバーを直接使用しません。通常は JDBC 経由でアクセスするデータベースにアクセスするには、その ODBC ドライバーをこのガイドのそのデータベースの ODBC 接続文字列と共に使用するか、データベース ベンダーの .NET または ADO.NET ドライバーを使用して、コード化されたワークフローに接続を実装します。

一般的な接続に関する問題のトラブルシューティング​

データ ソース名が見つからない (エラー IM002)​

ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found, and no default driver specified

Driver={...} で指定された ODBC ドライバーがインストールされていないか、別の名前またはアーキテクチャで登録されています。これを修正するには、以下の手順を実行します。

  1. 対応する ODBC ドライバーをインストールします。
  2. ODBC データ ソース管理者ツールに、ロボットのアーキテクチャと一致するドライバーが表示されることを確認します。32 ビット管理者と 64 ビット管理者が別々に存在します。
  3. 管理者から提供された正確なドライバー名を Driver={...}にコピーします。この名前は、多くの場合、バージョンまたはインストール固有です (例: PostgreSQL Unicode(x64)、 MySQL ODBC 9.4 Unicode Driver、 IBM DB2 ODBC DRIVER - DB2COPY1)。

ドライバーを読み込めませんでした (エラー IM003)​

ERROR [IM003] Specified driver could not be loaded due to system error 1114

システム エラー 1114 は、ドライバー ライブラリが見つかったが、その初期化ルーチンが失敗したことを意味します。通常は、依存関係 (必要なランタイムなど) が見つからないか、アーキテクチャまたはバージョンの不一致が原因です。これは、Oracle Instant Client (SQORA32.dll) および IBM Db2 (DB2CLIO.DLL) で一般的です。これを修正するには、以下の手順を実行します。

  1. ドライバーのアーキテクチャがランタイムと一致していることを確認します。
  2. ドライバーに必要な前提条件をすべてインストールします。
  3. ドライバーを再インストールまたは更新します。

ドライバーのアーキテクチャとプラットフォームのサポート​

プロジェクトのランタイム アーキテクチャに一致するデータベース ドライバーをインストールします。Windows プロジェクトは 64 ビット プロセスとして実行され、64 ビットの ODBC または OLE DB ドライバーが必要です。Windows - レガシ プロジェクトは 32 ビット プロセスとして実行され、32 ビット ドライバーが必要です。

OLE DB (System.Data.OleDb、Access と Excel に使用) は Windows でのみ利用できます。ODBC は Windows で動作し、Linux または macOS ロボットが UnixODBC 2.3.1 以降とターゲット ドライバーがマシンにインストールされていれば、そのロボットで動作します。

ヒント:

ドライバーをインストールしたら、Studio またはロボットを再起動してドライバーを検出します。

このページは役に立ちましたか?

接続

ヘルプ リソース サポート

学習する UiPath アカデミー

質問する UiPath フォーラム

最新情報を取得