Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Хранимые процедуры, сложные структуры данных на вход  [new]
vlad2010
Member

Откуда:
Сообщений: 149
Коллеги добрый день!

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

Вообще у меня на проекте вечный спор, нужны нам хранимые процедуры или нет.
Одно из опасений это то, что хранимые процедуры усложням нам развертывание и обновление приложения.
В этом плане насколько эти опасения оправданы? Ведь я так понимаю, что обновление хранимой процедуры это просто запуск SQL скрипта с CREATE OR REPLACE PROCEDURE ?
23 сен 17, 20:48    [20818306]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
vlad2010
Однако я столкнулся с тем, что непонимаю как передать сложную структуру данных.
Возможно имело смысл почитать
JDBC Reference Information
SQL and PL/SQL Mappings to Oracle and JDBC Types
Потом ознакомиться с тем, что такое сериализация. Вполне себе подход может быть запаковать входные и выходные данные в XML (json).
vlad2010
Вообще у меня на проекте вечный спор, нужны нам хранимые процедуры или нет.
Вообще если б у вас на проекте пришло осознание, что Оракл не только черный ящик для хранения данных, то появились бы новые мысли.
А то напроектируют такие махровые джависты и прочие ORMщики немасштабируемое говно и потом пытаются нанять ораклиста который им уберет bottlenecks без основательного рефакторинга.

При таком понимании возникает подозрение что оракл нелицензионный, потому что ну нельзя платить за него такие деньги без понимание зачем. Есть же myslq, например.
А, да, может просто гос контора и откаты.
Ничего личного, просто все это очень нелепо.
23 сен 17, 22:06    [20818416]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
vlad2010
Member

Откуда:
Сообщений: 149
Да нет все лицензионное будьте уверены. Долго объяснять , просто лицензий достаточно. Но да, делать это сейчас приходится даже не джависту, а с++ нику.

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

Вы просто поймите ситуацию , это именно я рассказал людям о том, что вообще есть такая вещь как хранимые процедуры.
Тут SQL запросы по java коду размазаны и все нормально. Я ведь чувствую уже аргументы моих коллег и против. Допустим "а что мы будем делать если захотим перенести приложение с oracle на что то другое? с pl/sql логикой в процедурах зависнем". Вообщем это уже демагогия пошла.
24 сен 17, 01:51    [20818624]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
vlad2010,

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

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

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

А что вы будете делать если захотите перенести приложение на C++ или, скажем, C#?
Можно же пойти еще на уровень абстракции выше и писать на DSL, который будет генерировать код на соответствующем языке.
24 сен 17, 14:00    [20818854]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
grok
Member

Откуда:
Сообщений: 1686
dbms_photoshop
Погугли для начала
business logic database vs application
sql vs orm


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

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

по факту того что видел на практике, части логики суют по разным местам
24 сен 17, 15:24    [20818923]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
tip78
Member

Откуда: Москва
Сообщений: 1025
grok
dbms_photoshop
Погугли для начала
business logic database vs application
sql vs orm


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

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

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


на одной и той же верёвке можно как повеситься, так и бельё сушить
24 сен 17, 16:07    [20818973]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
grok
я погуглил
почти везде пишут что бизнес-логика в базе это плохо
Я подразумевал, что когда человек гуглит он еще думает.
Забыл, что это верно не только лишь не для всех.
grok
но вот вопрос, а где начинается бизнес-логика ?
Теперь погугли "бизнес-логика".
Только не стоит гуглить "бизнес" и логика "отдельно".
Выше вероятность прийти к неверным выводам.
grok
по факту того что видел на практике, части логики суют по разным местам
Заглянул в твои темы, было бы сильно удивительно если бы ты работал, где на практике применяют толковые подходы.

Вот это было трогательно Проблема саморазвития программиста.
Респект за искренность.
24 сен 17, 17:55    [20819059]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
XMLer
Member

Откуда:
Сообщений: 258
grok
я погуглил
почти везде пишут что бизнес-логика в базе это плохо


Тебя обманули маркетологи, формирующие предложения на перенос бизнес-логики из СУБД на AS.
25 сен 17, 10:50    [20819941]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
vlad2010
Member

Откуда:
Сообщений: 149
Хорошо,а такой вопрос еще
Я так понял что вернуть из PL/SQL функции можно строку длиной 4000 байт т.е это максимальная длина VARCHAR.
Получается мой json должен вписываться в это ограничение?
Как то маловато получается.

Никак нельзя обойти это ограничение?
Интересует Oracle 11g 11.2.0.4
26 сен 17, 21:03    [20825088]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
vlad2010,

Ты оказался слишком ленив, чтоб даже сходить по ссылкам, которые я для тебя старательно готовил.
26 сен 17, 21:39    [20825144]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
vlad2010
Member

Откуда:
Сообщений: 149
dbms_photoshop,

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

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

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

class A {
     int id;
     String name;
     List < B > listOfB;
}


где
class B {
   int id_b;
   String title;
   String description;
}


Я понимаючто для вас это очевидные вещи видимо, но поверьте они очевидны не всем.
PL/SQL совсем не user friendly язык.
27 сен 17, 00:33    [20825503]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
Действия трансов
Guest
vlad2010
передать большой
Передавай за несколько вызовов процедур со скалярными параметрами, developer friendly ты наш.
27 сен 17, 00:54    [20825524]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
vlad2010
Member

Откуда:
Сообщений: 149
Действия трансов,

спасибо, если получать эти данные двумя вызовами то теряется теряется весь смысл писать хранимую процедуру
27 сен 17, 01:54    [20825548]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
ЛюбопытнаяКошка
Guest
dbms_photoshop
vlad2010,

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


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

http://cs448h.stanford.edu/DSEL-Little.pdf
27 сен 17, 08:38    [20825675]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
юзерфредель
Guest
vlad2010
Проблема в том что мне надо вернуть или передать большой список из структур типа ( псевдокод )

class A {
     int id;
     String name;
     List < B > listOfB;
}


где
class B {
   int id_b;
   String title;
   String description;
}


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
)
/
27 сен 17, 09:22    [20825734]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
юзерфрендель
Guest
vlad2010
В этом плане насколько эти опасения оправданы? Ведь я так понимаю, что обновление хранимой процедуры это просто запуск SQL скрипта с CREATE OR REPLACE PROCEDURE ?


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

PS запятые забыл расставить в коде выше.
27 сен 17, 09:32    [20825756]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
AmKad
Member

Откуда:
Сообщений: 5222
юзерфрендель
Пользовательские типы в этом отношении еще страшнее, у них нет replace.
Либо я не понимаю, что такое пользовательский тип, либо не понимаю о каком replace идет речь.
27 сен 17, 10:02    [20825833]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
[quot AmKad]
юзерфрендель
не понимаю о каком replace идет речь.
Афтор кагбэ намекает на "CREATE OR REPLACE"
27 сен 17, 10:44    [20826008]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
AmKad
Member

Откуда:
Сообщений: 5222
--Eugene--
Афтор кагбэ намекает на "CREATE OR REPLACE"
Ну вот и я понимаю, почему он говорит, что нет кляузы replace.
27 сен 17, 10:47    [20826031]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
AmKad
Member

Откуда:
Сообщений: 5222
AmKad
Ну вот и я не понимаю, почему он говорит, что нет кляузы replace.
27 сен 17, 10:48    [20826034]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
grok
я погуглил
почти везде пишут что бизнес-логика в базе это плохо


Ты, когда читал, учитывал, что 95% людей на земле -- идиоты?
Просто этим людям примерно лет 50 назад интернет ещё в руки дали.
Ну, вдруг ты не знал...
27 сен 17, 18:37    [20827548]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
vlad2010
Есть ли возможность передать в хранимую PL\SQL процедуру сложную структуру данных например List, Map или т.д ?
Например есть необходимомть сохранять вопрос и его возможные варианты ответов, они будут сохранены в две таблицы.


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

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

0) записать твои данные в таблицу, сериализовав их в строки. и задав им один общий идентификатор (типа пакет обработки #x)
1) вызвать процедуру, передать ей этот идентификатор.
2) всё там обработать и вернуть что надо.
3) данные стереть.
27 сен 17, 18:41    [20827552]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
vlad2010
Member

Откуда:
Сообщений: 149
юзерфредель,

вот за это большое спасибо.
лист это таблица, конечно я не думал в таком ключе!
28 сен 17, 00:33    [20827943]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
vlad2010
Member

Откуда:
Сообщений: 149
MasterZiv,

сначала все таки попробую с пользовательским типом, т.к мне равно требуется как записывать так и читать эти типы из базы
28 сен 17, 00:35    [20827944]     Ответить | Цитировать Сообщить модератору
 Re: Хранимые процедуры, сложные структуры данных на вход  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7432
vlad2010,

В Оракле для передачи сложных структурированных данных существует специальный тип колонок таблиц XMLTYPE. Там тебе и парсеры и валидация, API для XML<=>SQL туда и обратно. Чего еще надо заморачиваться с какими-то пользовательскими типами? Как сказали там гемор с поддержкой изменений типов, зависимости в пакетах и процедурах. И DML там запускать довольно не тривиально на таблицах с пользовательсики типами и коллекциями.
28 сен 17, 01:10    [20827955]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить