在H2数据库的嵌套集中创建存储过程添加节点
Posted
技术标签:
【中文标题】在H2数据库的嵌套集中创建存储过程添加节点【英文标题】:create stored procedure adding node in nested set in H2 database 【发布时间】:2010-06-23 15:07:35 【问题描述】:我有一个用于为嵌套集添加节点的 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 函数。谁能帮帮我。
【问题讨论】:
【参考方案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;
【讨论】:
一个像这样使用 Connection 的好例子在文档的 H2“功能”部分非常有帮助。它确实为我节省了很多时间......以上是关于在H2数据库的嵌套集中创建存储过程添加节点的主要内容,如果未能解决你的问题,请参考以下文章