【问题标题】:Set BASH variable based on SQL output根据 SQL 输出设置 BASH 变量
【发布时间】:2013-10-25 09:57:01
【问题描述】:

我需要根据提供电子邮件地址的 SQL 输出设置 BASH 变量。作为我所做的测试:

email=$(echo "SELECT email FROM adr" | sqlplus $user/$pass@$db)

echo $email 显示:

SQL*Plus: Release 8.1.7.0.0 - Production on Fri Oct 25 10:45:06 2013 (c) Copyright 2000 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production JServer Release 8.1.7.4.0 - Production SQL> 2 Disconnected from Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production JServer Release 8.1.7.4.0 - Production

所以我想我需要一些修整来获取电子邮件地址?

如下的手册SELECT 显示了完整的输出:

SQL> SELECT email FROM adr;

EMAIL
--------------------------------------------------------------------------------
user@mail.com

获取电子邮件地址的最简单方法是什么?

【问题讨论】:

标签: sql oracle bash sqlplus


【解决方案1】:

使用-s(静音模式)。另外,关闭列标题和反馈,如下所示:

email=$(sqlplus -s $user/$pass@$db << EOF
set serveroutput on
set heading off
set feedback off
SELECT email FROM adr;
exit;
EOF
)

【讨论】:

  • 谢谢,但电子邮件地址前面似乎有一个行分隔符,所以它破坏了脚本。解决这个问题的最佳方法是什么?
  • 使用tr 删除换行符。将第一行改为:email=$(sqlplus -s /nolog $user/$pass@$db &lt;&lt; EOF | tr -d '\n'
  • 谢谢。请问/NOLOG是干什么用的?这会导致一条错误消息,但当它被删除时,它会按预期工作。
  • 抱歉,您不需要/nolog。仅当您不想在命令行上提供用户/密码并希望 sqlplus 提示输入时才使用它。
猜你喜欢
  • 2021-08-21
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 2017-08-05
  • 2016-04-16
  • 2019-12-16
相关资源
最近更新 更多