如何在日志中显示shell中的select查询?

时间:2014-10-08 10:43:14

标签: sql oracle shell unix

我在下面有这个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:未知命令开始&#34; echo&#34; sele ...&#34; - 其余的行被忽略了。 0734:未知命令开始&#34; dbms_metad ...&#34; - 其余的行被忽略了。 0042:未知命令&#34;来自&#34; - 其余的行被忽略了。 SP2-0734:未知命令开始&#34; dba_users ...&#34; - 其余的行被忽略了。 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"
 /

1 个答案:

答案 0 :(得分:2)

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