|
|
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые форумчане. Подскажите пожалуйста, можно ли обратиться к pipelined функции Oracle11g через jdbc с таким синтаксисом: Код: plaintext 1. 2. 3. При помощи такого синтаксиса - Код: plaintext 1. 2. Версия Oracle 11.2.0.3, версия JDK = 1.8, драйвер ojdbc6.jar Скрипт пакета Oracle: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Текст класса Java прилагается. Заранее спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 17:01 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Думаю, что нет. Да и не понятно зачем. AFAIK INDEX TABLE это совсем не Ref Cursor, а значительно более худшая (менее гибкая) штука. Т.ч. смысл ломать относительно эффективный pipelined и получать на выходе банальный array - не понятен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 17:12 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Можно в анонимном pl/sql блоке зафетчить SELECT <список полей> FROM ... в массив. Только нафига? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 17:14 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые форумчане. Leonid KudryavtsevДумаю, что нет. Да и не понятно зачем. AFAIK INDEX TABLE это совсем не Ref Cursor, а значительно более худшая (менее гибкая) штука. Т.ч. смысл ломать относительно эффективный pipelined и получать на выходе банальный array - не понятен. А какой тип надо ставить для выходного параметра pipelined-функции? Пробовал так - Код: plaintext Получил такой ответ - Код: plaintext 1. 2. 3. 4. Также пробовал и OracleTypes.STRUCT и OracleTypes.ARRAY - всегда получал сообщение об ошибке. Попутно вопрос - как можно получить метаданные о типе возвращаемого функцией значения? Заранее спасибо. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 11:27 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
МурзикА какой тип надо ставить для выходного параметра pipelined-функции? вы же написали что всё работает в первом варианте? МурзикПопутно вопрос - как можно получить метаданные о типе возвращаемого функцией значения? это ненужно. Это маппинг. Т.е. статика и проектирование. При смене даговора по API переписывается маппинг (код) ...... Универсальность - враг хорошего. Почему вообще пипелине функция? Не смогли запрос сложный сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 11:31 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Добрый день. Petro123МурзикА какой тип надо ставить для выходного параметра pipelined-функции? вы же написали что всё работает в первом варианте? МурзикПопутно вопрос - как можно получить метаданные о типе возвращаемого функцией значения? это ненужно. Это маппинг. Т.е. статика и проектирование. При смене даговора по API переписывается маппинг (код) ...... Универсальность - враг хорошего. Почему вообще пипелине функция? Не смогли запрос сложный сделать? Как я понял, работать с pipeline-функцией из jdbc можно только через select * from table(имя_pipelined_функции) ? pipeline функция нужна для вывода инфы из коллекции, которая не объявлена в базе. Кстати о метаданных - strCall = "{?= call rowtypes.f_pipe}"; calWork = cnn.prepareCall(strCall); rsMeta = (OracleResultSetMetaData) calWork.getMetaData(); System.out.println("Arguments pipe=" + rsMeta.getColumnCount()); возвращает NullPointerException. Правильно ли я понимаю, что getMetaData() работает только для ResultSet ? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 11:56 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Мурзикpipeline функция нужна для вывода инфы из коллекции, которая не объявлена в базе. переведи: функция в БД нужна чтобы вывести то, что не в БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 11:59 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Мурзик, в данном случае, у тебя совершенно НОРМАЛЬНЫЙ код, правда с select'ом. Нафига возникает желание переписать его на call не понятно. Если очень хочется и нужно (например юзаешь универсальную библиотеку, которая понимает только входной текст (pl/sql анонимный блок) и умеет использовать только java.sql.PreparedCall), то, конечно, всегда можно. Но если реальных причин нет, то не нужно городить сложности и находить массу проблем на ровном месте. МурзикПопутно вопрос - как можно получить метаданные о типе возвращаемого функцией значения? 1) JAVA: В данном, конкретном случае, у тебя не функция, а нормальный селект. Т.ч., так же, как и для Select'а. Элементарно через ResultSet.getMetaData() 2) Oracle Или посмотреть в Oracle таблицах с матаописаниями. Но этот вопрос лучше задать на форуме Oracle. Наверное в табличках ALL_PROCEDURES (USER...), ALL_ARGUMENTS (USER...) Ссылка на оригинальную доку гуглится за 15 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 12:06 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
МурзикКак я понял, работать с pipeline-функцией из jdbc можно только через select * from table(имя_pipelined_функции) ? А причем тут JDBC ? Кто-то знает другие возможности работать с pipeline-функциями ? Мурзикpipeline функция нужна для вывода инфы из коллекции, которая не объявлена в базе. Ну так сделайте нормальную ф-цию (не пайплинед) которая возвращает собственно коллекцию. Или, банально, сделайте коллекцию паблик и прямо ее и бери из пакета (подозреваю, она в пакете объявлена) через анонимный pl/sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 12:12 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНаверное в табличках ALL_PROCEDURES причём права должны быть даны от админов на эту Мету-инфу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 12:15 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Мурзикpipeline функция нужна для вывода инфы из коллекции, которая не объявлена в базе. странно вообще употребление слова коллекция без ОРМ, но с JDBC. По умолчанию у JDBC набор строк, объект ResultSet. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 12:23 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevМурзик, в данном случае, у тебя совершенно НОРМАЛЬНЫЙ код, правда с select'ом. Нафига возникает желание переписать его на call не понятно. Если очень хочется и нужно (например юзаешь универсальную библиотеку, которая понимает только входной текст (pl/sql анонимный блок) и умеет использовать только java.sql.PreparedCall), то, конечно, всегда можно. Но если реальных причин нет, то не нужно городить сложности и находить массу проблем на ровном месте. Понял, больше не буду мучать бедный Код: plaintext Код: plaintext Leonid Kudryavtsev2) Oracle Или посмотреть в Oracle таблицах с матаописаниями. Но этот вопрос лучше задать на форуме Oracle. Наверное в табличках ALL_PROCEDURES (USER...), ALL_ARGUMENTS (USER...) Ссылка на оригинальную доку гуглится за 15 сек. Эти представления словаря мне известны, я хотел бы понять, как Oracle-типы видятся из java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 14:42 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123переведи: функция в БД нужна чтобы вывести то, что не в БД? Я хочу использовать коллекцию Oracle (ассоциативный массив или index by таблицу) в качестве временного источника-приемника данных. Каждая из колонок этой коллекции будет заполняться отдельным selectОм и потом выводится как результат работы функции. Можно, конечно, использовать какой-нибудь UNION ALL, но общий select в этом случае будет просто неприличных размеров. Пример задачи - расчет 16-го счета. Почему не хочу объявлять коллекцию на уровне базы - ее структура может измениться (например, добавятся новые колонки) и придется тогда перекомпилировать все зависящие от этого типа пакеты. Опять же - невозможно объявить index by таблицу на уровне базы данных, а ключи по varchar2 типу или отрицательные ключи возможны только в этой коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 14:50 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Мурзик, у меня впечатление, что ты используешь БД нетрадиционным сексуальным образом. МурзикПример задачи - расчет 16-го счета. эта? Приведи пример задачи http://www.buhsoft.ru/forums/showthread.php?t=9420 ЗЫ. Если у тебя нет модели для БД, то зачем тебе вообще БД? Делай всё в оперативке в Java по ООП. IMHO Мурзикв качестве временного источника-приемника данных. т.е. в анонимном блоке ты записал в оракл (в таблицу?) и потом в этом же коннекте прочитал? Pipeline функуция просто перекидывает данные из таблицы (кортеж) в твою структуру-record созданную руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 15:23 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Мурзик, я так понял, что-то типа cross tab отчетов на pipelined функциях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 15:33 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Оказалось, что pipelined-функции не используют index-by коллекции :( МурзикЯ хочу использовать коллекцию Oracle (ассоциативный массив или index by таблицу) в качестве временного источника-приемника данных. Сделал так - Код: plaintext 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 16:22 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123Мурзик, у меня впечатление, что ты используешь БД нетрадиционным сексуальным образом. МурзикПример задачи - расчет 16-го счета. эта? Приведи пример задачи http://www.buhsoft.ru/forums/showthread.php?t=9420 ЗЫ. Если у тебя нет модели для БД, то зачем тебе вообще БД? Делай всё в оперативке в Java по ООП. IMHO Мурзикв качестве временного источника-приемника данных. т.е. в анонимном блоке ты записал в оракл (в таблицу?) и потом в этом же коннекте прочитал? Pipeline функуция просто перекидывает данные из таблицы (кортеж) в твою структуру-record созданную руками. Добрый день, еще раз, уважаемые форумчане - Именно так - Код: plaintext 1. 2. 3. Правда, считал это еще на Oracle 8 и не знал я тогда еще никаких коллекций, а может их еще и не было.... Посему приходилось все эти колонки вытаскивать разными selectАми, потом их UNION ALL и потом GROUP BY. Пользоатели получали такой грид с этими числами, смотрели все ли там правильно и потом забрасывали в базу, тут же формировались проводки по 16-му. То есть сперва надо было получить грид без записи в базу, а "по утверждению оного" формировать проводки. Опять же в Дебете по 16-му должны были быть отражены те суммы, которые еще не легли в проводках на 16-й счет :) Каждый месяц считалось по-разному. Но это уже без отношения к Java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 16:31 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, что-то типа того.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 16:31 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
МурзикПравда, считал это еще на Oracle 8 и не знал я тогда еще никаких коллекций, а может их еще и не было.... Посему приходилось все эти колонки вытаскивать разными selectАми, потом их UNION ALL и потом GROUP BY. не пойму чем у вас счас коллекции помогают? Есть временная табла на коннект....без записи в БД...своя на каждого юзверя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 16:57 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123МурзикПравда, считал это еще на Oracle 8 и не знал я тогда еще никаких коллекций, а может их еще и не было.... Посему приходилось все эти колонки вытаскивать разными selectАми, потом их UNION ALL и потом GROUP BY. не пойму чем у вас счас коллекции помогают? Есть временная табла на коннект....без записи в БД...своя на каждого юзверя... Временная табла в Oracle - это некошерно. Опять же, возможен вход двух разных людей под однима аккаунтом и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 17:24 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
МурзикВременная табла в Oracle - это некошерно. ======= привел бы ПРИМЕР кода, было бы видно, велосипед или некошерно Опять же, возможен вход двух разных людей под однима аккаунтом и т.п. ====== странный ты. Это как с одним коннектом Иванов и Петров войдут? Шутка? есть штатные механизмы Оракла. Ты утверждаешь, что это не кошерно. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 17:33 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
"временная табла" это CREATE GLOBAL TEMPORARY TABLE ? Тогда интересно, что подразумевается под "без записи в БД", "своя на каждого юзверя" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 18:06 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
To Мурзик: может попросить модераторов в форум Oracle перенести? Из всего обсуждения, от Java одно название. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 18:12 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Раз он не хочет Модель и писать в таблу напр. Входящие, то есть в БД временные таблицы....всякие. Есть на коннект, есть уровень видимости пакета (как раз для бухов). Есть уровень анонимного блока, функции. Проще сказать чего там нет)))). ООП)). Но он Ооп и не применяет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 18:27 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Нифига не понял, что Вы подразумеваете под понятием "временные таблицы" на русском языке. Но не будем разводить холевар ))) на пустом месте. Я обычно употребляю или "временная таблица" в БД или "массив" в Pl/sql. От того, что Oracle массив назвал TABLE INDEX BY, он таблицей не стал. К тому же, прилагательное TEMPORARY ("временный") с массивом TABLE INDEX BY обычно не употребляется. Т.ч. назвать массивы (коллекции) - "временные таблицы....всякие... есть уровень видимости пакета". То всяко или "временный" или "пакета". А не то и другое вместе. А лучше прямо сказать "массив" или "коллекция" (последнее наверное правильнее). IMHO Просто Ваша мысль про временные таблицы, как-то совсем не ясна. Насколько я понимаю, Мурзик не хочет объекты в БД плодить без лишней надобности, а хочет обойтись только коллекциями в пакетах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 18:42 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, вы подписывайте, к кому обращаетесь с вопросом. Leonid KudryavtsevНасколько я понимаю, Мурзик не хочет объекты в БД плодить без лишней надобности, а хочет обойтись только коллекциями в пакетах. если гадать, что он там хочет , то в пакетах работают так: Код: java 1. 2. 3. 4. Зачем pipelined я не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 22:25 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, ну и, один запрос в год про pipelined должен навести на размышления что аффтар копает возможно не туда. http://www.sql.ru/forum/afsearch.aspx?s=pipelined&submit=?????&bid=38 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2015, 22:29 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые форумчане. Leonid KudryavtsevНасколько я понимаю, Мурзик не хочет объекты в БД плодить без лишней надобности, а хочет обойтись только коллекциями в пакетах. Так и есть - не хочу плодить объекты в БД без надобности. если гадать, что он там хочет , то в пакетах работают так: Код: java 1. 2. 3. 4. Зачем pipelined я не понял.[/quot] А куда пишет процедура ПакетСальдо.ПосчиталиРаз и ПакетСальдо.ПосчиталиДва? pipelined-функция нужна для того, чтобы вывести "на клиент" инфу из пользовательской коллекции уровня pl/sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 09:50 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123Leonid Kudryavtsev, Раз он не хочет Модель и писать в таблу напр. Входящие, то есть в БД временные таблицы....всякие. Есть на коннект, есть уровень видимости пакета (как раз для бухов). Есть уровень анонимного блока, функции. Проще сказать чего там нет)))). ООП)). Но он Ооп и не применяет. Добрый день. Я как раз и собираюсь применять ООП - если под этим подразумеваются коллекции. Как я понял, в Oracle есть временные таблицы с сохранением строк "на транзакцию" или "на сессию". А что за временные таблицы на уровень видимости пакета или уровень анонимного блока, функции? Или эти слова не относятся к временными таблицам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 10:07 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123 ====== странный ты. Это как с одним коннектом Иванов и Петров войдут? Шутка? есть штатные механизмы Оракла. Ты утверждаешь, что это не кошерно. Удачи![/quot] было сказано - своя на каждого юзверя А это очень даже возможно - Иванов и Петров ходят в базу под одним пользователем. Сессии ес-но разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 10:30 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
МурзикА куда пишет процедура ПакетСальдо.ПосчиталиРаз и ПакетСальдо.ПосчиталиДва? выше же говорил - в глобальную временную на коннект или в переменные пакета (они тоже в контексте коннекта). ........ Ликбез: авторвременные таблицы в ORACLE GLOBAL TEMPORARY Описание Что же такое временные таблицы, и зачем они нужны? Временные таблицы используются в Oracle для хранения данных, которые относятся к одной сессии или одной транзакции. Так, например, целесообразно использовать временные таблицы для хранения данных об открытых неким клиентским приложением или процессом файлах, об открытых дочерних формах. Можно так же сохранять во временных таблицах, данные матриц преобразований в сложных математических задачах. Итак, временные таблицы(GLOBAL TEMPORARY), а отличие от таблиц регулярных целесообразно использовать в тех случаях, когда сохраняемее данные часто изменяются, и непостоянны. Временные таблицы (GLOBAL TEMPORARY TABLE) отличаются от обычных регулярных таблиц тем, что эти таблицы предназначены только для хранения временных для некоторой сессии данных. Данные во временной таблицы будут видны только в той сессии, которая вставила эти данные в таблицу. http://habrahabr.ru/post/254355/ Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. + ассоциативный массив в пакете + коллекции в пакете и потом select на коллекцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 13:17 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Мурзикpipelined-функция нужна для того, чтобы вывести "на клиент" инфу из пользовательской коллекции уровня pl/sql. почему не спросить на форуме - как вместо pipelined вывести RecordSet? А вместо этого упрямо гнать что тебе нужна именно она? МурзикА это очень даже возможно - Иванов и Петров ходят в базу под одним пользователем. Сессии ес-но разные. Смешно. Давай тогда техническими терминами. - под каким логином ходят и в какое время? Одновременно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 13:21 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Мурзик, ну и вот ещё - FAQ Java & Oracle, передача-прием массивов. http://www.sql.ru/faq/faq_topic.aspx?fid=407 Так что усложняй свой код до самой pipelined. Но помни, что задача программиста упрощать Модель. Чтобы не было передачи всего чего угодно и получения любого формата. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 13:34 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123почему не спросить на форуме - как вместо pipelined вывести RecordSet? Согласно условиям задачи мне надо вернуть на клиент "коллекцию" - ибо она заполняется в хранимой функции в несколько этапов и не хочется писать "нуОчень большой select". Как вернуть данные из pipelined-функции в ResultSet - String strSql = "select * from table(rowtypes.f_pipe)"; OracleStatement stmt = (OracleStatement) cnn.createStatement(); OracleResultSet rsWork = (OracleResultSet) stmt.executeQuery(strSql); Код есть в прилагаемом файле. Если Вы знаете другой способ - поделитесь пожалуйста. Буду рад :) Petro123Смешно. Давай тогда техническими терминами. - под каким логином ходят и в какое время? Одновременно? [/quot] Могут ходить под одним и тем же логином, и в одно и то же время, почему бы и нет (например, в случае dbLink к другой базе). Опять же, под одним и тем же пользователем может быть создано несколько сессий, например в случае какого-нибудь Connection Pool или Application Continuity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 14:05 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123Мурзик, ну и вот ещё - FAQ Java & Oracle, передача-прием массивов. http://www.sql.ru/faq/faq_topic.aspx?fid=407 Так что усложняй свой код до самой pipelined. Но помни, что задача программиста упрощать Модель. Чтобы не было передачи всего чего угодно и получения любого формата. Удачи! А я так думаю, что задача программиста - писать эффективный код, который работает быстрее и ресурсов потребляет меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 14:07 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
МурзикСогласно условиям задачи мне надо вернуть на клиент "коллекцию" - ибо она заполняется в хранимой функции в несколько этапов и не хочется писать "нуОчень большой select". я вам привёл FAQ, где есть код сервера и код Java. Код PL вы не привели. Если вы ничего не решаете, то какой смысл разговаривать? МурзикМогут ходить под одним и тем же логином, и в одно и то же время, почему бы и нет (например, в случае dbLink к другой базе). Опять же, под одним и тем же пользователем может быть создано несколько сессий, например в случае какого-нибудь Connection Pool или Application Continuity. хорош выдумывать. Нет у вас пула. И не будет. Иначе архитектура и решения другие. А под одним логином IVANOV субд воспринимает Иванова и Петрова как одного юзверя. Не в курсе? Если 2 юзверя зашли одновременно под одним логином, то будет 2 соединения-коннекта. И совершенно никаких проблем. Зачем вы пугали нас этим примером? МурзикА я так думаю, что задача программиста - писать эффективный код, который работает быстрее и ресурсов потребляет меньше. - значит про FAQ пример вы промолчали. А Denis Popov тут самый знающий по работе с Ораклом. Только его пример вас недостоин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 17:06 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
упс...извини. Увидел, что пример на PL ты привёл. Тогда тебе перечислили уже все варианты работы Java с ораклом: в порядке приоритета: - обычный select c where без хранимки - хранимка с cursor cst.registerOutParameter(1, OracleTypes.CURSOR); - хранимка с встроенныи типом БД - String sqlStatement = "select * from table(чччччччч(?))"; - global temporary table все остальные решения мне не нравятся оверхедом, но ссылки тебе привели. МурзикЭти представления словаря мне известны, я хотел бы понять, как Oracle-типы видятся из java. не рекомендуется работать с этим. Т.к. Java работает со всеми БД. Но опять же есть FAQ. См. выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2015, 18:55 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123упс...извини. Увидел, что пример на PL ты привёл. Тогда тебе перечислили уже все варианты работы Java с ораклом: в порядке приоритета: - обычный select c where без хранимки - хранимка с cursor cst.registerOutParameter(1, OracleTypes.CURSOR); - хранимка с встроенныи типом БД - String sqlStatement = "select * from table(чччччччч(?))"; - global temporary table все остальные решения мне не нравятся оверхедом, но ссылки тебе привели. Как я понял из вышеизложенного, единственным способом для получения инфы из pipelined-функции является Код: plaintext Petro123не рекомендуется работать с этим. Т.к. Java работает со всеми БД. Но опять же есть FAQ. См. выше. jdbc работает со всеми базами (или правильнее сказать, с теми, драйвер от которой имеется, а если нет - можно через odbc), но вот с Oracle почему-то использование DriverManager является deprecated (так написано в доке, начиная с 10-ки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2016, 09:26 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123МурзикСогласно условиям задачи мне надо вернуть на клиент "коллекцию" - ибо она заполняется в хранимой функции в несколько этапов и не хочется писать "нуОчень большой select". я вам привёл FAQ, где есть код сервера и код Java. Код PL вы не привели. Если вы ничего не решаете, то какой смысл разговаривать? МурзикМогут ходить под одним и тем же логином, и в одно и то же время, почему бы и нет (например, в случае dbLink к другой базе). Опять же, под одним и тем же пользователем может быть создано несколько сессий, например в случае какого-нибудь Connection Pool или Application Continuity. хорош выдумывать. Нет у вас пула. И не будет. Иначе архитектура и решения другие. А под одним логином IVANOV субд воспринимает Иванова и Петрова как одного юзверя. Не в курсе? В курсе. Petro123Если 2 юзверя зашли одновременно под одним логином, то будет 2 соединения-коннекта. И совершенно никаких проблем. Зачем вы пугали нас этим примером? Будет создано как минимум 2 сессии. Каким примером и кого я пугал? МурзикА я так думаю, что задача программиста - писать эффективный код, который работает быстрее и ресурсов потребляет меньше. Petro123- значит про FAQ пример вы промолчали. Про какой FAQ пример? Petro123А Denis Popov тут самый знающий по работе с Ораклом. Только его пример вас недостоин. Мой ответ и тут же вопрос - а почему его пример меня недостоин? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2016, 09:33 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
МурзикБудет создано как минимум 2 сессии. Каким примером и кого я пугал? 18623847 тут пример, что будет на юзверя временная. Разумеется, раз на коннект, то на 2 коннекта будет две временных. На это ты дал странный ответавторВременная табла в Oracle - это некошерно. Опять же, возможен вход двух разных людей под однима аккаунтом и т.п. МурзикПро какой FAQ пример? FAQ из нашего форума. Ссылка выше. Какое слово непонятно? Мурзика почему его пример меня недостоин? потому что select from table(pipelined - это решение. Тебе не только я это сказал. Потому что при кодировании надо идти от простого к сложному(выше пример). А не наоборот. ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2016, 10:32 |
|
||
|
обращение к pipelined функции Oracle11g из jdbc
|
|||
|---|---|---|---|
|
#18+
Petro123МурзикБудет создано как минимум 2 сессии. Каким примером и кого я пугал? 18623847 тут пример, что будет на юзверя временная. Разумеется, раз на коннект, то на 2 коннекта будет две временных. На это ты дал странный ответавторВременная табла в Oracle - это некошерно. Опять же, возможен вход двух разных людей под однима аккаунтом и т.п. МурзикПро какой FAQ пример? FAQ из нашего форума. Ссылка выше. Какое слово непонятно? Мурзика почему его пример меня недостоин? потому что select from table(pipelined - это решение. Тебе не только я это сказал. Потому что при кодировании надо идти от простого к сложному(выше пример). А не наоборот. ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. Вопрос исчерпан, ответ получен. Тему считаю закрытой. Всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2016, 14:35 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2124480]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 351ms |

| 0 / 0 |
