2012-06-20 100 views
3

我想重写一个用c-shell脚本编写的脚本,它使用sql plus命令从oracle数据库获取信息,但我用mysql替换它,并且想替换它所有使用mysql语法的sqlplus语法。我要求所有的C-shell大师向我解释一下这个命令意味着用mysql命令替换sqlplus命令

set SQLPLUS=${ORACLE_HOME}/bin/sqlplus 

set REPORT=${MYBD_HOME}/Scripts/report.sql 

沿着我使用follwing

${SQLPLUS} ${MYDBUSER} @ &{REPORT} 

我能够说调用SQL Plus命令行这样的地方我承诺什么是右手值的意思({ORACLE_HOME}/bin/sqlplus)是我的sqplus命令所在的路径,因此我需要它来调用该命令和{REPORT = $(MYBD_HOME)/Scripts.report。 sql)是通过调用sqplus命令来运行的sql脚本所在的路径是否正确?

我不明白的是set命令正在初始化它。 SQLPLUS是一个变量,所以当我尝试将它放入我的.csh脚本时,我不必键入路径?

如果是的话,我需要做的运行mysql数据库上运行此脚本被简单地设置SQLPLUS(problably将其更改为MYSQL)为指向的路径在我的mSQL的高管是正确

set MYSQL=${MYSQL_HOME}/bin/mysql 

然后只需调用mysql和运行SQL语句

${MYSQL}${MYDBUSER}@${REPORT} 

难道这就是我需要做的RO囤相同.tsch脚本从一个MySQL表中获取数据?

回答

2

你需要这样的事:

${MYSQL} -u $username -p$password -D $database < ${REPORT} 

(用户名和密码被传递在不同的MySQL的可执行比它们传递给sqlplus您将需要分析出用户名和。密码从$ {MYDBUSER}。可能包含一个字符串,例如“scott/tiger”。在mysql命令行客户机上的等价物应该是“-u scott -ptiger -D scott”。

@(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一个变量,并且使用?

您可以设置一个变量,发送到操作系统的命令行的最终结果将是相同的。

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 
+0

阀芯究竟做了什么? – rambokayambo

+0

为什么不能将用户名和密码设置为一个变量并使用它。看起来像myql比sqlplus更详细 – rambokayambo

+0

好吧,我会尽力做到这一点。似乎我不如重写整个脚本。 MYDBUSER是我假设的一个环境变量,它不存在,我将不得不将MYSQL_HOME和MYDBUSER都添加到我的env变量中。这样我可以在脚本中执行mysql命令。我想我也将不得不用我登录到mysql数据库的用户名和密码来替换吗?最后我的报告运行和sql语句并创建一个.log文件并将其放在某处?我这是什么后台命令正在做什么?我如何在MySQL中做同样的事情?谢谢 – rambokayambo