根据这篇(相当古老的)文章,ODBC 转义序列背后的原理是
ODBC 驱动程序读取转义序列并将其转换为特定于 DBMS 的语法,然后再将查询发送到数据库
但是,如果我尝试以下
数据库服务器
CREATE PROCEDURE foo_bar
AS
BEGIN
SELECT {fn concat ('foo', 'bar')};
END
我的SQL
DELIMITER $$
CREATE PROCEDURE foo_bar()
BEGIN
SELECT {fn concat ('foo', 'bar')};
END
转义序列在对象定义中保持未翻译状态,调用例程工作正常。这向我表明 RDBMS 本身可以理解语法而不是依赖翻译,因此将独立于连接方法工作。这种理解是否正确?如果正确,这是否也适用于 Oracle?
这似乎只能通过 JDBC 连接工作。使用基于 Java/JDBC 的查询工具时,您的 SELECT 可与 Oracle、PostgreSQL 和 DB2 一起使用。
使用本机工具此语句会引发错误:
PostgreSQL 也是如此:
和 DB2: