通过 OracleDB sqlplus 在 shell 脚本中使用 for 循环
Posted
技术标签:
【中文标题】通过 OracleDB sqlplus 在 shell 脚本中使用 for 循环【英文标题】:Using for loop in shell script over OracleDB sqlplus 【发布时间】:2019-11-19 12:11:42 【问题描述】:我正在使用这个脚本:
#!/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
我的目的是保持连接有效,并运行重复查询以进行测试。
目标是在每次选择后等待 10 秒,然后调用下一个。
我根本没有得到选择。我假设内部 for 循环有一些语法问题。
【问题讨论】:
【参考方案1】:当您在 PL/SQL 中发出 select 语句(作为隐式或显式游标)时,您需要将值提取到变量中。您可以返回一行或将多行批量收集到一个或多个变量中(例如,每列返回一个标量变量,或每行一条记录)。
因此,您脚本中的 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;
/
【讨论】:
谢谢,但它并不能完全满足我的要求。虽然它帮助我意识到我需要如何处理它。以上是关于通过 OracleDB sqlplus 在 shell 脚本中使用 for 循环的主要内容,如果未能解决你的问题,请参考以下文章
SQLPLUS:如何使用默认服务 SYS$USERS 进行连接
使用默认 SID 的 Sqlplus 连接 Oracle DB