【问题标题】:sql in for loop not workingfor循环中的sql不起作用
【发布时间】:2015-07-05 23:25:41
【问题描述】:

我正在尝试运行脚本调用 Interface.sh,其中 for 循环从文件中获取值并使用此处文档通过一系列 sql 命令运行它。

该文件(称为 InterfaceSymbols.ASIA)包含 3 行文本。

以下是我目前所拥有的。

rsh $MACHINE
cd /srg/data/Interface
for line in `cat /srg/data/Interface/InterfaceSymbols.ASIA`
    do  
    sql <<EOF
    select s.symbol, i.inventory
    from
    symbol s,
    inventory i,
    portfolio_inventory pi
    WHERE
    s.portfolio = pi.portfolio AND
    pi.inventory = i.inventory
    and s.symbol = "$line";
    exit
EOF
done

当我运行 shell 脚本时,它并没有按我的预期工作。

然后 rsh 转到 $MACHINE,然后从那里什么也不做。当我退出机器时它返回:

Inter.sh: line 16: sql: command not found
Inter.sh: line 16: sql: command not found
Inter.sh: line 16: sql: command not found

我做错了什么??我可以看到它尝试运行它 3 次(相当于文件中的值的数量)。

【问题讨论】:

  • 它无法识别sql命令,尝试给它完整路径
  • 好的,但现在我得到了:Enter user-name: SP2-0306: Invalid option.Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]where &lt;logon&gt; ::= &lt;username&gt;[/&lt;password&gt;][@&lt;connect_identifier&gt;] &lt;proxy&gt; ::= &lt;proxyuser&gt;[&lt;username&gt;][/&lt;password&gt;] [@&lt;connect_identifier&gt;]Enter user-name: Enter password:ERROR:ORA-12545: Connect failed because target host or object does not exist我如何传递 sql 登录名和密码?
  • 现在它知道什么是 sql,您需要告诉它它正在连接到哪个数据库,并为它提供用户 ID 和密码。换句话说,您需要检查调用 sql 的语法。
  • 类似 sql user_id/password@yourdb
  • 这很好,谢谢,还有一个问题 - 如何将循环的此处文档的输出保存到单独的文件中?似乎无法解决!

标签: bash shell loops unix scripting


【解决方案1】:

好吧,看起来您的远程计算机上的路径中没有sql。这可能因为rsh,出于安全的愿望,将路径限制为:

/usr/bin:/usr/sbin

您可以使用以下命令确认这一点:

rsh otherbox -l username "/usr/bin/echo \$PATH"

最简单的解决方法可能是提供sql 的完整文件规范,而不是依赖于在您的路径中找到它。

或者,你可以使用类似的东西:

rsh otherbox -l username ". .profile && sql something or other"

在运行命令之前获取配置文件(并希望设置更完整的路径)。

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 2017-04-13
    • 2013-12-31
    • 2011-03-08
    • 1970-01-01
    • 2016-01-18
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多