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.

Remarque : IBM_Admin_ figure en préfixe de tous les services destinés à être utilisés par les appels de service basés admin/CMC. Les profils d'accès non conformes aux nouvelles conventions de dénomination continuent à fonctionner correctement, la compatibilité ayant été maintenue avec les versions antérieures. Il est cependant recommandé de suivre ces conventions pour les profils d'accès existants et en cas de modification de profils d'accès futurs.

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.