Création d'instructions SQL directes
Pourquoi et quand exécuter cette tâche
Les instructions SQL directes sont exécutées directement à l'aide de la classe JDBCQueryService. Toutes les instructions SQL directes doivent être situées dans la section SQL_STATEMENT d'un fichier nommé wc-query-utilities.tpl. Cette section est la seule pouvant contenir des instructions select utilisant des fonctions d'agrégation, comme sum() ou avg(), étant donné que le résultat de ces requêtes n'a pas de mappage par métadonnées objet-relationnel avec des objets Java physiques.
- Les noms de table doivent être l'unique information d'identification pour le référencement de tables. En d'autres termes, les noms de schéma ne doivent pas être inclus avec le nom de la table lors de leur référencement. Par exemple, TABLE_NAME est un nom de table acceptable, ce qui n'est pas le cas de SCHEMA_NAME.TABLE_NAME.
- La clause
WHEREdans une instruction SQL peut correspondre à n'importe quelle condition de recherche SQL valide et ne doit utiliser aucune fonction SQL de base de données.Par exemple, IN ou = sont des conditions de recherche acceptables, alors que MIN ou MAX ne le sont pas. - Les instructions SQL doivent prendre la forme d'une instruction SQL complète et ne doivent pas appeler de procédures mémorisées telles que GetItems ou ShipItems.
Pour créer vos propres requêtes SQL directes, procédez comme suit :
Procédure
-
Créez un dossier WC\config\com.ibm.commerce.servicemodule-ext, si celui-ci n'existe pas déjà :
- Cliquez avec le bouton droit sur le dossier WC\config\com.ibm.commerce.servicemodule-ext. Vous devez créer ce dossier dans le répertoire -ext. Ne modifiez pas directement les modèles de requête de HCL Commerce.
-
Créez un fichier de modèle de requête personnalisé pour vos instructions SQL directes :
- Cliquez sur
- Attribuez au fichier de modèle de requête personnalisé le nom : wc-query-utilities.tpl.
- Cliquez sur Terminer.
- Le cas échéant, créez des définitions de symboles dans un bloc BEGIN_SYMBOL_DEFINITIONS/END_SYMBOL_DEFINITIONS. Ces définitions sont discutées en détail dans la description de la syntaxe de Fichier de modèle de requête.
-
Créez un bloc BEGIN_SQL_STATEMENT / END_SQL_STATEMENT vide à l'aide des lignes suivantes :
BEGIN_SQL_STATEMENT name= myStatementName base_table= BASETABLENAME sql= END_SQL_STATEMENT- Définissez myStatementName d'après le nom de votre instruction SQL. Ce nom sera utilisé lorsque vous appellerez l'instruction directement dans votre code Java à l'aide de la classe JDBCQueryService.
- Définissez BASETABLENAME d'après le nom de la table de base à laquelle vous accédez.
-
Ajoutez votre code SQL dans la partie
sql=du bloc. Ce code SQL doit suivre l'un des formats d'instruction pris en charge présenté dans le tableau suivant :Type d'instruction Formats d'instruction pris en charge Instruction SELECT SELECTIONNER PARMI TABLE_NAME [OU <SEARCH CONDITION>] Instruction de mise à jour METTRE À JOUR TABLE_NAME DEFINIR COL_1=<VALUE EXPRESSION 1>, COL_2=<VALUE EXPRESSION 2>, ... COL_N=<VALUE EXPRESSION N> [OU <SEARCH CONDITION>] Instruction de suppression SUPPRIMER DE TABLE_NAME [OU <SEARCH CONDITION>] Instruction d'insertion - INSÉRER DE TABLE_NAME [(COL_1, COL_2, ... COL_N)] VALEURS (<VALUE EXPRESSION 1>, <VALUE EXPRESSION 2>, ... <VALUE EXPRESSION N>)
- INSERER DANS TABLE_NAME [(COL_1, COL_2, ... COL_N)] SELECTIONNER COL_1, COL_2, ... DE TABLE_NAME T1 [OU <SEARCH CONDITION>]
<VALUE EXPRESSION> peut être un littéral ou une expression quelconque dont l'évaluation donne une valeur (telle qu'un bloc d'instruction CASE). Cependant, <VALUE EXPRESSION> ne peut pas être une instruction de sous-requête (subselect).Remarque : Si des chaînes littérales dans les données de votre <VALUE EXPRESSION>, ou de vos noms de colonne/table personnalisés, comportent des mots clés SQL, l'analyseur SQL JDBC interne lira incorrectement le code SQL et renverra une exception. Vous pouvez utiliser des marqueurs de paramètre au lieu de chaînes littérales, comme discuté dans la rubrique Paramètres SQL.<SEARCH CONDITION> n'est pas soumise aux restrictions s'appliquant à <VALUE EXPRESSION> et peut contenir une condition de recherche SQL valide quelconque.
Exemple
L'exemple suivant présente une instruction SQL directe de mise à jour prise en charge, suivant le format UPDATE <TABLE NAME> SET COL_1=<VALUE EXPRESSION 1> WHERE < SEARCH CONDITION>.
BEGIN_SQL_STATEMENT
name=IBM_Update_TopCatGroupSequence
base_table=CATTOGRP
sql= UPDATE CATTOGRP
SET CATTOGRP.SEQUENCE = ?sequence?
WHERE CATTOGRP.CATGROUP_ID IN (?catalogGroupID?) AND CATTOGRP.CATALOG_ID = ?catalogID?
END_SQL_STATEMENT