如何仅将 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 是我声明的函数。