2017-02-06 9 views
1

J'essaie de boucler une requête d'insertion. Je suis en boucle sur les valeurs pour les résultats de retour sont dans une liste.La boucle Coldfusion sur les valeurs de requête d'insertion

<cfquery datasource="#OLMSdatasourceWrite#" result="myResult"> 
    INSERT INTO OLMS_Data_RatioScenarios 
    (
     OLMS_Account_ID, 
     OLMS_RatioScenario_Name 
    ) 
    VALUES 
    (
    <cfloop list="#AccountListWithSettings#" index="CurrentAccount"> 
     (<cfqueryparam cfsqltype="cf_sql_numeric" value="#CurrentAccount#" maxlength="255">, <cfqueryparam cfsqltype="cf_sql_clob" value="#requestBody.value#" maxlength="255">) 
     <cfif CurrentAccount GT 1> 
      , 
     </cfif> 
    </cfloop> 
    ) 
</cfquery> 

<cfoutput>Inserted ID is: #myResult.generatedkey#</cfoutput> 

Le problème im en cours d'exécution en voici qu'il continue de mettre un « » après la dernière itération

VALUES (((param 1) , (param 2)) , ((param 3) , (param 4)) , ((param 5) , (param 6)) ,) 

je besoin d'aide figureing la déclaration cfif pour empêcher cela (REMARQUE: si je mets le cfif au-dessus de la requête params il a commencé la boucle comme (, (param 1), (param 2),

+0

Vous avez votre réponse. Je vais simplement souligner que vous devriez vérifier ce que l'attribut 'index' de la boucle dans une liste représente réellement. De même, si vous insérez plus d'un enregistrement, êtes-vous sûr que 'myResult.generatedkey' vous donnera ce dont vous avez besoin? –

Répondre

3

Vous devez suivre le nombre d'éléments dans la liste et vérifier que la position de l'élément actuel est inférieure à la longueur de la liste:

<cfset numItems = ListLen(AccountListWithSettings)> 
<cfset i = 1> 

<cfloop list="#AccountListWithSettings#" index="CurrentAccount"> 
    <!--- Stuff inside of loop ---> 

    <!--- ...and then ---> 
    <cfif i lt numItems> 
    , 
    </cfif> 

    <cfset i++> 
</cfloop> 

Mise à jour, pour @ Commentaire de Leigh: vous pouvez également adopter cette approche. Je l'ajoute comme une deuxième approche parce que même si c'est plus simple, ce n'est généralement pas la façon dont mon esprit réfléchit à ce problème particulier. À chacun ses goûts. :)

<cfset i = 1> 

<cfloop list="#AccountListWithSettings#" index="CurrentAccount"> 
    <cfif i gt 1> 
    , 
    </cfif> 

    <!--- Stuff inside of loop ---> 

    <cfset i++> 
</cfloop> 
+0

thats pour le retour rapide, je l'ai changé et il a jeté cette erreur: Type: Expression Message: Vous avez tenté de déréférencer une variable scalaire de type classe java.lang.String comme une structure avec des membres. Une exception a été interceptée, tapez = Expression – Charles

+0

Oups, je la regardais comme une requête. Besoin de finir ce café. Mettra à jour ma réponse. –

+0

Astuce: Vous pouvez simplifier un peu et éliminer le contrôle numItems en utilisant ',' et en le déplaçant au début de la boucle. – Leigh