簡體   English   中英

使用ColdFusion-循環過程

[英]Working with ColdFusion - Looping a procedure

我想知道是否有更好的方法來做我正在做的事情。 它有效,但我認為應該有更好的方法。 例如,如果我的查詢結果記錄為2萬條記錄,則提示“請求已超出允許的時間限制標簽:CFQUERY”

            <cfquery name="GetMyRecords" datasource="MyDSN">
              SELECT idnumber,PrefAddr,...more colums
              FROM um_valid
              WHERE userid = <cfqueryparam cfsqltype="cf_sql_varchar"
                                         value="#session.userid#">
              AND session_id = <cfqueryparam cfsqltype="cf_sql_numeric" 
                                         value="#session.Session_Id#">
              AND status NOT IN (<cfqueryparam cfsqltype="cf_sql_varchar" 

              value="X,C">)
            </cfquery>

我也有一個現有的存儲過程,該過程期望查詢中的某些值能夠執行預期的操作。 所以我像這樣循環:

<cfloop query="GetMyRecords">
   <cfstoredproc procedure="MyProc" datasource="MyDSN">
      <cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" 
                       dbvarname="@id_number" value="#Trim(idnumber)#">
      <cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" 
                    dbvarname="@Aaddr_pref_ind" value="#Trim(PrefAddr)#">
      ----- still more params to be passed----
   </cfstoredproc>
</cfloop>

ColdFusion是否有更好的技術來避免超時錯誤或500錯誤?

就像提到的另一個發布者一樣,減少數據庫調用的數量應該是您的優先事項。 我建議在第一個查詢中加入數據(如果可能),而不是循環查詢並再次查詢。

要解決時間問題,您可以在頁面中放置requestTimeout以覆蓋默認超時。 時間以秒為單位。

<cfsetting requestTimeOut = "600"> 

請參閱此說明。

您當前的方法是進行1查詢,其中包含n條記錄。 然后遍歷該記錄集,為每個記錄調用查詢。 這將導致您每個請求調用n + 1查詢。 隨着第一個查詢返回的數據量增加,對數據庫進行的總體查詢量也將增加。 對於您的情況,您嘗試在單個請求中對數據庫進行20,001調用。

理想情況下,您需要一個解決方案,該解決方案包括使用適當優化的查詢來調用存儲過程,該查詢可以在單個記錄集中返回所有數據。 如果不需要同時將所有數據轉儲到頁面上,請創建一個分頁查詢,該查詢將返回每頁x記錄數。 然后,用戶可以逐頁瀏覽查詢或提供帶有其他過濾器的搜索表單,以允許用戶減小返回記錄的總體大小。

需要查看完整的查詢來為您提供示例,但是總的來說,這對CF確實很有用,可以幫助您!

您需要查看名為group的屬性。 這使您可以指定一列來對輸出進行分組。 實際上,這將消除您完全調用存儲的proc的需要。

它的工作方式是讓您基於分組創建子集輸出。 因此,例如,您可以使用自己的ID並輸出該組。

您也可以有多個,並且每個顯示都有頁眉和頁腳部分,以用於顯示或邏輯操作。

這樣一來,您可以查詢整個數據集,然后在循環中進行操作,而不必進行子查詢,這是非常低效的,值得一試。

這是ColdFusion非常獨特的功能,請查看!

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7ff6.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM