我正在使用内存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等。
答案 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);
答案 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);
会话变量可以是数组,您可以在过程中使用循环来插入包含数组元素的多行。