在单个 SQL 语句中插入/更新/删除多个表

insert/update/delete multiple tables in single SQL statement

提问人:Ori Marko 提问时间:11/8/2018 最后编辑:Ori Marko 更新时间:11/9/2018 访问量:901

问:

当我在 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 注入有关?

java oracle jdbc jmeter sql 注入

评论


答:

0赞 Zorglube 11/8/2018 #1

为什么不尝试:,我不完全确定,但我认为它可以工作。Insert Into tableA a, tableB b Value (a.field = (Select '1' From Dual), b.field = (Select '1' From Dual))

评论

0赞 Ori Marko 11/8/2018
不同的错误:,也尝试过ORA-00926: missing VALUES keywordInsert Into tableA a, tableB b Values (a.field = (Select '1' From Dual), b.field = (Select '1' From Dual))
0赞 Zorglube 11/8/2018
所以换成,我们不是来做你所有工作的!ValueValues
0赞 Ori Marko 11/8/2018 #2

我发现带有多个表的 INSERT ALL 有效:

INSERT ALL
 Into a (a) values ('1')
 into b (b) values('1')
 SELECT * FROM dual

还可以使用 INSERT ALL 语句在一个命令中将多行插入到多个表中。

2赞 Littlefoot 11/8/2018 #3

插入将起作用,使用 ,例如INSERT ALL

insert all
  into a (col) values ('1')
  into b (col) values ('2')
select * From dual

更新和删除不会;恐怕您必须为每个表使用一个语句,除非您想使用 PL/SQL 并调用一个可以完成所有这些工作的过程

评论

0赞 Ori Marko 11/8/2018
我只是回答类似,您仍然需要删除它才能工作;
0赞 Littlefoot 11/8/2018
好吧,就(Oracle)而言,这是一个可以的终结者。如果它不应该/不能在您的 Java 程序中使用,请将其删除。 我认为这才是最重要的:)我已经删除了它。;insert all
0赞 Kris Rice 11/9/2018 #4

这;不是“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 中更改为“可调用语句”