我必须
所以,我已经创建了一个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)当然我在文件夹中有一些带有一些操作的.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答案 0 :(得分:1)
您可以拆分参数,以便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,因此无法在我的计算机上运行。
答案 1 :(得分:1)
感谢Alex Poole,答案在于文档
使用@@在另一个脚本中调用SQL脚本时出现SP2-0310错误,并且父脚本的路径包含空格(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
所以,你必须在sqlplus之前更改目录,主机cd 不起作用。
谢谢你们,伙计们。