根据 SQL 输出设置 BASH 变量
Posted
技术标签:
【中文标题】根据 SQL 输出设置 BASH 变量【英文标题】:Set BASH variable based on SQL output 【发布时间】: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
获取电子邮件地址的最简单方法是什么?
【问题讨论】:
***.com/questions/15663763/… 【参考方案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 << EOF | tr -d '\n'
谢谢。请问/NOLOG
是干什么用的?这会导致一条错误消息,但当它被删除时,它会按预期工作。
抱歉,您不需要/nolog
。仅当您不想在命令行上提供用户/密码并希望 sqlplus 提示输入时才使用它。以上是关于根据 SQL 输出设置 BASH 变量的主要内容,如果未能解决你的问题,请参考以下文章