|
|
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! Необходимо из функции Java внедренной в базу Oracle вернуть массив Double Знаю такие приемы Вариант один Код: plsql 1. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plsql 1. 2. В моем случае не совсем подходит - мне необходимо создать функцию в базе Oracle без внутренней связи с Oracle-ом (архитектурные требования) т.е строка Connection conn = DriverManager.getConnection("jdbc:oracle:kprb:"); - противоречит требованиям Array arr = ((OracleConnection) conn).createArray("NVARRAY", new double[]{12d,15d}); или Array a = (Array) rs.getObject(1); ссылаются на коннект к базе для считывания типа. Вариант два - запись в строку через разделитель и создание массива в теле типа Oracle вариант примитивен Подскажите Ваши решения (буду признателен за пример) Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2016, 23:39 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_X, Вар3 - выкинуть массив, т.к массив в терминах субд это таблица из 1 колонки. Так что вар2 или 3 решайте сами. Вы бы еще json азяли или xml. Субд их тоже умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 08:18 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_HВ моем случае не совсем подходит - мне необходимо создать функцию в базе Oracle без внутренней связи с Oracle-ом (архитектурные требования) т.е строка Connection conn = DriverManager.getConnection("jdbc:oracle:kprb:"); - противоречит требованиям Строка правильная, а архитектурные требования неправильные. Значит, вас интересует как лучше сделать то, что лучше вообще не делать. Вам не нужны советы - сами сообразите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 09:30 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Partisan MHOME_HВ моем случае не совсем подходит - мне необходимо создать функцию в базе Oracle без внутренней связи с Oracle-ом (архитектурные требования) т.е строка Connection conn = DriverManager.getConnection("jdbc:oracle:kprb:"); - противоречит требованиям Строка правильная, а архитектурные требования неправильные. Значит, вас интересует как лучше сделать то, что лучше вообще не делать. Вам не нужны советы - сами сообразите. Не уверен, что строка правильная. Т.к. это Stored процедура и хардкодинг имени базы/соединения выглядит странно. Я бы попытался использовать: Код: plsql 1. Взято из https://docs.oracle.com/javase/tutorial/jdbc/basics/storedprocedures.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 15:57 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Не - не спасибо здесь все хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 17:56 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Partisan Mа архитектурные требования неправильные Это функция используется в базе, эта функция используется с интерфейсом операционки Win Операционка Интерфейс приложения (окно для ввода) -> расчетная функция -> интерфейс визуализации результата База Пользовательский тип (конструктор типа) -> расчетная функция -> пользовательский тип распаковки массива Обмен данных осуществляется через параметры функции Ссылаться непосредственно из функции на базу возможно (через ключ) на текущий момент так и реализовано, но это НЕ красиво. Код: java 1. 2. 3. В комнату надо попадать через ДВЕРИ , можно если забыли ключи (или не знаете как сделать) влезать через окно - но это не удобно ... Если есть конкретные советы буду рад услышать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 18:05 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123HOME_X, Вар3 - выкинуть массив, т.к массив в терминах субд это таблица из 1 колонки. Так что вар2 или 3 решайте сами. Вы бы еще json азяли или xml. Субд их тоже умеет. Я работаю с базой соответственно вынужден использовать терминологию и механизмы базы Если предложите что-то более конкретное буду рад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 18:06 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_X, я вообще не понимаю, что Вам и/или архитектору не нравится. Фраза "без внутренней связи с Oracle-ом" подкупает своей загадочность IMHO HOME_XLeonid Kudryavtsev, Не - не спасибо здесь все хорошо Что хорошо? Хардкодинг "kprb" в тексте функции? Я так подозреваю, это имя база. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 18:13 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_X, Конкретнее некуда. Таблицы для переменных, массивов, объектов и сетей. Объекты и типы базы использовать только внутри базы. Вместо массива зогонять циклом insert. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 19:38 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_X на текущий момент так и реализовано, но это НЕ красиво. чем не красиво? IMHO Вполне нормально, что ф-ция вызывающаяся с клиентской JVM и из базы имеют разные параметры вызова. Я бы сделал две функции. Одну - стандартная Java, втору - для вызова из БД. И просто, банально, вызывал бы первую из второй. Тогда и бизнес логика (первая ф-ция) будет без Oracle-специфики, а Oracle-специфика будет закодирована во второй ф-ции (уже без бизнес-логики). IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 19:47 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_X, imho тебе надо подробнее показать БЛ и связку Java - Oracle. Вопрос соединения 3 в одном флаконе - Java-БЛ-СУБД, не тривиальное занятие). По классике нужно делать Модель, а не функции. Тем более что твоё авторфункцию в базе Oracle без внутренней связи с Oracle-ом очень сложно понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 23:54 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
В соответствии с лучшими традициями разработки под Oracle, возвращать нужно либо ORACLE cursor, либо Oracle pipelined function, либо Java (JDBC) ResultSet, либо Java Collection, либо Java Iterator, но никак не массив. Возвращать массив - позорно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 00:46 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЧто хорошо? Хардкодинг "kprb" в тексте функции? Я так подозреваю, это имя база. Нет, это одно из альт-х обращений - попробуйте у Вас тоже получиться ((OracleConnection) DriverManager.getConnection("jdbc:oracle:kprb:")) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:29 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЯ бы сделал две функции. Одну - стандартная Java, втору - для вызова из БД. Правильно говорите, но только это лишний этап, (типа перекодировщик для базы) который я хотел избежать этого, подобная реализация есть в виде двух строк , они приведены в примере, если moVe != Null - работает кодировщик для интерфейса, заполняется ((ArrayList<Move>) _move). если moWe !=Null - работает кодировщик для базы , заполняется createStruct("RCMOVE") Ваше предложение почти аналогичное - только через функцию Хотел реализовать возврат массива общего для всех запусков - обработка массива на стороне интерфейса - средствами JAVA - обработка массива на стороне базы - средствами базы Так более правильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:40 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123HOME_X, авторфункцию в базе Oracle без внутренней связи с Oracle-ом очень сложно понять. Может не внятно описал - извините. Общение с базой происходит ТОЛЬКО через параметры функции Входящие параметры IN, OUT, return параметр. Вы сослались на модель - прошу уточнить на примере Содержание функции достаточно сложное, но мне не хотелось усложнять задачу лишними терминами, функции было вполне достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:45 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
maytonВ соответствии с лучшими традициями разработки под Oracle, возвращать нужно либо ORACLE cursor, либо Oracle pipelined function, либо Java (JDBC) ResultSet, либо Java Collection, либо Java Iterator, но никак не массив. Возвращать массив - позорно. Нет вопросов уточните пожалуйста на примере Мне необходимо вернуть данные которые в Oracle =Collection-y, отсюда массив java.sql.Array[] Мне в Oracle надо видеть варианты - Вариант (простой) SC DAY IRR 123 10-10-2016 <Collection> = 10,20,30,40,50 - Вариант (с детализацией) SC DAY IRR 123 10-10-2016 10 123 10-10-2016 20 123 10-10-2016 30 123 10-10-2016 40 123 10-10-2016 50 - Вариант (простой) SC DAY IRR 123 10-10-2016 <Collection> = 10,20,30,40,50 - Вариант (с консолидацией) SC DAY IRR 123 10-10-2016 150 Номер варианта выставляется ключом на уровне конструктора типа в Oracle и обрабатывается на уровне типа Oracle (пока вижу смутно, но детализация и консолидация просматривается четко) Заранее благодарен ! Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:55 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_XОбщение с базой происходит ТОЛЬКО через параметры функции т.е. все таблички не видны? Но вы понимаете, что в Java это исключение из правил (CRUD) HOME_XВы сослались на модель - прошу уточнить на примере Модель - это доступ к данным, т.е. табличкам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:36 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_X- Вариант (с консолидацией) её бывает делают в отдельной базе (OLAP-OLTP) либо запросом с агрегацией консолидацией. Поэтому не понял вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:43 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123т.е. все таблички не видны? Но вы понимаете, что в Java это исключение из правил (CRUD) Модель - это доступ к данным, т.е. табличкам Совершенно верно - таблицы не видны Модель - термин понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:49 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_XСовершенно верно - таблицы не видны Тогда по факту ты написал API слой и БЛ на PL языке. Это язык не ООП, поэтому сейчас трудности пристыковать его в Java. Проект нетривиальный и индивидуальный. Какая уж тут архитектура. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 16:54 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_XНет, это одно из альт-х обращений - попробуйте у Вас тоже получиться ((OracleConnection) DriverManager.getConnection("jdbc:oracle:kprb:")) Сейчас с Oracle не работаю, текущие проекты на PostgreSQL. Т.ч. смотрю только по доке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:05 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123, Хотел сказать что манипулируем параметром в конструкторе поль. типе Oracle хотел бы получить выборки с одной записью и множеством записей Ключ=1 SC DAY IRR 123 10-10-2016 <Collection> Ключ=2 (детализирую поле IRR = <Collection> - вывожу весь массив созданный в JAVE) SC DAY IRR 123 10-10-2016 10 123 10-10-2016 20 123 10-10-2016 30 123 10-10-2016 40 123 10-10-2016 50 Ключ = 3 (Суммирую весь массив созданный в JAVE) SC DAY IRR 123 10-10-2016 150 Где i*power(10,i_n-1) = массив JAVA Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:42 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123HOME_XСовершенно верно - таблицы не видны Тогда по факту ты написал API слой и БЛ на PL языке. Это язык не ООП, поэтому сейчас трудности пристыковать его в Java. Проект нетривиальный и индивидуальный. Какая уж тут архитектура. Удачи! Т.е. вариантов более нет .......... Принято - спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 17:44 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
HOME_XТ.е. вариантов более нет .......... HOME_XКлюч = 3 (Суммирую весь массив созданный в JAVE) а почему в Java не суммировать? Почему в СУБД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 18:01 |
|
||
|
Вернуть массив в базу Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123а почему в Java не суммировать? Почему в СУБД? Это на растерзание пользователю ... хочет так ключ=1 хочет эдак ключ=2 Насчет Petro123Тогда по факту ты написал API слой и БЛ на PL языке Согласен - я рассматриваю Java как "кроcсплатформу" и хочу просто внедрить функцию на два приложения без излишеств Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 20:03 |
|
||
|
|

start [/forum/topic.php?fid=59&startmsg=39319313&tid=2123648]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 346ms |

| 0 / 0 |
