在sqlplus文件中隐藏SQL单词。
在sqlplus文件中隐藏SQL单词。
我想要隐藏/移除文件raw.txt中的"SSQL> SQL> SQL> SQL> 2 3 4 5 6 7 "内容。
我的步骤如下:
sqlplus -s /nolog <
发送中
email="abcd1234@gmail.com dsasd@gmail.com.com" DBpath=/opt/util/sqlplus10g interFile=/archive/equipment/EI/Jovan/dataMinerUserLogon/raw.txt FILEPATHDATEFORMAT=`TZ=GMT-8 date +%Y%m%d%H` FILENAME=logonDetails_${FILEPATHDATEFORMAT}.csv FILEDIR="/archive/equipment/EI/Jovan/dataMinerUserLogon/${FILENAME}" EMAILBODY="/archive/operations/EI/scripts/eisupport_menu/EQPT-VERSION/WOSPC/CT3/output/SystemGeneratedMessageTemplate.txt" #执行SQL文件 ${DBpath} < /archive/equipment/EI/Jovan/dataMinerUserLogon/logonuser.sql > ${interFile} awk 'NR > 17 { print }' < ${interFile} > ${FILEDIR}
我的结果
PPM417 |2 |2018 JUN 20 09:24:31 |BALASUBRAMANIAM A/L MANICKAM |CL$BAM |F8031299R |PSA
在sqlplus文件中隐藏SQL单词的问题是由于在执行脚本时出现的SQL提示导致的。解决这个问题的方法是使用sqlplus可执行文件的-silent选项来抑制SQL提示。可以将其缩写为-s。
将-silent选项放在哪里?
在SQL*Plus命令行上。点击这里查看(有点过时的)文档 - 我认为没有太多改变。祝你好运。
所以我只需要在我的脚本中加入 " sqlplus -s /nolog <<EOF " 就可以了吗?
然后我应该把它放在哪里?
- 它不是放在你的.sql脚本文件中,而是放在你的shell脚本中,如 ${DBpath} -s < /archive...
。(假设该文件的前两行是你的凭据;如果添加/nolog,那么这两行将变为一个明确的connect命令。)
问题的原因是在执行SQL脚本时,通过在脚本文件中直接包含用户名和密码的方式来连接数据库,这样的做法不安全。解决方法是在执行脚本的shell脚本中使用sqlplus命令的-s选项来隐藏SQL相关的信息和提示消息,以及使用/nolog选项来避免在启动时提示输入用户名和密码。
在shell脚本中执行SQL文件的代码如下:
#执行SQL文件 ${DBpath} -s < /archive/equipment/EI/Jovan/dataMinerUserLogon/logonuser.sql > ${interFile}
这段代码中的-s选项会隐藏SQL*Plus的信息和提示消息。
另外,如果在交互式会话中使用/nolog选项,需要显式连接到数据库,示例如下:
> sqlplus /nolog SQL*Plus: Release 12.1.0.2.0 Production on Wed Jun 20 10:13:45 2018 Copyright (c) 1982, 2014, Oracle. All rights reserved. SQL> connect hr/hr Connected. SQL>
当前的代码中,SQL脚本的前两行是用户名和密码,如果同时使用/nolog选项,那么SQL脚本需要进行修改,示例如下:
connect your_username/your_password set heading off set pagesize 0 set feedback off ...
需要注意的是,将凭据直接嵌入到文件中并不安全。