Можете ли вы поместить несколько операторов в одну строку запроса в Oracle JDBC? - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть JDBC-соединение с базой данных Oracle. Я создаю заявление. Строка SQL-запроса содержит несколько операторов, разделенных точкой с запятой, и предоставляется другой системой.

Пример:

connection.prepareStatement("SELECT * FROM A; SELECT * FROM B");

По димитров это невозможно.

Но все остальные базы данных, которые я пробовал, поддерживают это. И JDBC даже имеет поддержку для получения нескольких результатов.

У кого-нибудь есть указатели на документацию Oracle, в которой явно указано, что она не поддерживается, или есть способ заставить ее работать (без использования хранимых процедур)?

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

Для выполнения нескольких операторов:

JDBC 2.0 позволяет отправлять несколько операторов одновременно с помощью метода addBatch

См. здесь .

3 голосов
/ 30 ноября 2011

Нет, это невозможно с драйвером JDBC Oracle.

Вам придется анализировать и разбивать строку на их отдельные операторы.

Кстати: я думаю, что только базы данных, которые позволяют это, - это Microsoft SQL Server и MySQL.Что также делает их уязвимыми для определенных видов атак с использованием SQL-инъекций, которые не будут работать с Oracle или PostgreSQL.

1 голос
/ 30 ноября 2011

AFAIK большинство баз данных позволяют вам выполнять / подготавливать только один оператор на вызов выполнения или подготовки.Хотя это не очень ясно выражено, цель методов JDBC состоит в том, чтобы выполнить один оператор SQL :

sql - **an** SQL statement that may [...]

Получение нескольких наборов результатов предназначено для (оченьредкие) одиночные (!) операторы или хранимые процедуры, которые возвращают несколько результирующих наборов (как описано в javadoc Statement # execute ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...