2011-05-31 25 views

Respuesta

0

Tu entrada tiene varias etiquetas DB, y cada uno tiene catálogos del sistema y/o un esquema de información que le permiten conocer la lista de los procedimientos. ¿Qué tabla/vista a la pregunta será diferente de un motor de base de datos a la siguiente, sin embargo ... (pg_proc Por ejemplo, en Postgres que UNIRÍA y pg_aggregate, ya INFORMATION_SCHEMA.ROUTINES no le dirán cuales son agregados procs.)

En general, es seguro asumir que las funciones agregadas típicas (sum(), count(), avg() ...) existen en todas las implementaciones de bases de datos.

La única excepción Soy consciente de Postgres es, que no soporta any()/some() debido a ambiguity in the syntax:

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

En SQL Server se puede consultar XML que está en el directorio de instalación:

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) 

Donde después de la instrucción BULK debe dar su carpeta (la diferencia es principalmente Archivos de programa "y" Program_Files (x86) "y la versión del servidor SQL (100 es 2008 en el ejemplo)

0

No hay nada fullproof, ya que no es parte de la especificación JDBC. Si no sabe qué motor de base de datos está utilizando en tiempo de ejecución, la mejor opción es enviar una consulta de prueba a la base de datos y verificar si falló o no antes de usar cualquier función agregada que no sea compatible.

+0

Muchas gracias a todos, mi aplicación necesita lista de funciones agregadas con el apoyo de DBMS subyacente publicar. Estoy buscando tales métodos para sql-server, oracle, sybase y mysql. No forma parte de la especificación JDBC, por lo que estoy buscando consultas individuales para estos dbs. La última opción sería mantener esta lista en un archivo de configuración para todos los dbs. –