Fonction PASSTHRU

La fonction PASSTHRU évalue une expression et exécute la chaîne de caractères résultante sous la forme d'une instruction de base de données, en renvoyant un ensemble de résultats.

Syntaxe

Lire le diagramme de syntaxeIgnorer le diagramme de syntaxe graphiquePASSTHRU(Expression TODatabaseReferenceVALUES(,Expression)1,,Expression )
LIEU
Lire le diagramme de syntaxeIgnorer le diagramme de syntaxe graphiqueDatabaseReference =  Database.DataSourceClause
Lire le diagramme de syntaxeIgnorer le diagramme de syntaxe graphiqueDataSourceClause =  DataSourceName{DataSourceExpression}
Remarques :
  • 1 La moitié inférieure du diagramme de syntaxe principal décrit la syntaxe retenue pour la compatibilité avec les versions antérieures.

La fonction PASSTHRU est similaire à l'instruction PASSTHRU, qui est décrite dans Instruction PASSTHRU.

Utilisation

L'utilisation principale de la fonction PASSTHRU consiste à émettre des SELECTs complexes, actuellement non pris en charge par le noeud d'intégration, vers des bases de données. (Les exemples de SELECTs complexes qui ne sont pas actuellement pris en charge par le noeud d'intégration sont ceux qui contiennent des clauses GROUP BY ou HAVING.)

La première expression est évaluée et la chaîne de caractères résultante est transmise à la base de données indiquée par DatabaseReference (dans la clause TO) pour exécution. Si la clause TO n'est pas spécifiée, la base de données désignée par l'attribut data source du noeud est utilisée.

Utilisez des points d'interrogation (?) dans la chaîne de base de données pour indiquer des paramètres. Les valeurs de paramètre sont fournies par la clause VALUES.

Si la clause VALUES est spécifiée, ses expressions sont évaluées et transmises à la base de données en tant que paramètres (c'est-à-dire que les valeurs des expressions sont remplacées par les points d'interrogation dans l'instruction de la base de données).

S'il n'existe qu'une seule expression VALUE, le résultat peut être ou non une liste. S'il s'agit d'une liste, les valeurs scalaires de la liste sont remplacées séquentiellement par les points d'interrogation. S'il ne s'agit pas d'une liste, la valeur scalaire unique est remplacée par le point d'interrogation (unique) dans l'instruction de base de données. S'il existe plusieurs expressions VALUE, aucune des expressions n'est évaluée dans une liste ; leurs valeurs scalaires sont remplacées séquentiellement par les points d'interrogation.

Etant donné que l'instruction de base de données est construite par le programme utilisateur, il n'est pas nécessaire d'utiliser des marqueurs de paramètre (c'est-à-dire les points d'interrogation) ou la clause VALUES, car l'intégralité de l'instruction de base de données peut être fournie, sous forme de chaîne littérale, par le programme. Cependant, utilisez des marqueurs de paramètre chaque fois que cela est possible car cela réduit le nombre d'instructions différentes qui doivent être préparées et stockées dans la base de données et le noeud d'intégration.

Référence de base de données

Une référence de base de données est une instance spéciale des références de zone utilisées pour faire référence aux arborescences de messages. Il se compose du mot Database suivi du nom d'une source de données (c'est-à-dire le nom d'une instance de base de données).

Vous pouvez spécifier le nom de la source de données directement ou par une expression entre accolades ({...}). Un nom de source de données directement spécifié fait l'objet d'une substitution de nom. Autrement dit, si le nom utilisé a été déclaré comme étant un nom connu, la valeur du nom déclaré est utilisée à la place du nom lui-même (voir Instruction DECLARE).

Si vous avez créé un flux de messages qui contient l'un des noeuds suivants et que le langage ESQL associé à ce noeud inclut une instruction PASSTHRU et une référence de base de données, vous devez spécifier une valeur pour la propriété Source de données du noeud approprié:
  • Compute
  • Database
  • Filter

Traitement des erreurs

Il est possible que des erreurs se produisent lors des opérations PASSTHRU. Par exemple, il se peut que la base de données ne soit pas opérationnelle ou que l'instruction ne soit pas valide. Dans ces cas, une exception est émise (sauf si la propriété Throw exception on database error du noeud est effacée). Ces exceptions définissent le code SQL approprié, l'état, l'erreur native et les valeurs de texte d'erreur et peuvent être traitées par les gestionnaires d'erreurs (voir l'instruction DECLARE HANDLER).

Pour plus d'informations sur le traitement des erreurs de base de données, voir Capture de l'état de la base de données.

Exemple

L'exemple suivant exécute une instruction SELECT sur la table Table1 dans le schéma Schema1 de la base de données DSN1, en transmettant deux paramètres à la clause WHERE et en demandant que l'ensemble de résultats soit classé par ordre croissant de nom. L'ensemble de résultats est affecté au dossier SelectResult :
SET OutputRoot.XML.Data.SelectResult.Row[] = 
  PASSTHRU('SELECT R.* FROM Schema1.Table1 AS R WHERE R.Name = ? OR R.Name = 
           ? ORDER BY Name'
   TO Database.DSN1
   VALUES ('Name1', 'Name4'));

L'exemple ci-dessus affecte l'ensemble de résultats à l'arborescence de corps de message OutputRoot appartenant à l'analyseur syntaxique XML générique, qui autorise les messages auto-définis.

Si vous affectez l'ensemble de résultats dans une arborescence de messages appartenant à l'un des analyseurs MRM et que la structure de l'ensemble de résultats correspond exactement à la définition de message MRM, l'ensemble de résultats peut être affecté directement dans l'arborescence de corps de message OutputRoot .

Si la structure de l'ensemble de résultats ne correspond pas exactement à la définition de message MRM, vous devez d'abord affecter l'ensemble de résultats à un type de données ROW ou à une arborescence d'environnement à laquelle aucun analyseur n'est associé. Les données requises peuvent ensuite être affectées à OutputRoot pour générer une arborescence de messages conforme à la définition de message.