用 mysql 命令替换 sqlplus 命令
Posted
技术标签:
【中文标题】用 mysql 命令替换 sqlplus 命令【英文标题】:replacing sqlplus commands with mysql commands 【发布时间】:2012-06-20 21:04:51 【问题描述】:我正在尝试将用 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
这是我需要做的 ro tun 相同的 .tsch 脚本以从 mysql 表中获取数据吗?
【问题讨论】:
【参考方案1】:你需要这样的东西:
$MYSQL -u $username -p$password -D $database < $REPORT
(用户名和密码传递给 mysql 可执行文件的方式与传递给 SQLPlus 的方式不同。您需要从 $MYDBUSER 中解析出用户名和密码。可能包含诸如“ scott/tiger
"。在 mysql 命令行客户端上的等效项是 "-u scott -ptiger -D scott
"。
@(at 符号)是 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
问:为什么我不能将用户名和密码设置为变量并使用它?
您可以设置一个变量,发送到操作系统的命令行的最终结果将是相同的。
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
【讨论】:
线轴到底有什么作用? 为什么我不能将用户名和密码设置为变量并使用它。好像 mysql 比 sqlplus 更冗长 好的,我会尝试这样做。好像我还不如重写整个脚本。 MYDBUSER 是我认为的环境变量,它不存在我将不得不将 MYSQL_HOME 和 MYDBUSER 添加到我的环境变量中正确。这样我就可以在我的脚本中执行 mysql 命令。我想我还必须用登录 mysql 数据库的内容替换用户名和密码?最后我的报告运行和 sql 语句并创建一个 .log 文件并将其放在某处?我这是 spool 命令在做什么?我如何在mysql中做同样的事情?谢谢 抱歉 MYDBUSER 存在,但它设置为 raikin /raikin@mydb9i 所以我需要将其更改为 -u raikin -p 密码 -d 数据库名称?对于 mysql 对吗? @rambokyambo:是的。这就是为什么我在原始答案中展示了这一点。 “user/pass@tnsname”格式是特定于 SQLPLus 的。注意:-p 和 mysql 的密码之间没有空格:-pmypassword。以上是关于用 mysql 命令替换 sqlplus 命令的主要内容,如果未能解决你的问题,请参考以下文章