在该脚本中使用相对于 SQL 脚本位置的路径?

Posted

技术标签:

【中文标题】在该脚本中使用相对于 SQL 脚本位置的路径?【英文标题】:Using path relative to SQL script location in that script? 【发布时间】:2017-03-02 11:04:15 【问题描述】:

我有一个 sql 脚本

dir:\some\path\script.sql

这个脚本是通过SqlDeveloper和spools执行一些数据到

dir:\some\path\data\tablename.csv

现在,我必须将脚本存储在 .sql 文件中,因为如果我直接从 SqlDeveloper 执行它,spool 会将查询本身写入我不想要的文件中。

但我也不想对路径进行硬编码,因为我团队中的每个人都有他们想要的 GIT 存储库,所以我想要实现的场景是我的 sql 脚本使用来自其位置的相对路径来编写csv 文件。

目前 script.sql 看起来像这样:

SET COLSEP ";"
spool dir:\some\path\data\table1.csv
select /*csv*/ * from table1;
spool off;

我想看起来像这样

SET COLSEP ";"
spool current_dir\data\table1.csv
select /*csv*/ * from table1;
spool off;

这样在使用脚本时,在调用脚本时只需输入一次路径。

【问题讨论】:

您是否正在寻找一种方法来定义动态线轴位置?如果是那么-***.com/questions/1246360/… @JSapkota 不是真的,据我了解,您链接的部分所需路径存储在表中。我需要的是从脚本中获取 sql 脚本的位置。 【参考方案1】:

更多的是一种解决方法,而不是问题的解决方案,但现在我只是在与运行脚本 (@script.sql) 的 script.sql 相同的目录中创建了一个 scriptRunner.sql 文件。

当打开这个文件时,似乎SqlDevelopers 工作目录被设置为两个.sql 文件所在的目录,并且这个属性被扩展到被调用的脚本,因此我可以简单地使用

spool data\table1.csv

【讨论】:

以上是关于在该脚本中使用相对于 SQL 脚本位置的路径?的主要内容,如果未能解决你的问题,请参考以下文章

使用相对路径从另一个脚本调用一个 shell 脚本

如何在 Ubuntu 上的 mysql 中运行 sql 脚本?

CAPL脚本中关于相对路径/绝对路径操作的几个傻傻分不清的内置函数

确定当前 PowerShell 脚本位置的最佳方法是啥?

Shell脚本——获取脚本所在的绝对路径

Shell脚本——获取脚本所在的绝对路径