powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Merge Lambda
18 сообщений из 18, страница 1 из 1
Merge Lambda
    #39940505
Alex87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как записать выражение 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(","))+")"

+ ";");

смог только так, а как полностью через лямбда? Помогите плиз!
...
Рейтинг: 0 / 0
Merge Lambda
    #39940523
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex87
VALUES ("+ columns.stream().collect(Collectors.joining(","))+")"
что за изврат?
...
Рейтинг: 0 / 0
Merge Lambda
    #39940524
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе к ваде. Он любит строки плюсовать.
...
Рейтинг: 0 / 0
Merge Lambda
    #39940526
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за топики на Sql.ru пошли (((

Если не можете научиться пользоваться Debug'ером, то как минимум откройте для себя "чудо-команду" System.out.println( .... )
...
Рейтинг: 0 / 0
Merge Lambda
    #39940556
Alex87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал заменить строку:
+ " USING (SELECT ? Id, ? Name, ? Year) src"

на

+ " USING (SELECT " + columns.stream().map((c) ->"?"+c).peek(System.out::println).collect(Collectors.joining(",")) + ") src"

не проходит
...
Рейтинг: 0 / 0
Merge Lambda
    #39940574
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже писал выше что сообщество джавистов - инфантильно и подвержено каким-то странным
движениям и трендам. Типа взять старый (100% работающий императивный код) и переписать

- всё на лямбдах.
- все на асинках (Futures/Completable Futures)
- всё на аннотациях (зачем сцуко?!)

При этом что ни один из этих пунктов архитектурно не обоснован и не имеет под собой какого-либо
полезного эффекта. Так... переписать ради переписывания. ... онанизм мозга вроде как.

Ой прав был старик Пелевин почти во всех своих прогнозах.

P.S. Предполагаю что такие задачи ставят тех-лиды на собеседовании смеху ради.
...
Рейтинг: 0 / 0
Merge Lambda
    #39940587
Alex87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы не писать километры кода, когда надо обработать кучу таблиц, а воспользоваться общим лямбда-выражением
...
Рейтинг: 0 / 0
Merge Lambda
    #39940589
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex87
не проходит

так Вы результат вывода System.out.println покажите. Хрустальный шар не умеет смотреть в адресное пространство remote компьютеров и предсказывать, что за мусор в Ваших переменных.
...
Рейтинг: 0 / 0
Merge Lambda
    #39940592
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex87, друг. Для этого есть обычные процедурные шаблоны такие как

- introduce procedure,
- introduce temporary variable e.t.c.

Их много. И они работают уже более 50 лет в разных языках. Основное назначение лямбды
- передать свою implicite логику в данном вызове. Как шаблон стратегия.

В твоем случае - процедура тебе поможет. Как ни странно.
Код: java
1.
2.
+ "WHEN NOT MATCHED THEN INSERT ("+createColumnsString(columns)+")"
+ " VALUES ("+ createColumnsString(columns)+")"
...
Рейтинг: 0 / 0
Merge Lambda
    #39940593
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex87
Чтобы не писать километры кода
а вдруг ты банально ошибся?
Или непогрешим?
...
Рейтинг: 0 / 0
Merge Lambda
    #39940595
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В твоем случае - процедура тебе поможет. Как ни странно.
Код: java
1.
2.
+ "WHEN NOT MATCHED THEN INSERT ("+createColumnsString(columns)+")"
+ " VALUES ("+ createColumnsString(columns)+")"

или хранимка
CALL Выполни(?,?,?,?)
...
Рейтинг: 0 / 0
Merge Lambda
    #39940601
Alex87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понравился классический код копирования данных из одной remote таблицы в другую:

PreparedStatement s2 = to.prepareStatement(
"INSERT INTO " + table2 + " ("
+ columns.stream().collect(Collectors.joining(","))
+ ") VALUES ("
+ columns.stream().map(c -> "?").collect(Collectors.joining(",")) + ")" );

хотелось то же проделать c merge, а процедуры это детали
...
Рейтинг: 0 / 0
Merge Lambda
    #39940619
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну проделай.

Команда это всего лишь строчка. Не суметь собрать строчку нужного вида - это нужно постараться. Не уметь пользоваться отладочной печатью или дебагером, что бы понять, какая именно строка (SQL-команда) получилась после работы Вашего кода - нужно постараться

На бесмысленные восклицания "не работает, помогите", можно получить только такой же бесмысленный ответ.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Merge Lambda
    #39940629
Alex87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Образец представлен см. выше, tracer и debug для конкретного случая, речь идет об общем случае.
...
Рейтинг: 0 / 0
Merge Lambda
    #39940632
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex87
Понравился классический код копирования данных из одной remote таблицы в другую:
ну понравилось вам переставлять ноги. Вы первый раз пошли. Вы обрадовались.
Но мы не разделяем вашей радости.
Alex87
речь идет об общем случае.
прекращай обобщать.
Рано еще.
Стас?))))))
...
Рейтинг: 0 / 0
Merge Lambda
    #39940642
Alex87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если крут, собери инструкцию merge на лямбде, а так пустой разговор, я пока собрал на половину и она работает
...
Рейтинг: 0 / 0
Merge Lambda
    #39940654
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex87
Если крут, собери инструкцию merge на лямбде, а так пустой разговор, я пока собрал на половину и она работает
стас, тебя выше про print спрашивали и пошаговую отладку.
...
Рейтинг: 0 / 0
Merge Lambda
    #39940704
Alex87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просек, как надо:

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)"
+ ";");
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Merge Lambda
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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