我在下面有这个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"
/
答案 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