2014-10-08 25 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

相關問題