powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хранимые процедуры, сложные структуры данных на вход
25 сообщений из 25, страница 1 из 1
Хранимые процедуры, сложные структуры данных на вход
    #39525327
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги добрый день!

Просветите меня пожалуйста по хранимым процедурам и функциям.
Есть ли возможность передать в хранимую PL\SQL процедуру сложную структуру данных например List, Map или т.д ?
Например есть необходимомть сохранять вопрос и его возможные варианты ответов, они будут сохранены в две таблицы.
Эта структура на Java стороне легко описывается стандартными коллекциями или Json как угодно.
Мне показалось что здесь уместно создать хранимую процедуру передать ей данные и пусть она уже пишет как надо. Вмсто двух вызовов JDBC драйвера со стороны Java у меня будет один. Однако я столкнулся с тем, что непонимаю как передать сложную структуру данных.

Вообще у меня на проекте вечный спор, нужны нам хранимые процедуры или нет.
Одно из опасений это то, что хранимые процедуры усложням нам развертывание и обновление приложения.
В этом плане насколько эти опасения оправданы? Ведь я так понимаю, что обновление хранимой процедуры это просто запуск SQL скрипта с CREATE OR REPLACE PROCEDURE ?
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39525345
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010Однако я столкнулся с тем, что непонимаю как передать сложную структуру данных.Возможно имело смысл почитать
JDBC Reference Information
SQL and PL/SQL Mappings to Oracle and JDBC Types
Потом ознакомиться с тем, что такое сериализация. Вполне себе подход может быть запаковать входные и выходные данные в XML (json).
vlad2010Вообще у меня на проекте вечный спор, нужны нам хранимые процедуры или нет.Вообще если б у вас на проекте пришло осознание, что Оракл не только черный ящик для хранения данных, то появились бы новые мысли.
А то напроектируют такие махровые джависты и прочие ORMщики немасштабируемое говно и потом пытаются нанять ораклиста который им уберет bottlenecks без основательного рефакторинга.

При таком понимании возникает подозрение что оракл нелицензионный, потому что ну нельзя платить за него такие деньги без понимание зачем. Есть же myslq, например.
А, да, может просто гос контора и откаты.
Ничего личного, просто все это очень нелепо.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39525366
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет все лицензионное будьте уверены. Долго объяснять , просто лицензий достаточно. Но да, делать это сейчас приходится даже не джависту, а с++ нику.

Правильно ли я понимаю что перенос логики на сторону oracle в разумных пределах оправдан?

Вы просто поймите ситуацию , это именно я рассказал людям о том, что вообще есть такая вещь как хранимые процедуры.
Тут SQL запросы по java коду размазаны и все нормально. Я ведь чувствую уже аргументы моих коллег и против. Допустим "а что мы будем делать если захотим перенести приложение с oracle на что то другое? с pl/sql логикой в процедурах зависнем". Вообщем это уже демагогия пошла.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39525424
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010,

Можно было бы о чем-то говорить, если б ты ознакомился с вопросом и утверждал что с тем согласен, а с тем не очень.

Погугли для начала
business logic database vs application
sql vs orm

vlad2010а что мы будем делать если захотим перенести приложение с oracle на что то другое?Вы с удивлением можете обнаружить, что блокирование в разных СУБД организовано по разному и ваше приложение вообще может перестать корректно работать.
Почитай "Том Кайт Оракл для профессионалов" там в самом начале познавательные истории.

А что вы будете делать если захотите перенести приложение на C++ или, скажем, C#?
Можно же пойти еще на уровень абстракции выше и писать на DSL, который будет генерировать код на соответствующем языке.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39525439
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopПогугли для начала
business logic database vs application
sql vs orm


я погуглил
почти везде пишут что бизнес-логика в базе это плохо

но вот вопрос, а где начинается бизнес-логика ?
a + b это уже бизнес-логика или еще нет ? (а также group by, where, etc)

по факту того что видел на практике, части логики суют по разным местам
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39525449
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokdbms_photoshopПогугли для начала
business logic database vs application
sql vs orm


я погуглил
почти везде пишут что бизнес-логика в базе это плохо

но вот вопрос, а где начинается бизнес-логика ?
a + b это уже бизнес-логика или еще нет ? (а также group by, where, etc)

по факту того что видел на практике, части логики суют по разным местам

на одной и той же верёвке можно как повеситься, так и бельё сушить
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39525469
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokя погуглил
почти везде пишут что бизнес-логика в базе это плохоЯ подразумевал, что когда человек гуглит он еще думает.
Забыл, что это верно не только лишь не для всех.
grokно вот вопрос, а где начинается бизнес-логика ?Теперь погугли "бизнес-логика".
Только не стоит гуглить "бизнес" и логика "отдельно".
Выше вероятность прийти к неверным выводам.
grokпо факту того что видел на практике, части логики суют по разным местамЗаглянул в твои темы, было бы сильно удивительно если бы ты работал, где на практике применяют толковые подходы.

Вот это было трогательно Проблема саморазвития программиста .
Респект за искренность.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39525643
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokя погуглил
почти везде пишут что бизнес-логика в базе это плохо


Тебя обманули маркетологи, формирующие предложения на перенос бизнес-логики из СУБД на AS.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526754
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо,а такой вопрос еще
Я так понял что вернуть из PL/SQL функции можно строку длиной 4000 байт т.е это максимальная длина VARCHAR.
Получается мой json должен вписываться в это ограничение?
Как то маловато получается.

Никак нельзя обойти это ограничение?
Интересует Oracle 11g 11.2.0.4
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526762
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010,

Ты оказался слишком ленив, чтоб даже сходить по ссылкам, которые я для тебя старательно готовил.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526812
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

Позволю себе не согласиться.
Я видел что можно вернуть пользовательский тип.

Можно использовать эти типы при создании таблиц например
CREATE TABLE employee_tab OF employee_typ;

Проблема в том что мне надо вернуть или передать большой список из структур типа ( псевдокод )

Код: java
1.
2.
3.
4.
5.
class A {
     int id;
     String name;
     List < B > listOfB;
}



где
Код: java
1.
2.
3.
4.
5.
class B {
   int id_b;
   String title;
   String description;
}



Я понимаючто для вас это очевидные вещи видимо, но поверьте они очевидны не всем.
PL/SQL совсем не user friendly язык.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526813
vlad2010передать большойПередавай за несколько вызовов процедур со скалярными параметрами, developer friendly ты наш.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526818
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действия трансов,

спасибо, если получать эти данные двумя вызовами то теряется теряется весь смысл писать хранимую процедуру
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526852
dbms_photoshopvlad2010,

Можно же пойти еще на уровень абстракции выше и писать на DSL, который будет генерировать код на соответствующем языке.

Вот спасибо, заставили почитать про DSL.
Но одним из примеров называют и SQL, и даже Visual Basic, и даже Excel Macro Language....

http://cs448h.stanford.edu/DSEL-Little.pdf
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526878
vlad2010Проблема в том что мне надо вернуть или передать большой список из структур типа ( псевдокод )

Код: java
1.
2.
3.
4.
5.
class A {
     int id;
     String name;
     List < B > listOfB;
}



где
Код: java
1.
2.
3.
4.
5.
class B {
   int id_b;
   String title;
   String description;
}



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create type t_b as object
(
    id_b number(9),
    title varchar2(4000 byte),
    description varcahr2(4000 byte)
)
/
create type t_list_of_b as table of t_b
/
create type t_a as object
(
    id number(9)
    name varchar2(4000 byte)
    list_of_b t_list_of_b
)
/
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526884
vlad2010В этом плане насколько эти опасения оправданы? Ведь я так понимаю, что обновление хранимой процедуры это просто запуск SQL скрипта с CREATE OR REPLACE PROCEDURE ?

Пользовательские типы в этом отношении еще страшнее, у них нет replace. Их надо либо альтерить теряя идемпотентнность скрипта развертывания, либо пересоздавать через drop/create, теряя гранты.

PS запятые забыл расставить в коде выше.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526903
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
юзерфрендельПользовательские типы в этом отношении еще страшнее, у них нет replace.Либо я не понимаю, что такое пользовательский тип, либо не понимаю о каком replace идет речь.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526957
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot AmKad]юзерфрендельне понимаю о каком replace идет речь.Афтор кагбэ намекает на "CREATE OR REPLACE"
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526964
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Афтор кагбэ намекает на "CREATE OR REPLACE"Ну вот и я понимаю, почему он говорит, что нет кляузы replace.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39526965
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadНу вот и я не понимаю, почему он говорит, что нет кляузы replace.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39527268
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokя погуглил
почти везде пишут что бизнес-логика в базе это плохо


Ты, когда читал, учитывал, что 95% людей на земле -- идиоты?
Просто этим людям примерно лет 50 назад интернет ещё в руки дали.
Ну, вдруг ты не знал...
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39527269
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010Есть ли возможность передать в хранимую PL\SQL процедуру сложную структуру данных например List, Map или т.д ?
Например есть необходимомть сохранять вопрос и его возможные варианты ответов, они будут сохранены в две таблицы.


На всякий случай, если ещё проблему не решил...

Можно ещё сделать достаточно легко и безболезненно след. образом:

0) записать твои данные в таблицу, сериализовав их в строки. и задав им один общий идентификатор (типа пакет обработки #x)
1) вызвать процедуру, передать ей этот идентификатор.
2) всё там обработать и вернуть что надо.
3) данные стереть.
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39527368
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
юзерфредель,

вот за это большое спасибо.
лист это таблица, конечно я не думал в таком ключе!
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39527369
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

сначала все таки попробую с пользовательским типом, т.к мне равно требуется как записывать так и читать эти типы из базы
...
Рейтинг: 0 / 0
Хранимые процедуры, сложные структуры данных на вход
    #39527371
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010,

В Оракле для передачи сложных структурированных данных существует специальный тип колонок таблиц XMLTYPE. Там тебе и парсеры и валидация, API для XML<=>SQL туда и обратно. Чего еще надо заморачиваться с какими-то пользовательскими типами? Как сказали там гемор с поддержкой изменений типов, зависимости в пакетах и процедурах. И DML там запускать довольно не тривиально на таблицах с пользовательсики типами и коллекциями.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хранимые процедуры, сложные структуры данных на вход
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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