如何仅将 SQLPlus 错误保存到文件(从 powershell 调用)
Howto save only SQLPlus errors to file (called from powershell)
我正在从 powershell 调用 SQLPlus,如果出现问题,我会尝试向用户显示错误消息。如果没有问题,脚本应该继续。
这是我用的
sqlplus -S $user/$user@$server @$file
对于 sqlcmd,我设法这样做了:
sqlcmd -S $serverLower -U $user -P $user -d $user -i $file -r1 2>errors.txt 1>$null
if (CheckIfFileExistsAndNotEmpty errors.txt)
{
get-content errors.txt | write-host
}
选项 -r 设置为 1 将输出错误,2>errors.txt 将它们写入文件。
我想要 SQLPlus 类似的东西,如果可能的话不使用 SPOOL(sqlplus 执行的脚本是用户定义的,如果我不应该更改它们,我会喜欢它。
我自己找到的答案:
AddAsFirstLine $file "SPOOL $errorfilepath"
Add-Content -Path $file -Value "SPOOL off"
sqlplus -S $user/$user@$server @$file 1>$null
$errors = Select-String -Path $errorfilepath -Pattern "(SP2|ORA|Msg.*Level.*State.*Server.*Line|SQLConverter-Error:|Init-Error:|Invalid.filename)"
Set-Content -Path errors.txt $errors
Remove-Item $errorfilepath -Force | Out-Null
}
if (CheckIfFileExistsAndNotEmpty errors.txt)
{
Write-Host "Error while executing script"
get-content errors.txt | write-host
}
AddAsFirstLine 和 CheckIfFileExistsAndNotEmpty 是我声明的函数。
我正在从 powershell 调用 SQLPlus,如果出现问题,我会尝试向用户显示错误消息。如果没有问题,脚本应该继续。
这是我用的
sqlplus -S $user/$user@$server @$file
对于 sqlcmd,我设法这样做了:
sqlcmd -S $serverLower -U $user -P $user -d $user -i $file -r1 2>errors.txt 1>$null
if (CheckIfFileExistsAndNotEmpty errors.txt)
{
get-content errors.txt | write-host
}
选项 -r 设置为 1 将输出错误,2>errors.txt 将它们写入文件。
我想要 SQLPlus 类似的东西,如果可能的话不使用 SPOOL(sqlplus 执行的脚本是用户定义的,如果我不应该更改它们,我会喜欢它。
我自己找到的答案:
AddAsFirstLine $file "SPOOL $errorfilepath"
Add-Content -Path $file -Value "SPOOL off"
sqlplus -S $user/$user@$server @$file 1>$null
$errors = Select-String -Path $errorfilepath -Pattern "(SP2|ORA|Msg.*Level.*State.*Server.*Line|SQLConverter-Error:|Init-Error:|Invalid.filename)"
Set-Content -Path errors.txt $errors
Remove-Item $errorfilepath -Force | Out-Null
}
if (CheckIfFileExistsAndNotEmpty errors.txt)
{
Write-Host "Error while executing script"
get-content errors.txt | write-host
}
AddAsFirstLine 和 CheckIfFileExistsAndNotEmpty 是我声明的函数。