powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC - ExecuteQuery для запуска процедуры
24 сообщений из 24, страница 1 из 1
JDBC - ExecuteQuery для запуска процедуры
    #39312197
lsandry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги.

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

Нужно перед выполнением отчета передать управление процедуре, передва ей параметр для заполнения временной таблицы.

Повесить триггер не получилось.
Сформировать строчку, чтобы передать на вход ExecuteQuery корректно тоже не смог (ну и не смогу "в лоб")

Спасибо.

З.Ы. Варианты использовать Execute или ExecuteUpdate не предлагайте. Была бы возможность, не было бы вопроса.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312199
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsandry,

Можно создать функцию и дёрнуть её через SELECT, а функцией делегировать вызов хранимки.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312206
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 12-ом Oracle вроде можно. Где-то был пример в подфоруме Oracle.

До 12-ого, как предложил Blazkowicz.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312208
lsandry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz

Спасибо
Направление понял но пока не нагуглил решение.

Если можно, ткни пальцем как?
DBMS_EXECUTE в функции?
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312220
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsandryDBMS_EXECUTE в функции?
Нафига какой-то DBMS_EXECUTE ?
Код: plsql
1.
2.
3.
4.
5.
function my_function() return number is
begin
  procedure(.....);
  return 0;
end;



Разумеется, если внутри вызываемой процедуры нет COMMIT'а/ROLLBACK'а. Если есть COMMIT/ROLLBACK - читать про автономные транзакции IMHO
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312221
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsandry,

Да, вроде, просто имя процедуры. Если есть параметры, то их в скобки.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312284
lsandry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коммиты есть :(
Заполнение временной таблицы. Так как непонятно что с сессиями, на всякий случай коммичу.

Оракл 10 и 11.
Не 12.

Если я все правильно понимаю, то только автономные транзакции?
Или еще есть варианты чтобы попробовать?
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312324
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsandryТак как непонятно что с сессиями
когда вызовут два отчёта одновременно, тогда может Иванов получить отчет Петрова.
Пробуйте без временных таблиц.
Ну или отчёт при запуске САМ готовит себе данные.
Или....
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312356
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, я конечно сейчас пьян, но лично я вообще не понял, что ты имеешь в виду.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312474
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsandryИз приложения есть доступ по JDBC для отчетов и единстенный доступный метод ExecuteQuery.

А CallableStatement почему нельзя?
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312476
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
))
Каждый работает в своей сессии чтобы данные и запросы не пересекались.
За этим следит СУБД+JDBC.
Оптимально чтобы сам отчётник в одной сессии при запуске всё собирал и вызывал.
Отсюда следует, что транзакции длинные и коммиты не нужны + временная табла на сессию (после закрытия уничтожается СУБД).
Но лучше без временной, а одним мега большим запросом.
ТС не сказал, что у него почему то не получилось одним запросом без процедуры.
А такие ограничения лучше сразу писать в начале топика.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312482
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевА CallableStatement почему нельзя?
Потому что он JDBC на прямую не использует, а скармливает запрос в отчет, который делает executeQuery().
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312483
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Но лучше без временной, а одним мега большим запросом.
Может человеку надо 10 разных отчетов по одной временной табличке?
Десять раз ее формировать? Да еще и согласованные на один момент времени?
Можно, конечно, но лучше не будет. :)
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312488
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Ну тогда, Petro прав и надо переделать отчет, чтоб без временной таблички. Долго наверное будет... :)
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312490
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевМожет человеку надо 10 разных отчетов по одной временной табличке?
может. Но это уже оптимизация Подсистемы отчётов.
Зачем гадать.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312592
lsandry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасиб всем.
Читаю про автономные транзакции.

Сорри что сразу описал все по минимуму. Не хотел грузить лишними данными.

Процедура генерит данные по ключу (параметру), который передается на вход процедуре, поэтому если Вася и Петя просят отчет по разным ключам (параметрам) - они получат свои данные вне зависимости от времени выполнения отчета.
Процедура первым делом чистит таблицу по своему ключу, дабы данные не задваивались и удалить неактуальную инфу.
Если ключи совпадут (отчет по одним и тем же данным) - ну тогда круто. Оба пользователя получат оба свои данные.
Есть шанс первому - получить неполные данные (либо пустые) но не думаю что это проблема. Пнет отчет повторно, раз такой "счастливый".

Про варианты вызова - да, абсолютно правильно. Я кормлю запрос репорт серверу, который возвращет мне отчет.
Но сервер использует запрос ExecuteQuery, для получения данных, который не позволяет пинать процедуры и запросы так как мне нужно.
Перелопачивать архитектуру для добавления одного отчета, в ущерб надежности и стандартизации - желания нет.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312623
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
function my_function() return number is
  pragma autonomous_transaction;
begin
  procedure(.....);
  commit;
  return 0;
end;
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312755
lsandry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.

Чуть не так как написал Dmitry у меня заработало.
Вариант Дмитрия не тестил.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312860
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть я не очень понимаю чего хочется ТС, но разве не поможет:
stmt.executeQuery("SELECT PROCEDURE_NAME() FROM DUAL");
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312978
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirМожет быть я не очень понимаю чего хочется ТС, но разве не поможет:
stmt.executeQuery("SELECT PROCEDURE_NAME() FROM DUAL");
Тогда это должна быть не процедура, а функция )))
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312995
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsandryПерелопачивать архитектуру для добавления одного отчета, в ущерб надежности и стандартизации - желания нет.
только не надо лабуду какую то писать.
Был задан вопрос - что такого делает процедура чего нельзя получить боооольшим запросом?
Ходит курсором по строкам и перебрасывает из одной ячейки во временную таблу?
...
А уже после ответа можно и решать про надежность и стандартизацию и велосипед.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39312996
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lsandryЧитаю про автономные транзакции.
автономные применяют в триггерах для логирования.
Чтобы при откате транзакции, запись в логах всё таки осталась.
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39313171
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123автономные применяют в триггерах для логирования.
А так же и для того, чтоб select мог изменить данные. :)
Ибо Оракул считает, что "ORA-14551: cannot perform a DML operation inside a query"
...
Рейтинг: 0 / 0
JDBC - ExecuteQuery для запуска процедуры
    #39313187
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Был задан вопрос - что такого делает процедура чего нельзя получить боооольшим запросом?

Может у TC отчет, что-то типа jasper report. Который состоит из иерархии отчетов. И что-бы на каждом новом уровне не гонять заного этот большой запрос, иногда, проще засунуть результат во временную.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC - ExecuteQuery для запуска процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]