Слияние Db2 из JDBC с динамическими значениями - PullRequest
4 голосов
/ 15 февраля 2012

Я хотел бы использовать оператор слияния db2, представив его как оператор из jdbc. Я в следующем сценарии. Я работаю с проприетарным слоем персистентности и обрабатываю сущность, я не знаю, сохраняется ли она уже или нет, и я хотел бы использовать оператор слияния для вставки или обновления строки в базе данных. Является ли это возможным? Предположим, я работаю с таблицей people с тремя столбцами: id, name, фамилия , и я работаю с сущностью с id = "5", name = "chuck", Фамилия = "Норрис" Могу ли я выдать:

MERGE INTO people AS t
  USING (select '5' as id, 'chuck' as name, 'norris' as surname from SYSIBM.SYSDUMMY1)As s
    ON (t.id = s.id)
  WHEN MATCHED THEN 
      UPDATE SET t.name=s.name, t.surmane=s.surname
  WHEN NOT MATCHED THEN
    INSERT
      (id, name, surname)
    VALUES (s.id, s.name, s.surname)

такое утверждение? Я пытаюсь сделать это, но я получил ошибку. Я не думаю, что разрешено использовать выбор после USING :

USING (select '5' as id, 'chuck' as name, 'norris' as surname from SYSIBM.SYSDUMMY1)As s

Я тоже пытался сделать:

USING VALUES('5','chuck','norris') AS s(id,chuck,norris)

но это не сработает. Любая помощь будет оценена. Кроме того, кто-нибудь знает, возможно ли использовать такое утверждение в подготовленном утверждении, заменяя реальные значения, выраженные в части USING, на «?» заполнители для того, чтобы установить их для подготовленного оператора, используя методы setXXX ()?

Спасибо

Спасибо Fil

1 Ответ

5 голосов
/ 15 февраля 2012

Синтаксис для MERGE для ваших данных будет примерно таким, если вы используете DB2 Linux / Unix / Windows (LUW). Предложение VALUES содержит внутри в скобках для ИСПОЛЬЗУЕМОЙ части.

Кроме того, если вы используете LUW, вы не можете динамически подготовить MERGE (т.е. у вашего запроса не может быть маркеров параметров) в LUW 9.5 или менее. Это было добавлено в LUW 9.7.

MERGE INTO people AS t USING (
      VALUES (5, 'Chuck', 'Norris'),
             (6, 'John', 'Smith'),
             (7, 'Abraham', 'Lincoln')
             -- maybe more rows
    ) AS s (id, name, surname)
    ON t.id = s.id
    WHEN MATCHED THEN
        UPDATE SET t.name=s.name, t.surname=s.surname
    WHEN NOT MATCHED THEN
        INSERT (id, name, surname)
                VALUES (s.id, s.name, s.surname)

Однако ваша настоящая проблема с полной выборкой может заключаться в том, что в вашем запросе есть некоторые опечатки ... например, "surmane" в UPDATE SET t.name=s.name, t.surmane=s.surname

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...