【问题标题】:How to display in the logs the select query within the shell?如何在日志中显示 shell 中的选择查询?
【发布时间】:2014-10-08 10:43:14
【问题描述】:

我在下面有这个 shell 脚本。

#!/usr/bin/ksh
#

FNC_DIR=/test/Create_User
PWD_DIR=/test/users

. ${FNC_DIR}/db.profile

csrpass=`cat ${PWD_DIR}/csradmin.user`

/opt/oracle/product/9.2.0/bin/sqlplus /nolog << EOF > /test/Log/user_create.log

conn csradmin/${csrpass}@PNDBCSR2
select * from global_name;

echo "select
   dbms_metadata.get_ddl('USER', username) || '/' usercreate
from
   dba_users where username = 'NSAGUN'";




exit;

EOF

但我在日志中有错误。

SP2-0734:以“echo”sele...”开头的未知命令 - 忽略行的其余部分。 0734:以“dbms_metad...”开头的未知命令 - 忽略行的其余部分。 0042:未知命令“来自” - 忽略行的其余部分。 SP2-0734:以“dba_users ...”开头的未知命令 - 忽略行的其余部分。 SP2-0044:对于已知命令的列表,请输入 HELP 并离开进入EXIT。

我只想在日志 (/test/Log/user_create.log) 中显示我的查询结果。

select
       dbms_metadata.get_ddl('USER', username) || '/' usercreate
    from
       dba_users where username = 'NSAGUN'";

我该怎么做?

更新

我使用下面提供的代码,我在日志中得到了这个:

SQL>
SQL> select
  2     dbms_metadata.get_ddl('USER', username) || '/' usercreate
  3  from
  4     dba_users where username = 'NSAGUN';


   CREATE USER "NSAGUN" IDENTIFIED BY VALUES '1EE5F5XXXXXB194'

      DEFAULT T



SQL>
SQL> spool off

我只是想显示创建语句部分,似乎它在日志中不完整。我希望日志文件中只有这个。

CREATE USER "NSAGUN" IDENTIFIED BY VALUES '1EE5F58CB716B194'
      DEFAULT TABLESPACE "PIN01"
      TEMPORARY TABLESPACE "PINTEMP"
 /

【问题讨论】:

    标签: sql oracle shell unix


    【解决方案1】:

    echo 是一个 shell 命令,但您正试图在 Oracle SQL 脚本中使用它。

    Oracle SQL 等效项是spool。您还需要设置一些附加参数来正确控制输出(即不打印到屏幕、不回显实际命令、行大小、页面大小等)。例如:

    /opt/oracle/product/9.2.0/bin/sqlplus -s /nolog << EOF
    
    conn csradmin/${csrpass}@PNDBCSR2
    select * from global_name;
    
    set echo off
    set termout off
    set feedback off
    set linesize 80    <<< use a greater value if output lines are truncated
    set pagesize 0
    set newpage 0
    spool /test/Log/user_create.log create
    
    select
       dbms_metadata.get_ddl('USER', username) || '/' usercreate
    from
       dba_users where username = 'NSAGUN';
    
    spool off
    
    EOF
    

    【讨论】:

    • 目前无法提供更多帮助,因为无法访问 Oracle 系统。但是,1) 输出看起来被截断了(尝试设置 set linesize 300 或更大的事件值;2)我有一个模糊的回忆,set echo off 仅在脚本中有效,而不是在从标准输入提供命令 7 时 - 在这种情况下,使用sqlplus -s /nolog.
    • -s 可以解决问题。谢谢。 :) 并且能够通过添加显示整个结果:set longchunk 10000。谢谢
    猜你喜欢
    • 2013-10-14
    • 2020-04-10
    • 2011-05-01
    • 2018-10-03
    • 2014-04-19
    • 1970-01-01
    • 2017-04-29
    • 2016-04-28
    • 1970-01-01
    相关资源
    最近更新 更多