# EXECSQL

## Aperçu

L'application de workflow **EXECSQL** vous permet d'exécuter une ou plusieurs requêtes SQL dans un processus.&#x20;

Elle vous permet de récupérer des informations au travers de requêtes `SELECT` par exemple, afin de pouvoir utiliser le résultat dans des conditions du processus.&#x20;

## Mode de fonctionnement

* L'application EXECSQL requiert les paramètres `CONNECTION_NAME` (qui correspond au nom de la connexion) et `QUERY` (qui correspond à la requête à exécuter). <br>
* Il est possible de spécifier une ou plusieurs commandes par action EXECSQL. Pour ceci, les paramètres doivent être préfixés par `CMDx_`, où `x` correspond au numéro de la commande (p.ex. : `CMD1_`).<br>
* Les types de requête supportés sont `SELECT`, `INSERT`, `UPDATE`, `DELETE` , `SCALAR` et `PROCEDURE`.<br>
* L'application supporte la gestion des transactions SQL.<br>
* Il est possible d'utiliser une connexion globale pour plusieurs commandes. Pour ceci, il ne faut pas préfixer le paramètre `CONNECTION_NAME` par `CMDx_`. Il n'est pas possible d'utiliser une connexion globale et une connexion locale (p.ex. : `CONNECTION_NAME` et `CMD2_CONNECTION_NAME`).<br>
* Il est possible d'utiliser une transaction globale  pour plusieurs commandes. Pour ceci, il ne faut pas préfixer le paramètre `TRANSACTION` par `CMDx_`. Il n'est pas possible d'utiliser une transaction globale et une transaction locale (ex: `TRANSACTION` et `CMD2_TRANSACTION`). Il est nécessaire de définir une connexion globale pour pouvoir définir une transaction globale.<br>
* Des logs d'application sont disponibles. Ceux-ci peuvent être spécifiés en définissant la valeur du paramètre `ExecSqlLogLevel` dans le fichier `web.config` sur `0` pour désactiver la journalisation, `1` pour les logs d'erreur, `2` pour des logs d'informations ou `3` pour les logs de débogage; la valeur par défaut est `0`.

## Paramètres obligatoires

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Description</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Nom de la connexion à utiliser<br></p><p>Le nom de la connexion doit être défini dans le fichier <code>web.config</code> de WorkflowGen.</p></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Requête à exécuter</td></tr></tbody></table>

## Paramètres facultatifs

### Général

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Description</strong></td></tr><tr><td valign="top"><code>TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Type de la requête à exécuter</p><p></p><p>Les types supportés sont :</p><ul><li><code>SELECT</code> (par défaut)</li><li><code>INSERT</code></li><li><code>UPDATE</code></li><li><code>DELETE</code></li><li><code>SCALAR</code></li><li><code>PROCEDURE</code></li></ul></td></tr><tr><td valign="top"><code>TRANSACTION</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Lorsque défini sur <code>Y</code> , l'application déclenche une transaction SQL avant l'exécution de la requête et effectuera un commit ou rollback en fonction du résultat</p><p><strong>Par défaut :</strong> <code>N</code></p></td></tr><tr><td valign="top"><code>ON_ERROR</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Lorsque défini sur <code>CATCH</code>, l'application ne retournera pas d'erreur à WorkflowGen. Ceci permettra de stocker un message d'erreur dans le paramètre <code>ERROR_MESSAGE</code> et de continuer l'exécution.   <br><strong>Par défaut :</strong> <code>THROW</code></td></tr><tr><td valign="top"><code>TIMEOUT</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top">Indique le nombre de secondes à définir dans le temps d'exécution de la commande<br><strong>Par défaut :</strong> <code>30</code></td></tr><tr><td valign="top"><code>FORM_DATA</code></td><td valign="top">FILE</td><td valign="top">INOUT</td><td valign="top">Fichier <code>FORM_DATA</code> contenant la définition XML du processus</td></tr><tr><td valign="top"><code>FORM_DATA_GRIDVIEW</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Identifiant du tableau à alimenter dans le <code>FORM_DATA</code></td></tr><tr><td valign="top"><code>RESULT_CSV_SEPARATOR</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Séparateur utilisé dans la valeur ou fichier CSV de retour</p><p><strong>Par défaut :</strong> <code>,</code> (virgule)</p></td></tr></tbody></table>

{% hint style="info" %}

* Si vous souhaitez alimenter un tableau à l'aide du paramètre `FORM_DATA_GRIDVIEW`, il est nécessaire que le contenu du `FORM_DATA` contiennent au moins le schéma XML.
* Si la première action du processus est une action EXECSQL, vous devez mettre une valeur par défaut dans le `FORM_DATA`, avec la définition du schéma.
  {% endhint %}

### Paramètres de requête

Il est possible de définir pour chaque requête des paramètres à utiliser lors de l'exécution. Les paramètres peuvent être définis de deux façons, soit en utilisant le préfixe `QUERY_PARAM`,  soit en utilisant un arobase (`@`).

#### 📌 Exemple

Vous pouvez utiliser `QUERY_PARAM_MyParam` ou `@MyParam`, où `MyParam` correspond au nom du paramètre défini dans la requête.&#x20;

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Description</strong></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>SELECT * FROM USERS WHERE LASTNAME = @UserLastname</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_UserLastName</code>  / <code>@UserLastName</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>Doe</code></td></tr></tbody></table>

### Paramètres de retour

#### Général

<table data-header-hidden><thead><tr><th width="200" valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Description</strong></td></tr><tr><td valign="top"><code>ERROR_MESSAGE</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Contient le message d'erreur dans le cas où la valeur du paramètre contient <code>CATCH</code> et qu'une exception est levée lors de l'exécution</td></tr><tr><td valign="top"><code>RESULT_COMMIT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Indique si un <code>commit</code> a été exécuté sur la transaction<br><strong>Valeurs possibles :</strong> <code>Y</code> ou <code>N</code></td></tr></tbody></table>

#### Requête `SELECT`

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Description</strong></td></tr><tr><td valign="top"><code>RESULT_ROWx_fieldName</code></td><td valign="top"><p>TEXT</p><p>NUMERIC</p><p>DATETIME</p></td><td valign="top">OUT</td><td valign="top"><p>Contient la valeur de la colonne <code>fieldName</code> pour la ligne <code>x</code></p><p></p><p>Vous devez remplacer <code>fieldname</code> par votre nom de colonne (p.ex. : <code>LASTNAME</code>) et <code>x</code> par le numéro de la ligne (p.ex. : <code>2</code>).</p></td></tr><tr><td valign="top"><code>RESULT_ROW_fieldName</code></td><td valign="top"><p>TEXT</p><p>NUMERIC</p><p>DATETIME</p></td><td valign="top">OUT</td><td valign="top">Contient la valeur de la colonne <code>fieldName</code> pour la première ligne retournée</td></tr><tr><td valign="top"><code>RESULT_JSON</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Contient le résultat de la requête au format <code>JSON</code></td></tr><tr><td valign="top"><code>RESULT_JSON_FILE</code></td><td valign="top">FILE</td><td valign="top">OUT</td><td valign="top">Contient le résultat de la requête au format <code>JSON</code> stocké dans un fichier <code>.json</code></td></tr><tr><td valign="top"><code>RESULT_XML</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Contient le résultat de la requête au format <code>XML</code></td></tr><tr><td valign="top"><code>RESULT_XML_FILE</code></td><td valign="top">FILE</td><td valign="top">OUT</td><td valign="top">Contient le résultat de la requête au format <code>XML</code> stocké dans un fichier <code>.xml</code></td></tr><tr><td valign="top"><code>RESULT_CSV</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><p>Contient le résultat de la requête au format <code>CSV</code></p><p></p><p>Les données sont séparées suivant le séparateur défini dans le paramètre <code>RESULT_CSV_SEPARATOR</code></p></td></tr><tr><td valign="top"><code>RESULT_CSV_FILE</code></td><td valign="top">FILE</td><td valign="top">OUT</td><td valign="top"><p>Contient le résultat de la requête au format <code>CSV</code> stocké dans un fichier <code>.csv</code></p><p></p><p>Les données sont séparées suivant le séparateur défini dans le paramètre <code>RESULT_CSV_SEPARATOR</code></p></td></tr></tbody></table>

#### Requête `SCALAR`

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Description</strong></td></tr><tr><td valign="top"><code>RESULT</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Contient le résultat numérique d'une requête de type <code>SCALAR</code></td></tr></tbody></table>

## Exemples

### Requête `SELECT`

#### Stockage du retour dans des données

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>SELECT LASTNAME, FIRSTNAME, USERNAME FROM USERS</code></td></tr><tr><td valign="top"><code>RESULT_JSON</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>{ "TABLE":[ { "LASTNAME":"Administrator", "FIRSTNAME":"WorkflowGen", "USERNAME":"wfgen_admin" }, { "LASTNAME":"Doe", "FIRSTNAME":"John", "USERNAME":"john.doe" } ] }</code></td></tr><tr><td valign="top"><code>RESULT_JSON_FILE</code></td><td valign="top">FILE</td><td valign="top">OUT</td><td valign="top"><code>result.json</code></td></tr><tr><td valign="top"><code>RESULT_CSV</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><p><code>"LASTNAME","FIRSTNAME","USERNAME" "Administrator","WorkflowGen","wfgen_admin"</code></p><p><code>"Doe","John","john.doe"</code></p></td></tr><tr><td valign="top"><code>RESULT_CSV_FILE</code></td><td valign="top">FILE</td><td valign="top">OUT</td><td valign="top"><code>result.csv</code></td></tr><tr><td valign="top"><code>RESULT_ROW_LASTNAME</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>Administrator</code></td></tr><tr><td valign="top"><code>RESULT_ROW1_FIRSTNAME</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>WorkflowGen</code></td></tr><tr><td valign="top"><code>RESULT_ROW2_USERNAME</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>john.doe</code></td></tr></tbody></table>

#### Alimentation d'un tableau

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>SELECT LASTNAME as REQUEST_GRID_LASTNAME, FIRSTNAME as REQUEST_GRID_FIRSTNAME, USERNAME as REQUEST_GRID_USERNAME FROM USERS</code></td></tr><tr><td valign="top"><code>FORM_DATA</code></td><td valign="top">FILE</td><td valign="top">INOUT</td><td valign="top"><code>FORM_DATA</code></td></tr><tr><td valign="top"><code>FORM_DATA_GRIDVIEW</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>REQUEST_GRID</code></td></tr></tbody></table>

{% hint style="info" %}
Dans le cas où EXECSQL est la première action du processus, vous devez définir une valeur par défaut pour la donnée `FORM_DATA` contenant le schéma du tableau comme dans l'exemple ci-dessous :

```markup
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
    <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
            <xs:complexType>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="Table1">
                        <xs:complexType>
                            <xs:sequence>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="REQUEST_GRID">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="REQUEST_GRID_LASTNAME" type="xs:string" minOccurs="0"/>
                                <xs:element name="REQUEST_GRID_FIRSTNAME" type="xs:string" minOccurs="0"/>
                                <xs:element name="REQUEST_GRID_USERNAME" type="xs:string" minOccurs="0"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:choice>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    <Table1></Table1>
</NewDataSet>
```

{% endhint %}

### Requête `INSERT`

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (@IdCategory, @Name, @Description)</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_IdCategory</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><code>1</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_Name</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>NomCategorie</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_Description</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>Description de la catégorie</code></td></tr></tbody></table>

Voici une autre possibilité pour les paramètres de requête :

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (@IdCategory, @Name, @Description)</code></td></tr><tr><td valign="top"><code>@IdCategory</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><code>1</code></td></tr><tr><td valign="top"><code>@Name</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>NomCategorie</code></td></tr><tr><td valign="top"><code>@Description</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>Description de la catégorie</code></td></tr></tbody></table>

### Requête `UPDATE`

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>UPDATE</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>UPDATE WFCATEGORY SET NAME = @Name WHERE ID_CATEGORY = @IdCategory</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_IdCategory</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><code>1</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_Name</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>NouveauNomCategorie</code></td></tr></tbody></table>

### Requête `DELETE`

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>DELETE</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>DELETE FROM WFCATEGORY WHERE ID_CATEGORY = @IdCategory</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_IdCategory</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><code>1</code></td></tr></tbody></table>

### Procédure stockée

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>PROCEDURE</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT_CATEGORY</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_ID_CATEGORY</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><code>1</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>NomCategorie</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_DESCRIPTION</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>Description de la catégorie</code></td></tr></tbody></table>

{% hint style="info" %}
Le type de requête `PROCEDURE` ne permet pas de retourner de valeur. Si vous souhaitez retourner une valeur, il faut utiliser le type `SELECT`.
{% endhint %}

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>SELECT</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>EXEC GET_USER @USERNAME = @User</code></td></tr><tr><td valign="top"><code>QUERY_PARAM_User</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><code>wfgen_admin</code></td></tr></tbody></table>

### Requête `SCALAR`

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>SCALAR</code></td></tr><tr><td valign="top"><code>QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>SELECT COUNT(*) FROM USERS</code></td></tr><tr><td valign="top"><code>RESULT</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top"><code>2</code></td></tr></tbody></table>

### Lancement de plusieurs requêtes

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>CMD1_TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT</code></td></tr><tr><td valign="top"><code>CMD1_QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (@IdCategory, @Name, @Description)</code></td></tr><tr><td valign="top"><code>CMD1_QUERY_PARAM_IdCategory</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><code>1</code></td></tr><tr><td valign="top"><code>CMD1_QUERY_PARAM_Name</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>NomCategorie</code></td></tr><tr><td valign="top"><code>CMD1_QUERY_PARAM_Description</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>Description de la catégorie</code></td></tr><tr><td valign="top"><code>CMD2_QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>SELECT NAME FROM WFCATEGORY WHERE ID_CATEGORY = @IdCategory</code></td></tr><tr><td valign="top"><code>CMD2_@IdCategory</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><code>1</code></td></tr><tr><td valign="top"><code>CMD2_RESULT_ROW_NAME</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>NomCategorie</code></td></tr></tbody></table>

### Requêtes avec transactions et gestion des erreurs

<table data-header-hidden><thead><tr><th valign="top">Paramètre</th><th valign="top">Type</th><th valign="top">Direction</th><th valign="top">Valeur</th></tr></thead><tbody><tr><td valign="top"><strong>Paramètre</strong></td><td valign="top"><strong>Type</strong></td><td valign="top"><strong>Direction</strong></td><td valign="top"><strong>Valeur</strong></td></tr><tr><td valign="top"><code>CONNECTION_NAME</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>MainDbSource</code></td></tr><tr><td valign="top"><code>CMD1_TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT</code></td></tr><tr><td valign="top"><code>CMD1_QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (1, "Nom", "Description")</code></td></tr><tr><td valign="top"><code>CMD1_TRANSACTION</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>Y</code></td></tr><tr><td valign="top"><code>CMD1_ON_ERROR</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>CATCH</code></td></tr><tr><td valign="top"><code>CMD1_COMMIT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>Y</code></td></tr><tr><td valign="top"><code>CMD1_ERROR_MESSAGE</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>NULL</code></td></tr><tr><td valign="top"><code>CMD2_TYPE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT</code></td></tr><tr><td valign="top"><code>CMD2_QUERY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (1, "AutreNom", "Autre description")</code></td></tr><tr><td valign="top"><code>CMD2_TRANSACTION</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>Y</code></td></tr><tr><td valign="top"><code>CMD2_ON_ERROR</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><code>CATCH</code></td></tr><tr><td valign="top"><code>CMD2_COMMIT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>N</code></td></tr><tr><td valign="top"><code>CMD2_ERROR_MESSAGE</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top"><code>Cannot insert duplicate key in object 'dbo.WFCATEGORY'. The duplicate key value is (1).</code></td></tr></tbody></table>
