根据 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 &lt;&lt; EOF | tr -d '\n' 谢谢。请问/NOLOG是干什么用的?这会导致一条错误消息,但当它被删除时,它会按预期工作。 抱歉,您不需要/nolog。仅当您不想在命令行上提供用户/密码并希望 sqlplus 提示输入时才使用它。

以上是关于根据 SQL 输出设置 BASH 变量的主要内容,如果未能解决你的问题,请参考以下文章

期望脚本:获取 bash 命令的输出并设置变量

如何从sqlplus到bash脚本获取SQL查询输出

如何将字符串列分配给变量并在 Bash 脚本的输出中引用它

一个 SQL 查询的多个输出

Bash脚本变量解释

SQL Server变量声明设置使用输出