【问题标题】:Using for loop in shell script over OracleDB sqlplus通过 OracleDB sqlplus 在 shell 脚本中使用 for 循环
【发布时间】: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 循环有一些语法问题。

【问题讨论】:

    标签: bash oracle shell sqlplus


    【解决方案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;
    /
    

    【讨论】:

    • 谢谢,但它并不能完全满足我的要求。虽然它帮助我意识到我需要如何处理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-05-17
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多