2017-02-06 30 views
0

データベースに複数の行を挿入するために値をループしているcfqueryがあります。 INSERTの後にgeneratedKeysのリストが必要なので、ループ内で複数のINSERTクエリを生成する代わりに、このようにしなければなりません。しかし、私の質問は今、以下のエラーを投げています。エラーの意味を知っていますが、クエリに基づいて意味をなさないのです。クエリの挿入エラー:列の数が行1の値の数と一致しません

問合せ:

<cfquery datasource="#OLMSdatasourceWrite#" result="myResult"> 
    INSERT INTO OLMS_Data_RatioScenarios 
    (
     OLMS_Account_ID, 
     OLMS_RatioScenario_Name 
    ) 
    VALUES 
    (
    <cfset numItems = ListLen(AccountListWithSettings)> 
    <cfset i = 1> 

    <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 i lt numItems> 
      , 
     </cfif> 

     <cfset i++> 
    </cfloop> 
    ) 
</cfquery> 

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

エラー:

Root Cause:java.sql.SQLException: Column count doesn't match value count at row 1 
SQL: INSERT INTO OLMS_Data_RatioScenarios (OLMS_Account_ID, OLMS_RatioScenario_Name) 
VALUES (((param 1) , (param 2)) , ((param 3) , (param 4)) , ((param 5) , (param 6))) 
+0

ご生成VALUES句を見てみましょう。 SQLは有効ではありません。括弧が多すぎます。 SQLを動的に生成する際には、生成された文字列を最初に出力することがよくあります。「 INSERT INTO ....」は、その種の構文エラーをより簡単に見つけ出します。さらに、必要に応じてSQLをコピーしてIDEに貼り付けることもできます。 – Leigh

+0

@Leighあなたは詳細を教えてください – Charles

+0

エラーメッセージのSQL部分をテキストエディタにコピーして、かっこで問題が見えるように書式を設定してください。 –

答えて

0

修正されたコード:

<cfquery datasource="#OLMSdatasourceWrite#" result="myResult"> 
    INSERT INTO OLMS_Data_RatioScenarios 
    (
     OLMS_Account_ID, 
     OLMS_RatioScenario_Name 
    ) 
    VALUES 
    <cfset numItems = ListLen(AccountListWithSettings)> 
    <cfset i = 1> 
    <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 i lt numItems> 
      , 
     </cfif> 

     <cfset i++> 
    </cfloop> 
</cfquery> 
関連する問題