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

发布于 2024-09-07 06:08:51 字数 368 浏览 8 评论 0原文

我有一个 sql,将用于为嵌套集添加节点,这是我的 sql 从nested_category中选择@myRight := rgt WHERE 名称 = '电视';

更新nested_category SET rgt = rgt + 2 WHERE rgt > @我的权利; 更新nested_category SET lft = lft + 2 WHERE lft > @我的权利;

插入nested_category(name, lft, rgt) VALUES('游戏控制台', @myRight + 1, @myRight + 2);

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

I have a sql that will be use to add a node for nested set,this is my sql
SELECT @myRight := rgt FROM nested_category
WHERE name = '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);

Normally i can put this in stored procedure, but create procedure is not supported in H2, it seems like the solution was to use java function with create alias. Can anyone please help me out here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泛泛之交 2024-09-14 06:08:51

抱歉回复晚了。问题是,您没有添加 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;

Sorry for the late answer. The problem was, you didn't add the h2 tag, so the question didn't show up on my list.

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文