小编典典

适用于所有(或大多数)数据库的高效 SQL 测试查询或验证查询

all

许多数据库连接池库提供了测试其 SQL 连接是否空闲的能力。例如,JDBC
池库c3p0有一个名为
的属性preferredTestQuery,它会以配置的时间间隔在连接上执行。同样,Apache
Commons DBCP 具有validationQuery.

我见过的许多示例
查询SELECT 1;都是针对 MySQL
的,建议使用它作为测试查询的值。但是,此查询不适用于某些数据库(例如 HSQLDB,它SELECT 1需要一个FROM子句)。

是否有一个与数据库无关的查询同样有效但适用于所有 SQL 数据库?

编辑:

如果没有(似乎是这种情况),有人可以建议一组适用于各种数据库提供商的 SQL 查询吗?我的意图是根据我的数据库提供程序配置以编程方式确定我可以使用的语句。


阅读 192

收藏
2022-08-24

共1个答案

小编典典

jOOQ 手册中关于该DUAL部分列出了 jOOQselect(inline(1))查询的以下内容:

-- Access
SELECT 1 FROM (SELECT count(*) dual FROM MSysResources) AS dual

-- BigQuery, CockroachDB, Exasol, H2, Ignite, MariaDB, MySQL, PostgreSQL, 
-- Redshift, Snowflake, SQLite, SQL Server, Sybase ASE, Vertica
SELECT 1

-- MemSQL, Oracle
SELECT 1 FROM DUAL

-- CUBRID
SELECT 1 FROM db_root

-- Db2
SELECT 1 FROM SYSIBM.DUAL

-- Derby
SELECT 1 FROM SYSIBM.SYSDUMMY1

-- Firebird
SELECT 1 FROM RDB$DATABASE

-- HANA, Sybase SQL Anywhere
SELECT 1 FROM SYS.DUMMY

-- HSQLDB
SELECT 1 FROM (VALUES(1)) AS dual(dual)

-- Informix
SELECT 1 FROM (SELECT 1 AS dual FROM systables WHERE (tabid = 1)) AS dual

-- Ingres, Teradata
SELECT 1 FROM (SELECT 1 AS "dual") AS "dual"
2022-08-24