在 OracleDB sqlplus 上的 shell 脚本中使用 for 循环
Using for loop in shell script over OracleDB sqlplus
我正在使用这个脚本:
#!/bin/sh
for i in $(seq 1 20);
do
echo "CREATE TABLE eugene_$i (id NUMBER NOT NULL);
! sleep 10
DECLARE j NUMBER;
BEGIN
FOR j IN 1..20 LOOP
select * from eugene_$i;
! sleep 10
END LOOP;
END;
DROP TABLE eugene_$i;" | sqlplus system/password &
done
wait
我的目的是让连接保持活动状态,运行 重复查询以进行测试。
目标是在每个 select 之后等待 10 秒,然后调用下一个。
我根本没有收到 select。我假设内部 for 循环有一些语法问题。
当您在 PL/SQL 中发出 select 语句(作为隐式或显式游标)时,您需要将值提取到变量中。您可以 return 一行或将多行批量收集到一个或多个变量中(例如,每列一个标量变量 returned,或每行一条记录)。
脚本中的 PL/SQL 因此应该类似于:
DECLARE
-- no need to declare the j variable; that's implicit to the `FOR ... loop`
id number;
BEGIN
FOR j IN 1..20 LOOP
select *
into id
from eugene_$i;
! sleep 10 -- I'm not sure this will work in your script; it's not Oracle syntax, but may get translated by your script?
END LOOP;
END;
/
我正在使用这个脚本:
#!/bin/sh
for i in $(seq 1 20);
do
echo "CREATE TABLE eugene_$i (id NUMBER NOT NULL);
! sleep 10
DECLARE j NUMBER;
BEGIN
FOR j IN 1..20 LOOP
select * from eugene_$i;
! sleep 10
END LOOP;
END;
DROP TABLE eugene_$i;" | sqlplus system/password &
done
wait
我的目的是让连接保持活动状态,运行 重复查询以进行测试。
目标是在每个 select 之后等待 10 秒,然后调用下一个。
我根本没有收到 select。我假设内部 for 循环有一些语法问题。
当您在 PL/SQL 中发出 select 语句(作为隐式或显式游标)时,您需要将值提取到变量中。您可以 return 一行或将多行批量收集到一个或多个变量中(例如,每列一个标量变量 returned,或每行一条记录)。
脚本中的 PL/SQL 因此应该类似于:
DECLARE
-- no need to declare the j variable; that's implicit to the `FOR ... loop`
id number;
BEGIN
FOR j IN 1..20 LOOP
select *
into id
from eugene_$i;
! sleep 10 -- I'm not sure this will work in your script; it's not Oracle syntax, but may get translated by your script?
END LOOP;
END;
/