|
Merge Lambda
|
|||
---|---|---|---|
#18+
Как записать выражение merge через лямбда выражения: PreparedStatement s2 = to.prepareStatement("MERGE INTO " + table2 +" target" + " USING (SELECT ? DictionaryId," + "? RegistryId) src " + "ON (target.DictionaryId=src.DictionaryId)" + " WHEN MATCHED THEN UPDATE SET RegistryId=src.RegistryId " + "WHEN NOT MATCHED THEN INSERT (DictionaryId, RegistryId)" + " VALUES (src.DictionaryId, src.RegistryId)" + ";"); - это работает, теперь пробую через ламбда выражения: PreparedStatement s2 = to.prepareStatement( "MERGE INTO " + table2 + " target" + " USING (SELECT ? Id, ? Name, ? Year) src" + " ON (target.Id=src.Id)" + " WHEN MATCHED THEN UPDATE SET Name=src.Name, Year=src.Year " + "WHEN NOT MATCHED THEN INSERT ("+columns.stream().collect(Collectors.joining(","))+")" + " VALUES ("+ columns.stream().collect(Collectors.joining(","))+")" + ";"); смог только так, а как полностью через лямбда? Помогите плиз! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 12:31 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Alex87 VALUES ("+ columns.stream().collect(Collectors.joining(","))+")" ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 13:04 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Тебе к ваде. Он любит строки плюсовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 13:05 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Что за топики на Sql.ru пошли ((( Если не можете научиться пользоваться Debug'ером, то как минимум откройте для себя "чудо-команду" System.out.println( .... ) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 13:11 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
пробовал заменить строку: + " USING (SELECT ? Id, ? Name, ? Year) src" на + " USING (SELECT " + columns.stream().map((c) ->"?"+c).peek(System.out::println).collect(Collectors.joining(",")) + ") src" не проходит ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 14:22 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Я уже писал выше что сообщество джавистов - инфантильно и подвержено каким-то странным движениям и трендам. Типа взять старый (100% работающий императивный код) и переписать - всё на лямбдах. - все на асинках (Futures/Completable Futures) - всё на аннотациях (зачем сцуко?!) При этом что ни один из этих пунктов архитектурно не обоснован и не имеет под собой какого-либо полезного эффекта. Так... переписать ради переписывания. ... онанизм мозга вроде как. Ой прав был старик Пелевин почти во всех своих прогнозах. P.S. Предполагаю что такие задачи ставят тех-лиды на собеседовании смеху ради. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 14:41 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Чтобы не писать километры кода, когда надо обработать кучу таблиц, а воспользоваться общим лямбда-выражением ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 14:58 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Alex87 не проходит так Вы результат вывода System.out.println покажите. Хрустальный шар не умеет смотреть в адресное пространство remote компьютеров и предсказывать, что за мусор в Ваших переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 14:59 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Alex87, друг. Для этого есть обычные процедурные шаблоны такие как - introduce procedure, - introduce temporary variable e.t.c. Их много. И они работают уже более 50 лет в разных языках. Основное назначение лямбды - передать свою implicite логику в данном вызове. Как шаблон стратегия. В твоем случае - процедура тебе поможет. Как ни странно. Код: java 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 15:02 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Alex87 Чтобы не писать километры кода Или непогрешим? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 15:03 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
mayton В твоем случае - процедура тебе поможет. Как ни странно. Код: java 1. 2.
CALL Выполни(?,?,?,?) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 15:08 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Понравился классический код копирования данных из одной remote таблицы в другую: PreparedStatement s2 = to.prepareStatement( "INSERT INTO " + table2 + " (" + columns.stream().collect(Collectors.joining(",")) + ") VALUES (" + columns.stream().map(c -> "?").collect(Collectors.joining(",")) + ")" ); хотелось то же проделать c merge, а процедуры это детали ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 15:26 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Ну проделай. Команда это всего лишь строчка. Не суметь собрать строчку нужного вида - это нужно постараться. Не уметь пользоваться отладочной печатью или дебагером, что бы понять, какая именно строка (SQL-команда) получилась после работы Вашего кода - нужно постараться На бесмысленные восклицания "не работает, помогите", можно получить только такой же бесмысленный ответ. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 15:52 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Образец представлен см. выше, tracer и debug для конкретного случая, речь идет об общем случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 16:08 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Alex87 Понравился классический код копирования данных из одной remote таблицы в другую: Но мы не разделяем вашей радости. Alex87 речь идет об общем случае. Рано еще. Стас?)))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 16:13 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Если крут, собери инструкцию merge на лямбде, а так пустой разговор, я пока собрал на половину и она работает ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 16:25 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Alex87 Если крут, собери инструкцию merge на лямбде, а так пустой разговор, я пока собрал на половину и она работает ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 16:46 |
|
Merge Lambda
|
|||
---|---|---|---|
#18+
Просек, как надо: PreparedStatement s2 = to.prepareStatement( "MERGE INTO " + table2 + " target" + " USING ( SELECT "+ columns.stream().map(c -> "? "+c).peek(System.out::println).collect(Collectors.joining(","))+" ) src" // + " USING (SELECT ? Id, ? Name, ? Year) src" + " ON (target.Id=src.Id)" + " WHEN MATCHED THEN UPDATE SET " + columns.stream().map(c -> c+"=src."+c).peek(System.out::println).collect(Collectors.joining(",")) +" " // + " WHEN MATCHED THEN UPDATE SET Name=src.Name, Year=src.Year " + "WHEN NOT MATCHED THEN INSERT ("+columns.stream().collect(Collectors.joining(","))+")" + " VALUES ("+ columns.stream().collect(Collectors.joining(","))+")" // + " VALUES (src.Id, src.Name, src.Year)" + ";"); ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 18:01 |
|
|
start [/forum/topic.php?fid=59&msg=39940574&tid=2120867]: |
0ms |
get settings: |
26ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
320ms |
get tp. blocked users: |
2ms |
others: | 303ms |
total: | 734ms |
0 / 0 |