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

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

Вообще у меня на проекте вечный спор, нужны нам хранимые процедуры или нет.
Одно из опасений это то, что хранимые процедуры усложням нам развертывание и обновление приложения.
В этом плане насколько эти опасения оправданы? Ведь я так понимаю, что обновление хранимой процедуры это просто запуск SQL скрипта с CREATE OR REPLACE PROCEDURE ?
...
Рейтинг: 0 / 0
23.09.2017, 22:06
    #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
24.09.2017, 01:51
    #39525366
vlad2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры, сложные структуры данных на вход
Да нет все лицензионное будьте уверены. Долго объяснять , просто лицензий достаточно. Но да, делать это сейчас приходится даже не джависту, а с++ нику.

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

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

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

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

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

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


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

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

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


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

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

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

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

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


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

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

Ты оказался слишком ленив, чтоб даже сходить по ссылкам, которые я для тебя старательно готовил.
...
Рейтинг: 0 / 0
27.09.2017, 00:33
    #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
27.09.2017, 00:54
    #39526813
Хранимые процедуры, сложные структуры данных на вход
vlad2010передать большойПередавай за несколько вызовов процедур со скалярными параметрами, developer friendly ты наш.
...
Рейтинг: 0 / 0
27.09.2017, 01:54
    #39526818
vlad2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры, сложные структуры данных на вход
Действия трансов,

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

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

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

http://cs448h.stanford.edu/DSEL-Little.pdf
...
Рейтинг: 0 / 0
27.09.2017, 09:22
    #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
27.09.2017, 09:32
    #39526884
Хранимые процедуры, сложные структуры данных на вход
vlad2010В этом плане насколько эти опасения оправданы? Ведь я так понимаю, что обновление хранимой процедуры это просто запуск SQL скрипта с CREATE OR REPLACE PROCEDURE ?

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

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


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


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

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

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

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

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

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


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