是否有便携式SQL这样的东西?

Luí*_*eza 14 sql portability

根据我的经验,即使有一个SQL标准,在很多RDBMS上编写可以不修改的SQL也很困难.

因此,我想知道是否存在可用于所有主要RDBMS的SQL子集(包括DDL,模式等),包括PostgreSQL,MySQL,SQL Server以及最后但并非最不重要的Oracle.编写可移植SQL时应该避免哪些陷阱?

那么,是否有一个项目的目标是将有效的SQL子集转换为所有这些供应商使用的特定方言?我知道Hibernate和其他ORM系统必须这样做,但我不想要ORM,我想编写直接数据库SQL.

谢谢!

a_h*_*ame 5

问题是一些 DBMS 甚至忽略了最简单的标准(例如引用字符或字符串连接)。

因此以下(100% ANSI SQL)不会在每个 DBMS 上运行:

UPDATE some_table
    SET some_column = some_column || '_more_data';
Run Code Online (Sandbox Code Playgroud)

而且我什至没有考虑更高级的 SQL 标准,如递归公用表表达式(即使支持它的那些并不总是遵守)或窗口函数(有些只实现一个非常狭窄的子集,有些不支持所有选项)。

关于DDL,存在数据类型的问题。DATE到处都不一样,就像TIMESTAMP. 并非每个 DBMS 都有BOOLEAN类型或TIME类型。

当涉及到约束或域时,您会得到更多差异。

所以简而言之:除非你真的、真的需要独立于 DBMS,否则不要打扰它。

说了这么多:如果您确实可以在专有语法和标准语法之间进行选择,请选择标准语法(OUTER JOINvs (+)or *=decodevs CASEnvlvs.coalesce等等)。