在H2数据库中的嵌套集中创建存储过程添加节点

时间:2010-06-23 15:07:36

标签: database h2

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

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

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

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

1 个答案:

答案 0 :(得分: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;