【问题标题】:Executing sql file with sqlplus in windows 10 powershell在 windows 10 powershell 中使用 sqlplus 执行 sql 文件
【发布时间】: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 中添加双引号?双引号内的双引号?
  • 不客气。关于双引号,您可以将它们加倍或使用反引号将它们转义。

标签: powershell sqlplus


【解决方案1】:

尝试使用composite formatting 构建参数字符串。好处是可以构建字符串而不用担心引用问题。请注意,字符串中的冒号 `: 无需转义,因为它不会被解释为作用域运算符。

# A variable that contains double quote
$quote = '"'

$("{0}/{1}@{2}:{3}/{4} @{5}{6}{5}" -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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多