|
|
|
Изменить значения в массиве типа java.sql.Array[]
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! - База Oracle, - в ней java-функцию - один из параметров которой тип java.sql.Array[] Передаваемый примитивный тип известен = Numeric (Double) Длина массива статична, задана из базы = функцией не меняется Каким образом этой функции можно изменить содержание элементов массива и вернуть ИЗМЕНЕННЫЕ элементы обратно в базу. Основное условие функция ИЗНУТРИ не должна ссылаться на объекты базы, общение с базой ведется только через параметры Никаких Connection this внутри функции не должно быть Буду благодарен за пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 14:54 |
|
||
|
Изменить значения в массиве типа java.sql.Array[]
|
|||
|---|---|---|---|
|
#18+
Вроде, в Java, гурами-ООП считается, что иммутебле типы - наше все... Т.ч., боюсь, Вы слишком многого от современного ООП языка программирования хотите ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 17:33 |
|
||
|
Изменить значения в массиве типа java.sql.Array[]
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevВроде, в Java, гурами-ООП считается, что иммутебле типы - наше все... Т.ч., боюсь, Вы слишком многого от современного ООП языка программирования хотите ))) Понял может здесь sql.Array и не нужен и ставить на него не стоит Вариант один (задача более общая) - java функцию передали массив, изменили его вернули обратно, база приняла его трансформировала в table Массив статичен, тип элементов известен, разве невозможен разбор по указателям ( Object ) и запись данных непосредственно в ячейки памяти ? Вариант два - как выяснить внедрена ли функция в базу Oracle - как создать array в базе , пробывал через Connection.createArrayOf Не могли бы черкнуть пример кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 18:27 |
|
||
|
Изменить значения в массиве типа java.sql.Array[]
|
|||
|---|---|---|---|
|
#18+
HOME_XМассив статичен, тип элементов известен, разве невозможен разбор по указателям ( Object ) и запись данных непосредственно в ячейки памяти ? Не очень понял. Если тип элементов - обычные Java, и массив - это массив или коллекция (например ArrayList) обычной Java ==> проблем нет. HOME_XВариант два - как выяснить внедрена ли функция в базу Oracle Опять таки не понял, нафига. Объявления функции, как и интерфейс - вещь ... [как бы это ООПобразно выразится]... соверщенно полиморфичная. Забудте про SQL, передавайте данные в нормальном/обычном виде. Тогда будет пофиг, в каком контексте работает фукнция. IMHO & AFAIK А собственно для работы в базе/Jsp/JavaBean/Jar - свой код. Не надо мешать технические детали и бизнес логику в одном месте. IMHO & AFAIK. Вроде вещь стандартная. Называется "процедурное программирование", придумано годах в 50-х прошлого (XX) века. HOME_X- как создать array в базе , пробывал через Connection.createArrayOf Не могли бы черкнуть пример кода. Сейчас ни развернутого Oracle ни даже Java под рукой нет. По f...ing manual - вроде же все просто: https://docs.oracle.com/javase/tutorial/jdbc/basics/array.html С Java Stored Procedures - я не уверен, но вроде по доке тоже должно "взлететь": https://docs.oracle.com/cd/B19306_01/java.102/b14187/chsix.htm В пункте Setting Parameter Modes описывается, что можно парметры принимать как IN / OUT. Но не очень понятно, можно ли на Java Stored Procedures изобразить NOCOPY В пункте Mapping Data Types массивы, да и все прочие типы, вполне себе упомянуты HOME_Xобщение с базой ведется только через параметры Никаких Connection внутри функции не должно быть Без Connection не обойтись. Т.к. он требуется при создании (модификации) PL/SQL объектов. AFAIK. Если нужно без Connection - то не использовать java.sql.Array, Datum и прочее. Использовать чисто Java-типы. А всю "специфику" пускай разруливает caller. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 19:03 |
|
||
|
Изменить значения в массиве типа java.sql.Array[]
|
|||
|---|---|---|---|
|
#18+
HOME_XКаким образом этой функции можно изменить содержание элементов массива и вернуть ИЗМЕНЕННЫЕ элементы обратно в базу. Так это - наверное через возвращаемое функцией значение. А его уже в Базе запросом назад в update. Как-то так функция чего-то возвращает. В принципе можно запрос и изнутри функции отправить, но Вы же не хотите знать структуру базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 10:40 |
|
||
|
Изменить значения в массиве типа java.sql.Array[]
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевТак это - наверное через возвращаемое функцией значение. А его уже в Базе запросом назад в update. Как-то так функция чего-то возвращает. В принципе можно запрос и изнутри функции отправить, но Вы же не хотите знать структуру базы. Продуктив - это 10 массивов, которые необходимо изменить и вернуть Изнутри функции видеть не хочу , противоречит заявленной архитектуре Массивы - типы известны,размерность установлена, значение присвоены Можно ли в функции узнать адреса элементов массива и писать прямо в ячейки ? (java копирует значение при передаче в функцию) Или может имеет смысл до создать массив ссылок на элементы и передавать адреса элементов а в функции писать непосредственно в ячейки памяти Как это сделать из под PL/SQL и простой Java Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 13:47 |
|
||
|
Изменить значения в массиве типа java.sql.Array[]
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Суть такая - это базовая расчетная функция работать должна - в базе Oracle - в win - в web интерфейсы ввода данных созданы в каждой среде отдельно Отсюда внутренней связи с базой не должно быть, общение через параметры java.sql.Array - использовал по учебнику - Реально нужно вернуть набор измененных массивов База это PL/SQL create or replace type arrNbi is varray(2000) of Number Win+Web это простая Java ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 13:55 |
|
||
|
Изменить значения в массиве типа java.sql.Array[]
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, На текущий момент реализация это слепленный текст, который после возврата в интерфейс парситься Хотелось сделать красивее. Может востребовать адреса ячеек и писать в них или передать адреса элементов массива в качестве параметров функции и снова таки писать в них непосредственно ... предложите Ваш вариант пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 13:57 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=75&tid=2123197]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
27ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 339ms |

| 0 / 0 |
