我有一个用于为嵌套集添加节点的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函数。任何人都可以帮助我。
答案 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;