如何查找列名是否是跨各种数据库的保留关键字

问题描述 投票:6回答:4

我们有一个遗留模式文件,其中包含以下列名称,如果我们将应用程序移植到h2,mysql,postgres或oracle,我们想了解它们是否会导致问题。

例如,我如何知道在下面列出的数据库中使用它是否正常。有没有什么好的工具可以对此进行初步检查?

key
when
size
type
count
from
with
mysql oracle postgresql h2
4个回答

1
投票

我不知道任何表,但如果您有表名和列名列表,则应该不难过滤它们。

Oracle在其数据字典中有一个V$RESERVED_WORDS视图。

您所要做的就是将您的表/列名称与此匹配:只需将它们添加到临时表并使用tis视图连接即可。如果您有查询结果,那么您有一个保留字。

其他数据库也可以具有这样的元数据。


1
投票

DatabaseMetaData.getSQLKeywords()应该返回此数据库中以逗号分隔的保留字列表。但是,此列表不包含ANSI SQL关键字,例如FROM。我不完全确定这是否真的包含所有数据库中的所有关键字。

对于H2,关键字列表记录在Keywords / Reserved Words下。


0
投票

找出答案的最简单方法是尝试。您提到的所有数据库管理系统都是开源的或免费下载和试用。通过它们运行带有CREATE TABLE语句的SQL脚本,看看会发生什么。

在不参考实际SQL脚本的情况下询问此问题的一个问题是,某些解析器具有各种类型的保留字。一些关键词可能被列为关键词,但可能仍然可以用作列名,但可能不会在后来的棘手的SELECT语句中使用。因此,最好先尝试一下。

我建议根据你给出的列表,它在大多数SQL系统中都不起作用。但是你可以始终一致地双引号标识符以避开关键字问题。 (但是,您需要在ANSI模式下运行MySQL。)

© www.soinside.com 2019 - 2024. All rights reserved.