Paramètres SQL
Vous pouvez utiliser dans les modèles de requête des paramètres SQL afin de substituer des valeurs dans les requêtes SQL. L'expression de requête XPath étendue spécifie les valeurs des paramètres SQL de deux manières : à l'aide d'attributs XPath et d'éléments, et à l'aide de paramètres de contrôle.
Les paramètres de contrôle sont spécifiés entre les accolades qui précèdent l'expression XPath. Par exemple : {_wcf.ap=IBM_Admin_Summary&_cat.rank=1}. Les attributs XPath sont spécifiés dans l'expression elle-même. Les noms de paramètres SQL doivent correspondre à ceux des noeuds XPath (éléments ou attributs) ou à ceux des paramètres de contrôle.
L'exemple suivant d'expression XPath étendue contient le paramètre de contrôle _cat.rank et les attributs XPath relationshipType et catGroupId :
{_wcf.ap=IBM_Admin_Summary&_cat.rank=1} /CatEntry[inRelCatGroups[@relationshipType=1 and @catGroupId= 10001]]Ces valeurs peuvent être spécifiées pour le modèle SQL suivant :
SELECT CATENTRY.$COLS:CATENTRY$, CEPROPERTY.$COLS:CEPROPERTY$
FROM CATENTRY
LEFT OUTER JOIN CEPROPERTY ON CATENTRY.CATENTRY_ID = CEPROPERTY.CATENTRY_ID,CECGREL
WHERE CATENTRY.CATENTRY_ID = CECGREL.CATENTRY_ID AND
CATENTRY.MARKFORDELETE = 0 AND
CECGREL.CATGROUP_ID = ?catGroupId? AND
CECGREL.USAGECODE = ?relationshipType? AND
CATENTRY.RANK = ?_cat.rank.0?
La clause WHERE contient des conditions référençant les paramètres d'entrée catGroupId, relationshipType et _cat.rank. Les paramètres SQL doivent être encadrés par des symboles '?'.
Le modèle SQL doit utiliser le prédicat 'in' si un paramètre SQL peut recevoir plusieurs valeurs (sémantique 'OR'). Dans ce cas, les propriétés XPath acceptant plusieurs valeurs doivent être spécifiées dans l'expression 'or' entre parenthèses. Dans l'exemple ci-dessous, l'attribut XPath catEntryId admet plusieurs valeurs :
/CatEntry[@buyable='true' and (@catEntryId='123' or @catEntryId='124')]
La clé XPath générée pour cette propriété à valeurs multiples est illustrée ci-dessous :
/CatEntry[@buyable='true' and (@catEntryId=)]
L'apparence du modèle SQL sera la suivante :
SELECT CATENTRY.$COLS:CATENTRY$, FROM CATENTRY
WHERE CATENTRY.CATENTRY_ID IN (?catEntryId?) AND CATENTRY.BUYABLE = '?buyable?'
La requête après la substitution du paramètre sera la suivante :
SELECT CATENTRY.CATENTRY_ID, CATENTRY.PARTNUMBER FROM CATENTRY
WHERE CATENTRY.CATENTRY_ID IN (123, 124) AND CATENTRY.BUYABLE = 'true'
Indexation de paramètre
Si une expression XPath contient plusieurs attributs ou éléments avec le même nom, le paramètre du modèle SQL doit être indexé pour résoudre l'ambiguïté. Ceci est réalisé en ajoutant '.' suivi d'un index au nom du paramètre. Par exemple, ?catGroupId.1?, ?catGroupId.2?.
Les paramètres SQL avec le même nom sont numérotés d'après leur ordre d'apparition dans l'expression de requête XPath étendue. La numérotation de l'index des noeuds de requête XPath débute à 1. Les paramètres de contrôle utilisés dans le modèle de requête doivent être spécifiés avec l'index 0.