Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL) / 11 сообщений из 11, страница 1 из 1
09.01.2018, 00:14
    #39580756
rtyts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
Всем здравия! Вопрос и ситуация таковы:
1. переходим (Заказчик) с MySQL на Oracle 11g;
2. упрощённо - данные от БД идут на веб страничку, через JAVA код. То есть раньше, подключившись к MySQL, в классе JAVA запускалось:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
Statement st = con.createStatement();
            ResultSet res = st.executeQuery("{call lspGetDataDec('"+dateSelected+"',"+areaID+")}");
             while (res.next()) {
                dbObj = new DBObjBaseStd();
                dbObj.setDecision1(res.getString("decision1"));
                dbObj.setDecision2(res.getString("decision2"));
                dbObj.setDecision3(res.getString("decision3"));
                dbObj.setDecision4(res.getString("decision4"));
....



Процедура авторlspGetDataDec выдает выборку в несколько тысяч строк. Эти строки получал сервлет и благополучно отправлял *.jsp с табличкой строк клиентскому браузеру.
Задача сегодня:
1. всё перегнать на Oracle;
2. Следуя бизнес-правилам, одно из которых, использование ХП (а не select-ов например)

Но вот незадача, как я успел разобраться в Oracle ХП не возвращают наборы строк вообще.
Раскопал такое решение но в виду того, что в Oracle я начинающий - не могу оценить качество данного решения и камни в будущем.
Ещё попробовал с функцией, код нашёл на SO:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create function test_cursor 
            return sys_refcursor
            is
                    c_result sys_refcursor;
            begin
                    open c_result for
                    select * from dual;
                    return c_result;
            end;


Читаю Фейрштейн/Прибыл но банально не успеваю пока всё переварить.
sys_refcursor потестил на своей БД и ПО - пашет, как функция, но не пойму выйдет ли это с ХП?
В общем, нужен совет. Может другие варианты кто-нибудь предложит? Буду рад.
Спасибо.
...
Рейтинг: 0 / 0
09.01.2018, 01:05
    #39580770
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
rtytsпашет, как функция, но не пойму выйдет ли это с ХП?Дочитай книгу, перевари. Может что-то из переваренного и выйдет... а может и запор случится.
Только зачем тебе оборачивать запрос в "ХП"?
...
Рейтинг: 0 / 0
09.01.2018, 01:10
    #39580772
rtyts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
Хреновый Программист , заказчик хочет, чтобы всё было в хп. как раньше. б-правило такое. код java приложения должен поменяться по-минимуму, а там всё было сделано через хп. писать и выполнять селект из java не разрешают, если вы об этом.
...
Рейтинг: 0 / 0
09.01.2018, 03:00
    #39580781
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
rtytsпоменяться по-минимумуВ принципе можно, но тогда Ферштейн еще не Прибыл, а вот 11g уже уехал. Читай про Support for Implicit Results.
...
Рейтинг: 0 / 0
17.01.2018, 10:50
    #39585576
rtyts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
блин, неужели нет какого-то очевидного решения задачи выборки строк из DB Oracle? какой-то признанной хорошей практики?
В нашей текущей DB выборка набора строк в java web app - это наверное 80% задачи всей базы.
...
Рейтинг: 0 / 0
17.01.2018, 10:55
    #39585583
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
rtytsблин, неужели нет какого-то очевидного решения задачи выборки строк из DB Oracle? какой-то признанной хорошей практики?
В нашей текущей DB выборка набора строк в java web app - это наверное 80% задачи всей базы.
книжку-то дочитал? информацию переварил?
...
Рейтинг: 0 / 0
17.01.2018, 10:57
    #39585585
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
rtytsблин, неужели нет какого-то очевидного решения задачи выборки строк из DB Oracle? какой-то признанной хорошей практики?
Использование ХП для выборок сложно назвать "признанной хорошей практикой".
Но возможность такая в 11g (странный выбор на сегодня) есть.
1. Вернуть из ХП курсор, который профетчить клиентом
2. Использовать pipelined функцию
...
Рейтинг: 0 / 0
17.01.2018, 11:03
    #39585594
rtyts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
книжку-то дочитал? информацию переварил?
пока нет. корпоратив затяжной был, потом на другой проект отвлекался. сейчас вот вернулся опять к ораклу. продолжаю читать :)

1. Вернуть из ХП курсор, который профетчить клиентом
для этого надо цикл будет на клиенте делать?
...
Рейтинг: 0 / 0
17.01.2018, 11:08
    #39585598
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
rtytsдля этого надо цикл будет на клиенте делать?
Как и в случае обычного select
...
Рейтинг: 0 / 0
17.01.2018, 11:24
    #39585611
rtyts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
andrey_anonymous, ок, спасибо!
...
Рейтинг: 0 / 0
01.02.2018, 14:23
    #39594922
rtyts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL)
Отвечу сам себе, может кому пригодится.
Перебрав разные варианты, лично я остановился на табличной функции.
От ХП всё таки ушёл, но изменения в Java коде оказались минимальны и Заказчика устроило.
Базовый пример, с которого делал я.
Итак создал пакет:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR REPLACE 
PACKAGE my_PKG AS 

  TYPE rcd_getRows IS RECORD(
    l_a myTable.a%TYPE,
    l_b myTable.b%TYPE,
    l_c myTable.c%TYPE,
  );
  
  TYPE tbl_tableName  IS TABLE OF rcd_getRows;
  
  FUNCTION fnc_getRows (prm_1 myTable.a%TYPE DEFAULT NULL) RETURN tbl_tableName  pipelined;

END my_PKG;



Потом код функции fnc_getRows в теле пакета:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE
PACKAGE BODY my_PKG AS

FUNCTION fnc_getRows (prm_1 myTable.a%TYPE DEFAULT NULL) RETURN tbl_tableName  
 pipelined AS
 BEGIN
 for curr in
 (
 SELECT * FROM sourceTable
 ) loop
 pipe row (curr);
 end loop;
  END fnc_getRows;

END my_PKG



После, вот таким запросом
Код: plsql
1.
SELECT * FROM TABLE(my_PKG.fnc_getRows);


получаю результат в виде таблицы, как в старом добром MySQL. Сама функция fnc_getRows в реальной БД намного сложнее и больше входных параметров. По этой причине простой SQL запрос SELECT не подошёл.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Результирующий набор строк из Oracle DB в JAVA код (переход с MySQL) / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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