2013年6月7日 星期五

Coldfusion 多個 query 合併

簡單的用法:
<cfquery name="q1" datasource="store1" blockFactor="100">
 select * from sales_lists where sale_date = '2013/05/02'
</cfquery>

<cfquery name="q2" datasource="store2" blockFactor="100">
 select * from sales_lists where sale_date = '2013/05/02'
</cfquery>

<cfquery name="datesales" dbtype="query">
 select * from q1
 union
 select * from q2
 order by sale_employee
</cfquery>

把多個 DB 查詢用 in memory 查詢 union 起來。

那如果是 LOOP 迴圈連續查詢的 query 呢?
那就讓 query name 不一樣就可以了,然後再用LOOP把query union 起來
<cfloop from="1" to="#ListLen(employeelist)#" index="i">
 <cfquery name="qresult#i#" datasource="db1">
  select * from employee where employee_no = '#ListGetAt(i)#'
 </cfquery>
</cfloop>

<cfquery name="combine" dbtype="query">
  <cfloop from="1" to="#ListLen(employeelist)#" index="i">
    select * from qresult#i#
    <cfif i lt ListLen(employeelist)>union</cfif>
  </cfloop>
</cfquery>

11 個回應:

Todd Li 提到...

你好,我叫Todd。想請教前輩幾個問題,最近碰到了一很麻煩的安裝問題。
我在windows 2000 Server底下安裝了coldfusion MX,安裝過程都很順利,但是當安裝完之後出了問題。也就是安裝完的當下會跳出一個coldfusion MX的administrator網頁,是呈現"Error Occurred While Processing Request"的錯誤訊息。一開始以為是IIS出了問題,後來檢查了ISAPI與CFIDE目錄的內容,發現也都沒問題,127.0.0.1也沒問題,唯獨很奇怪的一點就是,我在所有IIS目錄底下瀏覽其他副檔名都可以正常執行,但.cfm就是無法正常執行。

Todd Li 提到...

不知前輩是否曾經也遇過類似問題,感謝。

WILDOX 提到...

Re: Todd Li <8641819926099145435>
如果是administrator的路徑不能執行是否有檢查過資料夾下的權限Users是否有寫入/讀取/執行與特殊權限?

WILDOX 提到...

Re: Todd Li <8641819926099145435>
我記得"Error Occurred While Processing Request"下面還有一段錯誤描述,可以告訴我那個錯誤描述是...?

Todd Li 提到...

CFIDE目錄下(包含整個CFIDE)的administrator路徑已確認過權限有 寫入/讀取/執行/執行

Todd Li 提到...

錯誤描述為
Error Occurred While Processing Request

Please Try The Following:

Check the CFML Reference Manual to verify that you are using the correct syntax.

Search the Knowledge Base to find a solution to your problem.


Browser Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Remote Address 127.0.0.1
Referer
Date/Time 04-十二月-13 02:17 下午

Stack Trace (click to expand)



java.lang.NoClassDefFoundError
at javax.crypto.Cipher.getInstance([DashoPro-V1.2-120198])
at coldfusion.compiler.TemplateReader.decrypt(Unknown Source)
at coldfusion.compiler.TemplateReader.(Unknown Source)
at coldfusion.compiler.NeoTranslationContext.getPageReader(Unknown Source)
at coldfusion.compiler.NeoTranslator.translateJava(Unknown Source)
at coldfusion.compiler.NeoTranslator.translateJava(Unknown Source)
at coldfusion.runtime.TemplateClassLoader$1.fetch(Unknown Source)
at coldfusion.util.LruCache.get(Unknown Source)
at coldfusion.runtime.TemplateClassLoader$TemplateCache.fetchSerial(Unknown Source)
at coldfusion.util.AbstractCache.fetch(Unknown Source)
at coldfusion.util.SoftCache.get(Unknown Source)
at coldfusion.runtime.TemplateClassLoader.findClass(Unknown Source)
at coldfusion.filter.PathFilter.invoke(Unknown Source)
at coldfusion.filter.ExceptionFilter.invoke(Unknown Source)
at coldfusion.filter.ClientScopePersistenceFilter.invoke(Unknown Source)
at coldfusion.filter.BrowserFilter.invoke(Unknown Source)
at coldfusion.filter.GlobalsFilter.invoke(Unknown Source)
at coldfusion.filter.DatasourceFilter.invoke(Unknown Source)
at coldfusion.CfmServlet.service(Unknown Source)
at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:241)
at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:527)
at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:198)
at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:348)
at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:451)
at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:294)
at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

Todd Li 提到...

PS:忘了提到一點我是在VMware player底下安裝的

WILDOX 提到...

Re: Todd Li <3880873140610051831>
這個情形就我知道的解決法有3個方式,你可以朝這方向試著解決看看.

java stack 最後的錯誤是:java.lang.NoClassDefFoundError,像是呼叫使用的類別不相容或是錯誤.

1.有可能是windows版本的service pack不足引起,嘗試將windows 2000上到sp4.真的不行請嘗試安裝在windows 2003.
2.coldfusion 安裝不完整或是該版本有bug,請重新安裝或是更新版本(我不確定您使用的版本為何).
3.比較不太可能的:但是也注意一下,是否安裝JDK或JRE,如果有是否版本不相容導致?(一般而言adobe的coldfusion會內建JRE不需要額外安裝)

Todd Li 提到...

了解,感謝前輩指導。

Fong Jonathan 提到...

我還以為台灣寫CF的沒剩幾人 居然讓我找到這地方有幾個還在寫CF的

大家保持聯絡吧

上面的問題看起來是CF沒安裝成功,你用的WIN和CF都是十年前的版本,連原廠都不支援了,版本應該換新一點的吧~

所需要的資料最好是在同一個 datasource 會比較好,不然挺耗資源的 (可以用gettickcount 來觀察你的資料擷取所消耗的時間 ),當然現實情況會有意外(怪怪的老闆的怪怪的要求)

WILDOX 提到...

Re: Fong Jonathan <8850801835569697121>
OK~大家保持聯絡~