我正在尝试重写一个用c-shell脚本编写的脚本,使用sql plus命令从oracle数据库获取信息,但我用mysql替换它,我想用mysql语法替换所有sqlplus语法。我要求所有c-shell专家向我解释这个命令的含义
set SQLPLUS=${ORACLE_HOME}/bin/sqlplus
set REPORT=${MYBD_HOME}/Scripts/report.sql
所以沿着这条线我使用下面的
调用sql plus命令 ${SQLPLUS} ${MYDBUSER} @ &{REPORT}
我可以说我承担了右手值的含义({ORACLE_HOME} / bin / sqlplus)是我的sqplus命令所在的路径,因此我需要它来调用命令和{REPORT = $ (MYBD_HOME} /Scripts.report.sql)是通过调用sqplus命令运行我的sql脚本所在的路径吗?
我不明白的是set命令正在初始化它。 SQLPLUS是一个变量,所以当我尝试将它放在我的.csh脚本中时,我不必输入路径吗?
如果是这样,那么我需要做的就是在mysql数据库上运行这个脚本,只需将SQLPLUS(可能将其更改为MYSQL)设置为指向我的msql exec正确的路径
set MYSQL=${MYSQL_HOME}/bin/mysql
然后只需调用mysql并运行sql语句
${MYSQL}${MYDBUSER}@${REPORT}
这是我需要做什么来调整相同的.tsch脚本从mysql表中获取数据?
答案 0 :(得分:2)
你需要这样的东西:
${MYSQL} -u $username -p$password -D $database < ${REPORT}
(用户名和密码以不同的方式传递给mysql可执行文件,而不是传递给SQLPlus。你需要解析来自$ {MYDBUSER}的用户名和密码。可能,包含一个字符串等as&#34; scott/tiger
&#34;。mysql命令行客户端上的等价物将是&#34; -u scott -ptiger -D scott
&#34;。
@(at sign)是一个SQLPlus的东西;它告诉SQLPLus从指定的文件名中读取输入。 mysql中的等价物是source
命令,例如
${MYSQL} -u $username -p$password <_EOD!
use $database
source ${REPORT}
_EOD!
此外,您的report.sql
文件可能包含spool
和其他SQLPLus特定命令。 mysql命令行客户端并不像SQLPlus那样强大的报告工具。
附录:
问:假脱机究竟做了什么?
SQLPlus spool
命令将输出定向到文件。它经常用于从SQLPLus会话创建日志文件,对创建报告文件也很有用。
set trimspool on
spool /tmp/file.lis
select 'foo' as foo from dual;
spool off
问:为什么我不能将用户名和passowrd设置为变量并使用它?
您可以设置变量,发送到OS的命令行的最终结果将是相同的。
set MYDBUSER="-u username -ppassword -D database"
${MYSQL} ${MYDBUSER} <${REPORT}
问:看起来像mysql比sqlplus更冗长。
mysql命令行客户端采用unix样式选项。这些是等价的:
mysql -u myusername -pmypassword -D mydatabase
mysql --user=myusername --password=mypassword --database=mydatabase