SQL*加上父脚本路径中带有空格的@@行为
SQL*Plus @@ behaviour with spaces in the parent script path
我必须
- 连接
- 调用sql-脚本
- 退出sql加
所以,我创建了一个 sql-脚本 run.sql:
set def on
WHENEVER SQLERROR EXIT ROLLBACK
conn &2
@"&1";
exit;
例如,我在文件夹 "c:\folder with spaces\":
中有一些 sql-脚本
a) install.sql 内容:
prompt Hello
@@a.sql
@@b.sql
b) 当然我在文件夹中有 a.sql 和 b.sql 文件以及一些操作。
所以,我尝试 运行 我的脚本:
sqlplus /nolog @"Path_to_Run\run.sql" \"c:\folder with spaces\install.sql\" user/pass@server
我得到了一个输出:
Hello
SP2-0310: unable to open file "c:\folder.sql"
所以,可以打开install.sql,但是不能打开@@a.sql。他尝试 运行 这样的脚本:
@c:\folder with spaces\a.sql
但是我怎样才能在这里加引号呢?他应该 运行 文件夹 "c:\folder with spaces\".
中的脚本 a.sql
您可以拆分参数,以便 run.sql 包含
set def on
WHENEVER SQLERROR EXIT ROLLBACK
conn &2
host cd "@3"
@"&1";
exit;
并用
调用它
sqlplus /nolog @"Path_to_Run\run.sql" \"c:\folder with spaces\" install.sql user/pass@server
请注意,它可能需要一些调整,它在我的计算机上不起作用,因为 cygwin 弄乱了它自己的 cd。
感谢 Alex Poole,答案在文档中
SP2-0310 Error when Calling a SQL Script in Another Script using @@ and the Path to the Parent Script Contains Spaces (Doc ID 745780.1)
并且一共有三种解法:
使用 8dot3 表示法。例如。使用 PROGRA~1 而不是 "Program Files".
避免将 sql 脚本保存在文件夹名称中包含空格的路径上。
cd 到包含脚本的目录,而不是在 SQL*Plus.
中调用脚本时提供完整路径
第一种方法在 Windows 7 中对我不起作用(在 Win7 中设置 8dot3 需要做很多工作)。我得到:
>cd c:\folder~1
The system cannot find the path specified.
第二种方法对我也不起作用,我无法操作这些文件夹。我必须按原样使用它们。
第三种方法工作正常(但方式与上一条消息不同):
cd "c:\folder with spaces"
sqlplus /nolog @c:\run\run.sql install.sql user/pass@server
所以,你必须先更改目录 sql另外,host cd 不起作用。
谢谢大家。
我必须
- 连接
- 调用sql-脚本
- 退出sql加
所以,我创建了一个 sql-脚本 run.sql:
set def on
WHENEVER SQLERROR EXIT ROLLBACK
conn &2
@"&1";
exit;
例如,我在文件夹 "c:\folder with spaces\":
中有一些 sql-脚本a) install.sql 内容:
prompt Hello
@@a.sql
@@b.sql
b) 当然我在文件夹中有 a.sql 和 b.sql 文件以及一些操作。
所以,我尝试 运行 我的脚本:
sqlplus /nolog @"Path_to_Run\run.sql" \"c:\folder with spaces\install.sql\" user/pass@server
我得到了一个输出:
Hello
SP2-0310: unable to open file "c:\folder.sql"
所以,可以打开install.sql,但是不能打开@@a.sql。他尝试 运行 这样的脚本:
@c:\folder with spaces\a.sql
但是我怎样才能在这里加引号呢?他应该 运行 文件夹 "c:\folder with spaces\".
中的脚本 a.sql您可以拆分参数,以便 run.sql 包含
set def on
WHENEVER SQLERROR EXIT ROLLBACK
conn &2
host cd "@3"
@"&1";
exit;
并用
调用它sqlplus /nolog @"Path_to_Run\run.sql" \"c:\folder with spaces\" install.sql user/pass@server
请注意,它可能需要一些调整,它在我的计算机上不起作用,因为 cygwin 弄乱了它自己的 cd。
感谢 Alex Poole,答案在文档中
SP2-0310 Error when Calling a SQL Script in Another Script using @@ and the Path to the Parent Script Contains Spaces (Doc ID 745780.1)
并且一共有三种解法:
使用 8dot3 表示法。例如。使用 PROGRA~1 而不是 "Program Files".
避免将 sql 脚本保存在文件夹名称中包含空格的路径上。
cd 到包含脚本的目录,而不是在 SQL*Plus.
中调用脚本时提供完整路径
第一种方法在 Windows 7 中对我不起作用(在 Win7 中设置 8dot3 需要做很多工作)。我得到:
>cd c:\folder~1
The system cannot find the path specified.
第二种方法对我也不起作用,我无法操作这些文件夹。我必须按原样使用它们。
第三种方法工作正常(但方式与上一条消息不同):
cd "c:\folder with spaces"
sqlplus /nolog @c:\run\run.sql install.sql user/pass@server
所以,你必须先更改目录 sql另外,host cd 不起作用。
谢谢大家。