首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ShellScript的相对路径中执行SQLPlus sql文件

问在ShellScript的相对路径中执行SQLPlus sql文件
EN

Stack Overflow用户
提问于 2019-01-31 16:44:50
回答 1查看 1.6K关注 0票数 0

我正在尝试创建一个连接sqlplus并在子文件夹中执行file.sql的ShellScript。

代码语言:javascript
复制
- folderA/
 * scripts/myShellScript.sh
 * sql/mySql.sql

我想从myShellScript.sh执行mySql.sql。

我试过这个:

代码语言:javascript
复制
@../sql/mySql.sql

但其返回:找不到文件。

这是我的代码:

代码语言:javascript
复制
sqlplus -s $username/$password > logtest << EOF
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;

set echo on
set time off
set timing off
set heading off
set termout off
prompt ...
@../mySql.sql

SPOOL OFF
exit; 

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2019-01-31 17:16:29

@之后的路径是相对于调用myShellScript.sh的路径,而不是相对于myShellScript.sh所在的路径。

如果您通过cd进入folderA/scripts/并运行./myShellScript.sh,将SQL文件作为@../sql/mySql.sql引用,那么应该可以很好地工作。

相反,如果您以./scripts/myShellScript.sh的身份从folderA/调用myShellScript.sh,则必须使用@./sql/mySql.sql。

从任意位置调用myShellScript.sh的一种可能方法是在脚本中添加一些对当前目录的处理:

代码语言:javascript
复制
cd "${0%/*}"
sqlplus -s $username/$password > logtest << EOF
...
@../sql/mySql.sql

这样,就可以从myShellScript.sh所在的路径运行sqlplus。

但是,当然,这也会改变logtest的写入路径。

实际上,我见过的最常见的方法是将所有路径指定为绝对路径,并将它们保存在变量中:

代码语言:javascript
复制
sqlpath=/path/to/sql/files
logpath=/path/to/logs

sqlplus USER/PASSWD >"$logpath"/logtest @"$sqlpath"/mySql.sql
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54456507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档