【发布时间】:2021-07-21 23:55:53
【问题描述】:
我有一个可以使用 Oracle、MySQL 或 SQL Server 的应用程序。在一些查询中,我需要使用“DUAL”表,例如:
SELECT (CASE WHEN EXISTS (SELECT 1 FROM MYTABLE) THEN 1 ELSE 0 END) FROM DUAL
但是,SQL Server 不支持“DUAL”表。
是否有我可以使用的 SQL 语句来检查“DUAL”表是否受支持?这样,如果不支持,我可以分支到不同的查询。
我尝试查询 INFORMATION_SCHEMA.TABLES,但那里没有列出“DUAL”表,即使在支持它的 Oracle 和 MySQL 中也是如此。
【问题讨论】:
-
正如表格不标准一样,检查哪些表格存在的语法也不标准。许多其他函数、表达式等的语法也不是。因此,您的 SQL 语句应该已经针对您运行的平台进行了定制(不仅仅是使用 DUAL)。为什么您的应用程序代码还不知道服务器是什么平台?这感觉就像您试图从一个更大的问题中解决一个较小的细节。
-
@MatBailie 我的应用程序确实知道该平台,但我想让数据库告诉我是否支持 DUAL,这样如果我支持另一个数据库,我就不必修改我的代码。
-
但是无论如何您都必须修改代码,因为每个平台上的检查本身都会不同。 if 或 switch 有什么问题?如果你知道它是 MySQL 或 Oracle,你知道你可以使用
dual,否则你不能,除非它是手动创建的。 -
@TheImpaler 我从来没有说过“我的应用程序不知道平台”。你看错了。
-
编写可在多个品牌的 RDBMS 产品之间移植的 SQL 代码在很大程度上是一个神话。我实现了一个支持 Oracle、Microsoft、DB2、MySQL、PostgreSQL 和 SQLite 的数据库库。最终必须编写一个适配器模式,并为每个品牌定制 SQL。
标签: mysql sql sql-server oracle database-table