【问题标题】:Hide SQL word in the sqlplus file在 sqlplus 文件中隐藏 SQL 词
【发布时间】:2018-06-20 17:22:17
【问题描述】:

我想隐藏/删除文件 raw.txt 中的“SSQL> SQL> SQL> SQL> 2 3 4 5 6 7”

我的步骤

sqlplus -s /nolog <<EOF
    set heading off
    set pagesize 0
    set feedback off
    set echo off
    set colsep "|"

    select 
    v_tls_equipment_logon_ct2.equipment_id,v_tls_equipment_logon_ct2.user_type_c,v_tls_equipment_logon_ct2.logon_dt,
    tls_user.user_m,tls_user.user_id,tls_user.emp_n,tls_user.org_c 
    from 
    v_tls_equipment_logon_ct2
    INNER JOIN tls_user
    ON v_tls_equipment_logon_ct2.user_id = tls_user.user_id;

发送

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"


#Execute SQL file
${DBpath} < /archive/equipment/EI/Jovan/dataMinerUserLogon/logonuser.sql > ${interFile} 
awk 'NR > 17 { print }' < ${interFile} > ${FILEDIR}

我的结果

SQL> SQL> SQL> SQL> SQL> SQL> SQL>   2    3    4    5    6    7  PPM417                             |2  |2018 JUN 20 09:24:31      |BALASUBRAMANIAM A/L MANICKAM                                                              |CL$BAM          |F8031299R              |PSA

【问题讨论】:

  • 我没有看到,在您的代码中,您将任何内容发送到 .txt 文件。请向我们展示您的所有代码,否则我们无法为您提供适当的帮助。
  • @mathguy 是的,抱歉我已经添加了
  • 你可能想看看这个。它已经有几年历史了,但我相信事情没有改变。 stackoverflow.com/questions/19033943/…
  • 我总是难以记住哪个 SQLPlus 设置控制哪个输出。我想您可能想将set termout off 添加到您的脚本中。 (作为一般惯例,您可能还想在将输出发送到文件时使用set verify off,但我认为这与本示例无关。)

标签: oracle sqlplus


【解决方案1】:

要禁止 SQL 提示,您应该对 sqlplus 可执行文件使用 -silent 选项。可简写为-s

【讨论】:

  • 我把它放在哪里?
  • 在 SQL*Plus 命令行上。 See (somewhat dated) docs here - 我认为没有太大变化。祝你好运。
  • 所以我只是在我的脚本中执行“sqlplus -s /nolog
  • @KaushikNayak 那我应该把它放在哪里?
  • @BinQuan - 它不会进入您的 .sql 脚本文件;它在你的 shell 脚本中,所以${DBpath} -s &lt; /archive...。 (大概文件的前两行是您的凭据;如果您添加/nolog,那么这些将更改为明确的connect 命令。)
【解决方案2】:

The -s flagsqlplus(或在您的情况下为sqlplus10g)命令的一部分:

抑制所有 SQL*Plus 信息和提示消息,包括命令提示符、命令的回显以及启动 SQL*Plus 时通常显示的横幅。如果省略用户名或密码,SQL*Plus 会提示输入,但提示不可见!使用SILENT 在另一个程序中调用 SQL*Plus,以便用户看不到 SQL*Plus 的使用。

该标志需要在调用程序的 shell 脚本中,而不是在 SQL 脚本文件中:

#Execute SQL file
${DBpath} -s < /archive/equipment/EI/Jovan/dataMinerUserLogon/logonuser.sql > ${interFile} 

您还提到了/nolog 选项;这会阻止 SQL*Plus 在启动时提升凭据,并且您必须显式连接。在一个看起来像这样的交互式会话中:

> 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 脚本的前两行是您要连接的用户名和密码:

your_username
your_password
set heading off
set pagesize 0
set feedback off
...

如果您也添加/nolog 选项:

#Execute SQL file
${DBpath} -s /nolog < /archive/equipment/EI/Jovan/dataMinerUserLogon/logonuser.sql > ${interFile} 

那么 SQL 文件必须更改为:

connect your_username/your_password
set heading off
set pagesize 0
set feedback off
...

当然,在文件中嵌入凭据显然不是很安全。

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多