在 windows 10 powershell 中使用 sqlplus 执行 sql 文件
Posted
技术标签:
【中文标题】在 windows 10 powershell 中使用 sqlplus 执行 sql 文件【英文标题】:Executing sql file with sqlplus in windows 10 powershell 【发布时间】:2021-05-02 07:32:08 【问题描述】:我创建了一个 .bat 文件,通过 Windows 任务调度定期导出 csv 文件,效果很好。 但是当我切换到 Powershell 时不起作用。它返回(在 ISE 中并右键单击 .ps1“使用 Powershell 运行”):
SQL*Plus:版本 19.0.0.0.0 - 2021 年 5 月 2 日星期日 14:05:52 生产 版本 19.10.0.0.0 版权所有 (c) 1982, 2020,甲骨文。保留所有权利。 错误:ORA-12154:TNS:无法解析指定的连接标识符
所以。我不确定我做错了什么。变量输入是假人。
在我的 .bat 中包含:
SET NLS_LANG=.AL32UTF8 SET hostIp="123.123.1.12" SET 用户名="user1" 设置密码="pass1" 设置端口="1521" SET service="myDBname" SET sqlPath="C:\我的脚本\TEST_EXPORT.sql" sqlplus %username%/%password%@%hostIp%:%port%/%service%@"%sqlPath%"
在我的 .ps1 中包含:
cls $hostIp="123.123.1.12" $username="user1" $password="pass1" $port="1521" $service="myDBname" $sqlPath="C:\我的脚本\TEST_EXPORT.sql" echo "$username/$password@$hostIp`:$port/$service @$sqlPath" sqlplus "$username/$password@$hostIp`:$port/$service @$sqlPath"
【问题讨论】:
Powershell 版本缺少 Cmd 版本的$sqlPath
周围的双引号。
除了 vonPryz 的好发现之外,sqlplus 行中的$database
没有在任何地方定义,至少在您给出的代码中是这样。它上面的行显示$service
而不是$database
@Daniel Thx。指出。我错过了输入那个。用 $service 编辑。仍然出现同样的错误。
@vonPryz 我应该如何在 $sqlpath 中添加双引号?双引号内的双引号?
不客气。关于双引号,您可以将它们加倍或使用反引号将它们转义。
【参考方案1】:
尝试使用composite formatting 构建参数字符串。好处是可以构建字符串而不用担心引用问题。请注意,字符串中的冒号 `:
无需转义,因为它不会被解释为作用域运算符。
# A variable that contains double quote
$quote = '"'
$("0/1@2:3/4 @565" -f $username, $password, $hostIp, $port, $service, $quote, $sqlPath,$quote)
user1/pass1@123.123.1.12:1521/myDBname @"C:\My script\TEST_EXPORT.sql"
另一种构建复杂字符串的方法是string interpolation。以下是三个版本,其中包含包含双引号的不同技术。复合格式也是如此。
# Double-doublequote version. I'd avoid this, as multiple double quotes are hard to read
"$username/$password@$hostIp:$port/$service @""$sqlPath"""
user1/pass1@123.123.1.12:1521/myDBname @"C:\My script\TEST_EXPORT.sql"
# Backtick-escape version
"$username/$password@$hostIp:$port/$service @`"$sqlPath`""
user1/pass1@123.123.1.12:1521/myDBname @"C:\My script\TEST_EXPORT.sql"
# Quote in a variable version
"$username/$password@$hostIp:$port/$service @$quote$sqlPath$quote"
user1/pass1@123.123.1.12:1521/myDBname @"C:\My script\TEST_EXPORT.sql"
【讨论】:
以上是关于在 windows 10 powershell 中使用 sqlplus 执行 sql 文件的主要内容,如果未能解决你的问题,请参考以下文章
Hyper-V 2016 系列教程39 在 Windows 10中使用 Hyper-V 和 Windows PowerShell
PhpStorm、Windows 10 PowerShell 和 Git 命令