2014-10-08 53 views
0

我有下面这个shell脚本。如何在日志中显示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:未知的命令开头“回声‘塞莱......’ - 行的其余部分被忽略 0734:未知的命令开头‘dbms_metad ......’ - 行的其余部分被忽略 0042:与未知的命令”,从“ - 行的其余部分被忽略 SP2-0734:未知的命令开头‘DBA_USERS ......’ - 行的其余部分被忽略 SP2-0044:对于已知的命令列表中输入HELP 并离开进入退出

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

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

我该怎么做?

UPDATE

我使用下面提供的代码,我在日志中有这样的:

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" 
/

回答

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 
+0

请参阅我上面的修改。 @isedev – 2014-10-09 02:18:13

+1

目前无法真正帮助更多,无法访问Oracle系统。但是,1)输出看起来被截断(尝试设置'set linesize 300'或事件更大的值; 2)我有一个模糊的回忆,“set echo off”仅适用于脚本,而不是从标准输入提供命令7时 - 在这种情况下,使用'sqlplus -s/nolog'。 – isedev 2014-10-09 18:09:32

+0

-s可以做到这一点。谢谢。 :),并能够通过添加显示全部结果:set longchunk 10000.谢谢 – 2014-10-10 02:30:56