SQL*Plus 如何将传入参数嵌入到带引号的字符串路径中
实现方案
方案1:SQL脚本内部完成路径拼接
利用SQLPLUS替换变量的终止符.实现变量和后续字符串的拼接,避免SQLPLUS误识别变量名:
- 编写SQL脚本(示例:
unplug_pdb.sql):
-- 开启替换变量(默认开启,可省略,遇到变量不生效时可加上) SET DEFINE ON; -- 拼接路径:&1.表示变量&1到此结束,&1..xml中第一个.是变量终止符,第二个.是文件名的点 DEFINE unplug_xml_path = "d:\Oracle\oradata\gl_db&1.&1..xml" -- 执行PDB拔出操作 ALTER PLUGGABLE DATABASE &1 UNPLUG INTO '&unplug_xml_path';
- PowerShell侧调用脚本:
$Variable = "实际PDB名称" sqlplus sys/你的数据库密码@实例连接串 as sysdba @unplug_pdb.sql $Variable
方案2:PowerShell侧拼接路径后传入
如果不需要在SQL侧处理路径逻辑,可直接在PowerShell中拼好完整路径后作为参数传入,更易调试:
- PowerShell侧调用代码:
$Variable = "实际PDB名称" # 按要求拼接完整路径 $xmlPath = "d:\Oracle\oradata\gl_db$Variable$Variable.xml" # 传参时用反引号转义双引号,确保SQLPLUS收到带引号的路径 sqlplus sys/你的数据库密码@实例连接串 as sysdba @unplug_pdb.sql $Variable "`"$xmlPath`""
- 对应SQL脚本写法:
SET DEFINE ON; ALTER PLUGGABLE DATABASE &1 UNPLUG INTO '&2';
注意事项
- 若SQL脚本中其他位置需要用到&字符且不希望被识别为替换变量,可提前执行
SET ESCAPE \配置转义符,需输出&的位置写为\& - PowerShell传包含空格或特殊符号的路径参数时,必须转义双引号,否则参数会被拆分为多个传入SQLPLUS
内容的提问来源于stack exchange,提问作者Anka
相关产品推荐
相关产品推荐

