insert/update/delete 单个 SQL 语句中的多个表

insert/update/delete multiple tables in single SQL statement

当我在 Oracle DB 上将 JMeter 与 JDBC request 一起使用时,它不允许在语句中使用 ;

SQL query. Do not enter a trailing semi-colon.

例如

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

如果我想执行 clear/insert 测试数据,我无法使用 1 JDBC 请求插入多个 tables 并且我必须为每个 table 创建至少 1 个请求(每个 table 可以有多个值)。

有没有办法 insert/update/delete 除了使用可调用语句?

此限制仅与 SQL 注入有关吗?

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

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

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

You can also use the INSERT ALL statement to insert multiple rows into more than one table in one command.

插入可以,使用INSERT ALL,例如

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

更新和删除不会;恐怕你必须为每个 table 使用一个语句,除非你想使用 PL/SQL 并调用一个 过程 来完成所有工作.

;不是 "sql" 的一部分,它是发送 sql 的程序的终止符。在sqldev/sqlcl/sqlplus中的“;”被视为知道语句的结尾,以将到该点的所有内容作为语句发送到数据库。然后处理下一组文本直到下一个“;”或“/”

此示例以一个大字符串的形式呈现给数据库,例如:

"insert into a select '1' from dual; insert into b select '1' from dual"

要在对数据库的 1 次调用中执行 2 条语句,需要 begin/end 将其转换为可执行块,例如

BEGIN
insert into a select '1' from dual;
insert into b select '1' from dual;
END;

然后在JMeter中改成"Callable Statement"