powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / обращение к pipelined функции Oracle11g из jdbc
16 сообщений из 41, страница 2 из 2
обращение к pipelined функции Oracle11g из jdbc
    #39140336
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
вы подписывайте, к кому обращаетесь с вопросом.
Leonid KudryavtsevНасколько я понимаю, Мурзик не хочет объекты в БД плодить без лишней надобности, а хочет обойтись только коллекциями в пакетах.
если гадать, что он там хочет , то в пакетах работают так:
Код: java
1.
2.
3.
4.
Connection = 
  ПакетСальдо.Инициализация(1, 12, 'СубСчет');
  ПакетСальдо.ПосчиталиРаз;
  ПакетСальдо.ПосчиталиДва;


Зачем pipelined я не понял.
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39140338
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
ну и, один запрос в год про pipelined должен навести на размышления что аффтар копает возможно не туда.
http://www.sql.ru/forum/afsearch.aspx?s=pipelined&submit=?????&bid=38
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39140996
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, уважаемые форумчане.

Leonid KudryavtsevНасколько я понимаю, Мурзик не хочет объекты в БД плодить без лишней надобности, а хочет обойтись только коллекциями в пакетах.

Так и есть - не хочу плодить объекты в БД без надобности.

если гадать, что он там хочет , то в пакетах работают так:
Код: java
1.
2.
3.
4.
Connection = 
  ПакетСальдо.Инициализация(1, 12, 'СубСчет');
  ПакетСальдо.ПосчиталиРаз;
  ПакетСальдо.ПосчиталиДва;


Зачем pipelined я не понял.[/quot]

А куда пишет процедура ПакетСальдо.ПосчиталиРаз и ПакетСальдо.ПосчиталиДва?

pipelined-функция нужна для того, чтобы вывести "на клиент" инфу из пользовательской коллекции уровня pl/sql.
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141002
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Leonid Kudryavtsev,
Раз он не хочет Модель и писать в таблу напр. Входящие, то есть в БД временные таблицы....всякие.
Есть на коннект, есть уровень видимости пакета (как раз для бухов). Есть уровень анонимного блока, функции.
Проще сказать чего там нет)))).
ООП)).
Но он Ооп и не применяет.

Добрый день.
Я как раз и собираюсь применять ООП - если под этим подразумеваются коллекции.


Как я понял, в Oracle есть временные таблицы с сохранением строк "на транзакцию" или "на сессию".

А что за временные таблицы на уровень видимости пакета или уровень анонимного блока, функции?
Или эти слова не относятся к временными таблицам?
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141005
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
====== странный ты. Это как с одним коннектом Иванов и Петров войдут? Шутка?


есть штатные механизмы Оракла. Ты утверждаешь, что это не кошерно.
Удачи![/quot]

было сказано -
своя на каждого юзверя

А это очень даже возможно - Иванов и Петров ходят в базу под одним пользователем.
Сессии ес-но разные.
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141051
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикА куда пишет процедура ПакетСальдо.ПосчиталиРаз и ПакетСальдо.ПосчиталиДва?
выше же говорил - в глобальную временную на коннект или в переменные пакета (они тоже в контексте коннекта).
........
Ликбез:
авторвременные таблицы в 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.
CREATE OR REPLACE TYPE num_tab is table of number(38);
...
SQL> select * from table(num_tab(1,2,3,4,5));
 
COLUMN_VALUE
------------
           1
           2
           3
           4
           5


+ ассоциативный массив в пакете
+ коллекции в пакете и потом select на коллекцию
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141054
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мурзикpipelined-функция нужна для того, чтобы вывести "на клиент" инфу из пользовательской коллекции уровня pl/sql.
почему не спросить на форуме - как вместо pipelined вывести RecordSet?
А вместо этого упрямо гнать что тебе нужна именно она?
МурзикА это очень даже возможно - Иванов и Петров ходят в базу под одним пользователем.
Сессии ес-но разные.
Смешно.
Давай тогда техническими терминами.
- под каким логином ходят и в какое время? Одновременно?
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141059
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мурзик,
ну и вот ещё - FAQ
Java & Oracle, передача-прием массивов.
http://www.sql.ru/faq/faq_topic.aspx?fid=407
Так что усложняй свой код до самой pipelined.
Но помни, что задача программиста упрощать Модель. Чтобы не было передачи всего чего угодно и получения любого формата.
Удачи!
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141072
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141073
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Мурзик,
ну и вот ещё - FAQ
Java & Oracle, передача-прием массивов.
http://www.sql.ru/faq/faq_topic.aspx?fid=407
Так что усложняй свой код до самой pipelined.
Но помни, что задача программиста упрощать Модель. Чтобы не было передачи всего чего угодно и получения любого формата.
Удачи!

А я так думаю, что задача программиста - писать эффективный код, который работает быстрее и ресурсов потребляет меньше.
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141134
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикСогласно условиям задачи мне надо вернуть на клиент "коллекцию" - ибо она заполняется в хранимой функции в несколько этапов и не хочется писать "нуОчень большой select".
я вам привёл FAQ, где есть код сервера и код Java.
Код PL вы не привели. Если вы ничего не решаете, то какой смысл разговаривать?
МурзикМогут ходить под одним и тем же логином, и в одно и то же время, почему бы и нет (например, в случае dbLink к другой базе).
Опять же, под одним и тем же пользователем может быть создано несколько сессий, например в случае какого-нибудь Connection Pool или Application Continuity.
хорош выдумывать. Нет у вас пула. И не будет. Иначе архитектура и решения другие.
А под одним логином IVANOV субд воспринимает Иванова и Петрова как одного юзверя.
Не в курсе?
Если 2 юзверя зашли одновременно под одним логином, то будет 2 соединения-коннекта.
И совершенно никаких проблем.
Зачем вы пугали нас этим примером?
МурзикА я так думаю, что задача программиста - писать эффективный код, который работает быстрее и ресурсов потребляет меньше.
- значит про FAQ пример вы промолчали.
А Denis Popov тут самый знающий по работе с Ораклом.
Только его пример вас недостоин.
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141147
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс...извини. Увидел, что пример на PL ты привёл.
Тогда тебе перечислили уже все варианты работы Java с ораклом:
в порядке приоритета:
- обычный select c where без хранимки
- хранимка с cursor cst.registerOutParameter(1, OracleTypes.CURSOR);
- хранимка с встроенныи типом БД -
String sqlStatement = "select * from table(чччччччч(?))";
- global temporary table
все остальные решения мне не нравятся оверхедом, но ссылки тебе привели.

МурзикЭти представления словаря мне известны, я хотел бы понять, как Oracle-типы видятся из java.
не рекомендуется работать с этим. Т.к. Java работает со всеми БД.
Но опять же есть FAQ. См. выше.
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141859
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123упс...извини. Увидел, что пример на PL ты привёл.
Тогда тебе перечислили уже все варианты работы Java с ораклом:
в порядке приоритета:
- обычный select c where без хранимки
- хранимка с cursor cst.registerOutParameter(1, OracleTypes.CURSOR);
- хранимка с встроенныи типом БД -
String sqlStatement = "select * from table(чччччччч(?))";
- global temporary table
все остальные решения мне не нравятся оверхедом, но ссылки тебе привели.

Как я понял из вышеизложенного, единственным способом для получения инфы из pipelined-функции является
Код: plaintext
String sqlStatement = "select * from table(pipelined_func(?))";

Petro123не рекомендуется работать с этим. Т.к. Java работает со всеми БД.
Но опять же есть FAQ. См. выше.
jdbc работает со всеми базами (или правильнее сказать, с теми, драйвер от которой имеется, а если нет - можно через odbc), но вот с Oracle почему-то использование DriverManager является deprecated (так написано в доке, начиная с 10-ки).
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141861
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123МурзикСогласно условиям задачи мне надо вернуть на клиент "коллекцию" - ибо она заполняется в хранимой функции в несколько этапов и не хочется писать "нуОчень большой select".
я вам привёл FAQ, где есть код сервера и код Java.
Код PL вы не привели. Если вы ничего не решаете, то какой смысл разговаривать?
МурзикМогут ходить под одним и тем же логином, и в одно и то же время, почему бы и нет (например, в случае dbLink к другой базе).
Опять же, под одним и тем же пользователем может быть создано несколько сессий, например в случае какого-нибудь Connection Pool или Application Continuity.
хорош выдумывать. Нет у вас пула. И не будет. Иначе архитектура и решения другие.
А под одним логином IVANOV субд воспринимает Иванова и Петрова как одного юзверя.
Не в курсе?

В курсе.
Petro123Если 2 юзверя зашли одновременно под одним логином, то будет 2 соединения-коннекта.
И совершенно никаких проблем.
Зачем вы пугали нас этим примером?

Будет создано как минимум 2 сессии. Каким примером и кого я пугал?
МурзикА я так думаю, что задача программиста - писать эффективный код, который работает быстрее и ресурсов потребляет меньше.
Petro123- значит про FAQ пример вы промолчали.

Про какой FAQ пример?
Petro123А Denis Popov тут самый знающий по работе с Ораклом.
Только его пример вас недостоин.

Мой ответ и тут же вопрос - а почему его пример меня недостоин?
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141872
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикБудет создано как минимум 2 сессии. Каким примером и кого я пугал?
18623847
тут пример, что будет на юзверя временная. Разумеется, раз на коннект, то на 2 коннекта будет две временных.
На это ты дал странный ответавторВременная табла в Oracle - это некошерно.
Опять же, возможен вход двух разных людей под однима аккаунтом и т.п.
МурзикПро какой FAQ пример?
FAQ из нашего форума. Ссылка выше. Какое слово непонятно?
Мурзика почему его пример меня недостоин?
потому что select from table(pipelined - это решение.
Тебе не только я это сказал.
Потому что при кодировании надо идти от простого к сложному(выше пример). А не наоборот.
______________________________________________
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
...
Рейтинг: 0 / 0
обращение к pipelined функции Oracle11g из jdbc
    #39141966
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123МурзикБудет создано как минимум 2 сессии. Каким примером и кого я пугал?
18623847
тут пример, что будет на юзверя временная. Разумеется, раз на коннект, то на 2 коннекта будет две временных.
На это ты дал странный ответавторВременная табла в Oracle - это некошерно.
Опять же, возможен вход двух разных людей под однима аккаунтом и т.п.
МурзикПро какой FAQ пример?
FAQ из нашего форума. Ссылка выше. Какое слово непонятно?
Мурзика почему его пример меня недостоин?
потому что select from table(pipelined - это решение.
Тебе не только я это сказал.
Потому что при кодировании надо идти от простого к сложному(выше пример). А не наоборот.
______________________________________________
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.


Вопрос исчерпан, ответ получен.
Тему считаю закрытой.
Всем спасибо.
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / обращение к pipelined функции Oracle11g из jdbc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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