【问题标题】:create stored procedure adding node in nested set in H2 database在H2数据库的嵌套集中创建存储过程添加节点
【发布时间】: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 函数。谁能帮帮我。

【问题讨论】:

    标签: database h2


    【解决方案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“功能”部分非常有帮助。它确实为我节省了很多时间......
    猜你喜欢
    • 2011-03-07
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多