Exécuter SQL

Utilisez cette étape pour exécuter une instruction SQL sur la base de données sélectionnée. Vous pouvez modifier les enregistrements de votre base de données à l'aide de commandes SQL, telles que create, update, insert, delete, drop, etc. Vous pouvez également exécuter des procédures stockées à l'aide de la commande call, par exemple call add_record("nom"). Pour lire les enregistrements de votre base de données, utilisez l'étape Interroger la base de données. Pour stocker des données dans une base de données, utilisez l'étape Stocker dans la base de données.

Propriétés

Configurez l'étape Exécuter SQL à l'aide des propriétés suivantes.

Mappages de base de données
Sélectionnez un mappage de base de données parmi les bases de données spécifiées à l'étape Appeler le robot.
Instruction SQL
Saisissez une instruction SQL à exécuter sur la base de données sélectionnée.

Le robot n'évalue pas l'instruction que vous saisissez. Vérifiez vos instructions SQL au préalable ou vous pouvez vérifier la validité de l'instruction simplement en exécutant l'étape.

Ne supprimez pas et ne modifiez pas les tables d'une base de données utilisée par les étapes Stocker dans la base de données ou Exécuter SQL.

Lignes modifiées
Si cette option est sélectionnée, vous pouvez spécifier une variable de type entier pour obtenir le nombre de lignes modifiées par l'instruction SQL comme résultat de l'étape.
Type d'instruction
Sélectionnez un type d'instruction dans la liste.
Instruction préparée
Utilisez ce type d'instruction pour exécuter des instructions SQL de manière répétée avec une grande efficacité. Les instructions préparées sont des requêtes écrites avec des paramètres fictifs au lieu de valeurs réelles, par exemple SELECT * FROM MyTable WHERE string = ?. Vous pouvez spécifier n'importe quelle instruction SQL, mais vous êtes limité à l'utilisation des seuls paramètres d'entrée. Assurez-vous également que votre SGBD et votre pilote JDBC prennent en charge les instructions préparées.
Appel de la procédure stockée
Utilisez ce type d'instruction pour appeler une procédure stockée, par exemple : CALL db.Procedure(?), ? = CALL db.Procedure(?), où ? agit comme un espace réservé pour les paramètres. L'appel de la procédure stockée doit commencer par « CALL », éventuellement avec un paramètre de valeur de retour, et prend en charge les paramètres d'entrée et de sortie.
Paramètres
Vous pouvez ajouter divers paramètres aux types d'instructions d'appel de procédure préparée et d'appel de procédure stockée. Les points d'interrogation (?) dans la requête sont des espaces réservés pour les paramètres et correspondent à l'ordre des paramètres.

Exemple

Si vous utilisez une requête, telle que

SELECT * FROM MyTable WHERE string = ? AND int = ?

et des paramètres, tels que

  • contenu

  • 123

la requête est automatiquement convertie en SELECT * FROM MyTable WHERE string = content AND int = 123.

Les paramètres que vous définissez à cette étape peuvent être utilisés comme expression. Cela vous permet de définir dynamiquement des paramètres de requête. Pour éviter des erreurs ou l'injection à partir d'une entrée utilisateur, nous vous recommandons d'utiliser cette substitution de paramètre dans tous les scénarios.

Pour une instruction d'appel de procédure stockée, vous pouvez sélectionner les paramètres Entrée, Données de sortie ou Entrée/sortie :

  • Les paramètres d'entrée sont saisis sous forme d'expression dans le robot. Leurs valeurs sont évaluées avant d'être placées dans la requête.

  • Les paramètres de sortie sont utilisés pour renvoyer les valeurs et prennent également en charge une sélection de types de variable SQL. Le type de paramètre et le type de variable SQL doivent correspondre, sinon une erreur est renvoyée. Pour plus d'informations, voir plus loin dans cette section.

  • Les paramètres d'entrée/sortie prennent également en charge une sélection de types de variable SQL et fonctionnent comme des paramètres de sortie. Toutefois, ils utilisent la valeur actuelle de la variable sélectionnée comme entrée.

Lorsque vous sélectionnez les types de paramètre de sortie ou d'entrée/sortie, la case à cocher Détails des paramètres manuels s'affiche et vous pouvez éventuellement sélectionner un type de paramètre SQL et spécifier son échelle. Normalement, ces détails sont récupérés automatiquement, mais certains pilotes JDBC ne les prennent pas en charge et vous devez définir les types manuellement.

Lorsque vous sélectionnez un type de variable SQL dans la liste, assurez-vous qu'il correspond au type de paramètre défini dans le champ Appel de procédure stockée. Si vous ne trouvez pas un type de variable SQL requis dans la liste, cela signifie qu'il ne peut pas être utilisé avec les robots.

L'échelle fait référence au nombre de chiffres à droite du séparateur dans une valeur NUMERIC ou DECIMAL. L'échelle est obligatoire pour les paramètres de type NUMERIC et DECIMAL et doit être spécifiée. Par exemple, si vous saisissez un paramètre de type NUMERIC(24,12), la valeur d'échelle sera 12.

Les valeurs renvoyées par les paramètres de sortie ou d'entrée/sortie sont mappées sur leurs valeurs de robot respectives. Le tableau suivant répertorie les types de paramètre de robot et leurs types de variable SQL respectifs.

Type de paramètre de robot Type de variable SQL

Entier

BIGINT, INTEGER, SMALLINT, TINYINT

Nombre

DECIMAL, DOUBLE, FLOAT, NUMERIC, REAL

Texte ou mot de passe

CHAR, CLOB, DATALINK, LONGVARCHAR, LONGNVARCHAR, NCHAR, NCLOB, NVARCHAR, ROWID, SQLXML, VARCHAR

Booléen

BIT, BOOLEAN

Binaire

BINARY, BLOB, LONGVARBINARY, VARBINARY

Heure

TIME, TIME_WITH_TIMEZONE

Date

DATE

DateTime

TIMESTAMP, TIMESTAMP_WITH_TIMEZONE

Le pilote JDBC configuré effectue la conversion des valeurs de robot en valeurs de requête. Le processus de conversion dépend de divers facteurs, tels que la version JDBC, le type de SGBD, la version et les paramètres. Il peut être nécessaire de convertir la valeur dans une expression ou d'ajuster la requête manuellement afin que les paramètres puissent être appliqués.

En particulier, les valeurs date-heure peuvent nécessiter une conversion manuelle, car presque aucun pilote JDBC ne prend en charge les valeurs date-heure avec le fuseau horaire par défaut. Voici des exemples de telles valeurs par SGBD :

  • IBM DB2

    Il peut être nécessaire de formater les valeurs d'entrée date-heure sous forme de chaîne de caractères, sans fuseau horaire.

    Exemple : aaaa-MM-jj HH:mm:ss.SS.

  • Microsoft SQL Server

    Il peut être nécessaire de formater les valeurs d'entrée date-heure sous forme de chaîne de caractères.

    Exemple : aaaa-MM-jj HH:mm:ss.SSSSSSS xxx.

    Lors de l'utilisation d'un type de variable numérique pour un paramètre d'entrée/sortie, la sortie peut atteindre une précision de l'entrée, même avec une conversion explicite dans la procédure stockée.

    Utilisez les paramètres de sortie dans la mesure du possible, et utilisez une valeur suffisamment précise pour le paramètre d'entrée dans le cas contraire.

    Exemple : Une procédure stockée qui définit une valeur NUMERIC sur « 1,2 » peut retourner sa valeur comme « 1,0 » si le paramètre a été défini sur Entrée/sortie et que la valeur initiale n'avait qu'une précision de 1 (telle que 0,0 ou 1).

  • MySQL

    Il peut être nécessaire de formater les valeurs de date-heure sous forme de chaîne de caractères, sans fuseau horaire.

    Exemple : aaaa-MM-jj HH:mm:ss.

  • Oracle

    Il peut être nécessaire de formater les valeurs date-heure sous forme de chaîne de caractères.

    Exemple : jj-MMM-aaaa HH:mm:ss.SS a xxx.

    Exemple sans fuseau horaire : jj-MMM-aaaa HH:mm:ss.SS a.

    Soyez prudent car les formats de date-heure peuvent être très dépendants des paramètres régionaux.

    Le renvoi des entiers complets depuis une procédure stockée peut ne pas être pris en charge. Vous pouvez utiliser la méthode round() dans une expression de robot pour résoudre ce problème.

    Sachez que les versions précédentes du pilote JDBC peuvent ne pas être en mesure de déterminer automatiquement les types et l'échelle des paramètres.

  • PostgreSQL

    Il peut être nécessaire de formater les valeurs date-heure sous forme de chaîne de caractères.

    Exemple : aaaa-MM-jj HH:mm:ss.SS xxx.

    En outre, cela peut nécessiter une conversion dans la requête.

    Exemple : to_timestamp(?, 'aaaa-MM-jj hh24:mi:ss.us xxx').

    Sachez que toutes les versions du pilote JDBC peuvent ne pas être en mesure de déterminer automatiquement les types et l'échelle des paramètres. Tout est signalé comme le type « Autre », qui n'est pas pris en charge pour les robots. Même si vous sélectionnez manuellement le type de variable, chaque paramètre de la requête peut devoir être distribué explicitement.

    Exemple : 'call db.proc(? :: character varying)', où le paramètre est du type VARCHAR.

    Seuls les appels de fonction sont pris en charge par défaut. Il peut être nécessaire de définir la propriété de l'URL de connexion 'escapeSyntaxCallMode' sur 'call' ou 'callIfNoReturn' dans la Management Console pour utiliser les procédures stockées réelles.