Синтаксис «перехода»(escape syntax) поддерживает средства, которые обычно поддерживаются базами данных, но в разных вариантах, в зависимости от конкретного синтаксиса базы данных. Драйвер JDBC отвечает ща преобразование синтаксиса перехода в синтаксис конкретной базы данных.
Переходы предусмотрены для следующих средств:
- литералы времени и даты;
- вызов скалярных функций;
- вызов хранимых процедур;
- внешние соединения;
- символ перехода в операциях LIKE.
Литералы времени и даты сильно отличаются от одной базы данных к другой. Чтобы вставить литерал времени или даты, нужно определить значение в формате ISO 8601(http://www.cl.cam.ac.uk/~mgk25/iso-time.html). После этого драйвер преобразует литерал в родной формат. Для значений DATE, TIME и TIMESTAMP используются литералы d, t и ts:
1 2 3 |
{d '2014-02-07'} {t '23:59:59'} {ts '2014-02-07 23:59:59.999'} |
Скалярной называется функция, возвращающая одно значение. В базах данных используется больше множество функций, но с разными именами. В спецификации JDBC указаны стандартные имена, преобразованные в имена, специфические для баз данных. Чтобы вызвать функцию, внедрите стандартное имя функции и аргументы, как показано ниже:
1 2 |
{fn left(?, 20)} {fn user()} |
В спецификации JDBC можно найти полный список поддерживаемых имен функций. Хранимой процедурой(stored procedure) называется процедура, которая выполняется в базе данных, и которая написана на языке, специфичном для базы данных. Чтобы вызвать хранимую процедуру, используете переход call. Если процедура не имеет параметров, то использовать скобки не нужно.
Чтобы сохранить возвращаемое значение, используете символ =:
1 2 3 |
{call PROC1(?, ?)} {call PROC2} {call ? = PROC3(?)} |
Внешнее соединения(outer join) двух таблиц не требует, чтобы строки в каждой таблице совпадали в соответствии с условием соединения. Например, запрос
1 |
SELECT * FROM {oj Books LEFT OUTER JOIN Publishers ON Books.Publisher_Id = Publisher.Publisher_Id} |
содержит книги, в которых Publisher_Id не имеет совпадений в таблице Publishers, со значениями NULL, показывающими, что совпадения отсутствуют. Вам может потребоваться RIGHT OUTER JOIN, чтобы включить издательства, без совпадающих книг, или FULL OUTER JOIN, чтобы вернуть оба типа. Синтаксис перехода необходим по той причине, что не все базы данных используют стандартное обозначение для этих соединений.
Наконец, символы _ и % имеют специальное значение в операции LIKE, чтобы обозначить совпадение с одним символом или последовательностью символов. Стандартного способа их литерального использования не существует. Если вы хотите сопоставить все строки, содержащие символ _, применяйте следующую конструкцию:
1 |
... WHERE ? LIKE %!_% {escape '!'} |
Здесь мы определили ! как символ перехода. Комбинация !_ обозначает литеральный символ подчеркивания.