用mysql命令替换sqlplus命令

时间:2012-06-20 21:04:52

标签: mysql sqlplus

我正在尝试重写一个用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表中获取数据?

1 个答案:

答案 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