【发布时间】:2020-05-25 22:43:45
【问题描述】:
我使用以下 Oracle 命令找出 Oracle 数据库的日志记录模式:
select name,log_mode from v$database
该命令在交互式会话中运行没有任何问题:
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
T2 NOARCHIVELOG
但从脚本运行时无法正常运行:
#!/bin/sh
export ORACLE_HOME=/oracle/app/oracle/product/12.1.0/dbhome_1;export ORACLE_SID=T2;/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus -L -s "user/password" <<EOF
select name,log_mode from v$database;
quit
EOF
带有以下错误消息:
ERROR at line 1:
ORA-00942: table or view does not exist
检查stdout 时,我可以看到$ 符号之后的其余命令被忽略:
StdOut = select name,log_mode from v
*
ERROR at line 1:
ORA-00942: table or view does not exist
我尝试了多种方法来处理有问题的$ 符号,使用:""、''、"\,但到目前为止它们都没有帮助。我最近的尝试如下:
#!/bin/sh
export ORACLE_HOME=/oracle/app/oracle/product/12.1.0/dbhome_1;export ORACLE_SID=T2;/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus -L -s "user/password" <<EOF
select name,log_mode from v'$'database;
quit
EOF
但现在标准输出带有 ' 单引号:
StdOut = select name,log_mode from v'$'database
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
值得一提的是,我使用的帐户同时具有SELECT ANY DICTIONARY 权限和SELECT_CATALOG_ROLE 角色。
【问题讨论】: