According to this (quite old) article the principle behind ODBC escape sequences is that
The ODBC driver reads the escape sequence and translates it into the DBMS-specific syntax before sending the query to the database
However if I try the following
SQL Server
CREATE PROCEDURE foo_bar
AS
BEGIN
SELECT {fn concat ('foo', 'bar')};
END
My SQL
DELIMITER $$
CREATE PROCEDURE foo_bar()
BEGIN
SELECT {fn concat ('foo', 'bar')};
END
The escape sequences remain untranslated in the object definition and calling the routines works fine. That indicates to me that the RDBMSs themselves natively understand the syntax rather than relying on translation so will work independent of connection method. Is that understanding correct and if so does this also apply to Oracle?