在HSQLDB中,您可以将SELECT转换为变量并在INSERT中使用它

时间:2014-02-07 21:44:34

标签: sql variables select hsqldb declare

我正在使用内存HSQLDB进行集成测试。

目前,我们有各种测试SQL文件,包含许多INSERT语句,例如

insert into customer(id, name, email) values (99, 'John Doe', 'john@test.com');

...

insert into order(id, owner, itemref, quantity) values(1, 99,  'abc', 1);
insert into order(id, owner, itemref, quantity) values(2, 99,  'def', 1);
insert into order(id, owner, itemref, quantity) values(3, 99,  'ghi', 1); 

是否可以对变量执行SELECT并随后在INSERT中使用它?

e.g。类似的东西:

declare custid bigint;
custid = select id from customer where email = 'john@test.com';

insert into order(id, owner, itemref, quantity) values(1, @custid,  'abc', 1);
insert into order(id, owner, itemref, quantity) values(2, @custid,  'def', 1);
insert into order(id, owner, itemref, quantity) values(3, @custid,  'ghi', 1); 

我已经尝试过查看HSQLDB文档,但所有关于'变量'的信息都与程序有关,而不是简单的INSERTS等。

3 个答案:

答案 0 :(得分:1)

您尝试使用HSQLDB SqlTool实现的语法是:

* VARIABLE ~ SQL QUERY RETURNING THE VALUE TO ASSIGN;

然后,您可以使用以下内容在脚本中进一步使用其值:

SOME OTHER SQL QUERY WHERE *{VARNAME};

因此,这就是你的代码的编写方式:

* custid ~
select id from customer where email = 'john@test.com';

insert into order(id, owner, itemref, quantity) values(1, *{custid},  'abc', 1);
insert into order(id, owner, itemref, quantity) values(2, *{custid},  'def', 1);
insert into order(id, owner, itemref, quantity) values(3, *{custid},  'ghi', 1);

参考:HSQLDB SqlTool - PL User Variables

答案 1 :(得分:0)

你可以这样做:

insert into order(id, owner, itemref, quantity) 
values(1, (select id from customer where email = 'john@test.com'),  'abc', 1);

答案 2 :(得分:0)

如果INSERT语句是针对测试数据的,那么您可以编写一个包含这些语句的简单PROCEDURE。然后,您可以使用此方法定义可变量的会话,并调用过程:

DECLARE myvar VARCHAR(100) DEFAULT 'JOHN@SOMETHING';

CALL myproc(myvar);

会话变量可以是数组,您可以在过程中使用循环来插入包含数组元素的多行。