создать узел добавления хранимой процедуры во вложенном наборе в базе данных H2 - PullRequest
0 голосов
/ 23 июня 2010

У меня есть sql, который будет использоваться для добавления узла для вложенного набора, это мой sql SELECT @myRight: = rgt ОТ nested_category ГДЕ имя = 'ТЕЛЕВИДЕНИЯ';

ОБНОВЛЕНИЕ nested_category SET rgt = rgt + 2 ГДЕ rgt> @myRight; ОБНОВЛЕНИЕ nested_category SET lft = lft + 2 ГДЕ lft> @myRight;

INSERT INTO nested_category (name, lft, rgt) VALUES ('ИГРЫ КОНСОЛОВ', @myRight + 1, @myRight + 2);

Обычно я могу поместить это в хранимую процедуру, но процедура создания не поддерживается в H2, похоже, что решение состояло в том, чтобы использовать функцию java с псевдонимом create. Может кто-нибудь, пожалуйста, помогите мне здесь.

1 Ответ

1 голос
/ 26 ноября 2010

Извините за поздний ответ. Проблема была в том, что вы не добавили тег h2, поэтому вопрос не появился в моем списке.

drop table nested_category;
drop alias cat_add;
create table nested_category(id identity, lft int, rgt int, name varchar);
create alias cat_add as $$
void catAdd(Connection conn, String name, String after) throws SQLException {
  Statement stat = conn.createStatement();
  stat.execute("SET @myRight 0");
  PreparedStatement prep = conn.prepareStatement(
    "SELECT @myRight := rgt FROM nested_category WHERE name = ?");
  prep.setString(1, after);
  prep.execute();
  stat.execute("UPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myRight");
  stat.execute("UPDATE nested_category SET lft = lft + 2 WHERE lft > @myRight");
  prep = conn.prepareStatement(
    "INSERT INTO nested_category(name, lft, rgt) VALUES(?, @myRight + 1, @myRight + 2)");
  prep.setString(1, name);
  prep.execute();
}
$$;
call cat_add('television', null);
call cat_add('game consoles', 'television');
select * from nested_category;
...