Parámetros SQL

Dentro de las plantillas de consulta, se pueden utilizar parámetros de SQL para sustituir valores en las consultas SQL. La expresión de consulta XPath ampliada especifica los valores de los parámetros SQL de dos formas: utilizando elementos o atributos de XPath y empleando parámetros de control.

Los parámetros de control se especifican delante de la expresión XPath entre llaves. Por ejemplo: {_wcf.ap=IBM_Admin_Summary&_cat.rank=1}. Los atributos de XPath se especifican dentro de la expresión propiamente dicha. Los nombres de parámetro de SQL han de coincidir con los nombres de los nodos de XPath (elementos o atributos) o con los nombres de los parámetros de control.

Nota: IBM_Admin_ es el prefijo de todos los servicios pensados para ser utilizados por llamadas de servicios basadas en admin/CMC. Los perfiles de acceso que no sigan los nuevos convenios de denominación continuarán funcionando correctamente, ya que se mantiene la compatibilidad con las versiones anteriores. No obstante, se recomienda seguir dichos convenios para los perfiles de acceso existentes y al realizar cambios en los perfiles de acceso futuros.

El siguiente ejemplo de expresión XPath ampliada contiene el parámetro de control _cat.rank y los atributos de XPath relationshipType y catGroupId.

{_wcf.ap=IBM_Admin_Summary&_cat.rank=1} /CatEntry[inRelCatGroups[@relationshipType=1 and @catGroupId= 10001]]

Estos valores se pueden especificar para la siguiente plantilla de SQL:

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 cláusula WHERE contiene condiciones que hacen referencia a los parámetros de entrada catGroupId, relationshipType y _cat.rank. Los parámetros SQL han de estar entre símbolos '?'.

La plantilla SQL debe utilizar el predicado 'in' si un parámetro de SQL puede tener varios valores (semántica 'OR'). En ese caso, las propiedades XPath de varios valores deben especificarse en la expresión 'or' entre paréntesis. En el ejemplo de abajo, el atributo catEntryId de XPath tiene varios valores:

/CatEntry[@buyable='true' and (@catEntryId='123' or @catEntryId='124')]

La clave XPath generada para esta propiedad de varios valores puede verse a continuación:

/CatEntry[@buyable='true' and (@catEntryId=)]

La plantilla SQL puede verse a continuación:

SELECT CATENTRY.$COLS:CATENTRY$, FROM CATENTRY 
WHERE CATENTRY.CATENTRY_ID IN (?catEntryId?) AND CATENTRY.BUYABLE = '?buyable?'

Esta sería la consulta tras la sustitución de parámetros:

SELECT CATENTRY.CATENTRY_ID, CATENTRY.PARTNUMBER FROM CATENTRY 
WHERE CATENTRY.CATENTRY_ID IN (123, 124) AND CATENTRY.BUYABLE = 'true' 

Indexación de parámetros

Si una expresión XPath tiene varios elementos o atributos con el mismo nombre, los nombres de parámetros de la plantilla SQL habrán de estar indexados para resolver la ambigüedad. Se hace añadiendo un '.' y un índice al nombre del parámetro. Por ejemplo, ?catGroupId.1?, ?catGroupId.2?.

Cualquier parámetro SQL que tenga el nombre nombre quedará numerado según el orden en que aparezca en la expresión de consulta XPath ampliada. La numeración de índice para los nodos de consulta XPath empieza por 1. Los parámetros de control utilizados en la plantilla de consulta deben especificarse con un índice de 0.