提问人:Ori Marko 提问时间:11/8/2018 最后编辑:Ori Marko 更新时间:11/9/2018 访问量:901
在单个 SQL 语句中插入/更新/删除多个表
insert/update/delete multiple tables in single SQL statement
问:
当我在 Oracle DB 上使用带有 JDBC 请求的 JMeter 时,它不允许 in 语句。;
SQL 查询。 不要输入尾随分号。
例如
insert into a select '1' from dual;
insert into b select '1' from dual
将产生异常(当它被拆分为 2 个单独的请求时工作):
java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
如果我想执行测试数据的清除/插入,我不能使用 1 个 JDBC 请求插入多个表,并且我必须为每个表创建至少 1 个请求(每个表可以有多个值)。
除了使用可调用语句之外,有没有办法插入/更新/删除?
此限制是否仅与 SQL 注入有关?
答:
为什么不尝试:,我不完全确定,但我认为它可以工作。Insert Into tableA a, tableB b Value (a.field = (Select '1' From Dual), b.field = (Select '1' From Dual))
评论
ORA-00926: missing VALUES keyword
Insert Into tableA a, tableB b Values (a.field = (Select '1' From Dual), b.field = (Select '1' From Dual))
Value
Values
我发现带有多个表的 INSERT ALL 有效:
INSERT ALL
Into a (a) values ('1')
into b (b) values('1')
SELECT * FROM dual
还可以使用 INSERT ALL 语句在一个命令中将多行插入到多个表中。
插入将起作用,使用 ,例如INSERT ALL
insert all
into a (col) values ('1')
into b (col) values ('2')
select * From dual
更新和删除不会;恐怕您必须为每个表使用一个语句,除非您想使用 PL/SQL 并调用一个可以完成所有这些工作的过程。
评论
;
;
insert all
这;不是“SQL”的一部分,它是发送 SQL 的程序的终止符。在 sqldev/sqlcl/sqlplus 中,“;” 被视为知道语句的末尾,以便将该点之前的所有内容作为语句发送到数据库。然后处理下一组文本,直到下一个“;”或“/”
此示例以一个大字符串的形式呈现给数据库,例如:
“插入 Dual 中的选择'1';插入 B 从 Dual 中选择“1”
要在对数据库的 1 次调用中执行 2 个语句,它需要一个 begin/end around 来将其转换为可执行块,例如
BEGIN
insert into a select '1' from dual;
insert into b select '1' from dual;
END;
然后在 JMeter 中更改为“可调用语句”
评论