0

我有一个用于为嵌套集添加节点的 sql,这是我的 sql SELECT @myRight := rgt FROM nested_category WHERE name = 'TELEVISIONS';

更新nested_category SET rgt = rgt + 2 WHERE rgt > @myRight; 更新nested_category SET lft = lft + 2 WHERE lft > @myRight;

INSERT INTO nested_category(name, lft, rgt) VALUES('GAME CONSOLES', @myRight + 1, @myRight + 2);

通常我可以把它放在存储过程中,但在 H2 中不支持创建过程,似乎解决方案是使用带有创建别名的 java 函数。任何人都可以在这里帮助我。

4

1 回答 1

1

抱歉回复晚了。问题是,你没有添加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;
于 2010-11-26T16:37:38.650 回答