2011-05-31 87 views

回答

0

您的文章有多個數據庫標籤,每個數據庫都有系統目錄和/或信息模式,可讓您知道過程列表。然而,要查詢的表/視圖不同於數據庫引擎,但是...(例如,在Postgres中,您將加入pg_proc和pg_aggregate,因爲information_schema.routines不會告訴您哪些特效是聚合。)

假設在所有數據庫實現中都存在典型的集合函數(sum(),count(),avg() ...)通常是安全的。

我所知道的唯一的例外是Postgres的,它不支持any()/some()由於ambiguity in the syntax

SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...; 
1

在SQL Server上,你可以查詢XML這是在安裝目錄:

DECLARE @xml XML 
SELECT @xml = x.y 
FROM OPENROWSET(BULK 'C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\SqlToolsData\1033\SQLCommonObjects.xml', SINGLE_BLOB) x(y) 

;WITH XMLNAMESPACES('http://tempuri.org/SqlCommonObjects.xsd' AS ns) 
SELECT 
Category.Name.value('ns:DisplayName[1]', 'VARCHAR(MAX)') [Category], 
[Function].Name.value('ns:Name[1]', 'VARCHAR(MAX)') [Function], 
[Function].Name.query('for $p in ns:Parameters/ns:Parameter return 
concat($p/ns:Name[1],",")').value('.', 'VARCHAR(MAX)') Parameters 

FROM @xml.nodes('//ns:Category[ns:DisplayName="Aggregate Functions"]') 
AS Category(Name) 
CROSS APPLY Category.Name.nodes('ns:Objects/ns:Function') [Function](Name) 

BULK語句後,您應該給你的文件夾(差異主要是Program Files「和」Program_Files(x86)「和SQL服務器版本(例如100是2008)

0

沒有什麼是完全的,因爲它不是JDBC規範的一部分。如果你不知道你在運行時使用了什麼數據庫引擎,最好的辦法是向數據庫提交一個測試查詢,並在使用任何可能不被支持的聚合函數之前檢查它是否失敗。

+0

非常感謝大家,我的應用程序需要發佈底層dbms支持的聚合函數列表。我正在尋找這樣的sql-server,oracle,sybase和mysql的方法。它不是JDBC規範的一部分,所以我正在尋找這些dbs的個別查詢。最後一個選項是將這個列表保存在所有dbs的配置文件中。 – 2011-06-01 07:11:32