De acordo com este artigo (bastante antigo), o princípio por trás das sequências de escape ODBC é que
O driver ODBC lê a sequência de escape e a traduz na sintaxe específica do DBMS antes de enviar a consulta ao banco de dados
No entanto, se eu tentar o seguinte
servidor SQL
CREATE PROCEDURE foo_bar
AS
BEGIN
SELECT {fn concat ('foo', 'bar')};
END
meu SQL
DELIMITER $$
CREATE PROCEDURE foo_bar()
BEGIN
SELECT {fn concat ('foo', 'bar')};
END
As sequências de escape permanecem não traduzidas na definição do objeto e chamar as rotinas funciona bem. Isso indica para mim que os próprios RDBMSs entendem nativamente a sintaxe, em vez de depender da tradução, portanto funcionarão independentemente do método de conexão. Esse entendimento está correto e, em caso afirmativo, também se aplica ao Oracle?
Isso parece funcionar apenas por meio de uma conexão JDBC. Seu SELECT funciona com Oracle, PostgreSQL e DB2 ao usar uma ferramenta de consulta baseada em Java/JDBC.
Usando as ferramentas nativas, esta instrução gera um erro:
O mesmo vale para o PostgreSQL:
e DB2: