在 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

win10怎样打开PowerShell

Hyper-V 2016 系列教程39 在 Windows 10中使用 Hyper-V 和 Windows PowerShell

PhpStorm、Windows 10 PowerShell 和 Git 命令

win10中的Windows PowerShell是啥?都有哪些作用

Windows Powershell程序在哪里?

删除 over powershell windows 10 Apps