【问题标题】:How to display the output (query result) from an update query which is executed by a powershell script?如何显示由 powershell 脚本执行的更新查询的输出(查询结果)?
【发布时间】:2022-10-17 05:35:10
【问题描述】:

每天,我需要更新数据库中一定数量的记录。

现在要更新这个数据库,我正在使用合并-->选择-->更新依次。

但我需要显示此更新语句的输出(在日志文件中)

代码:更新状态.ps1

$FilePath = $HOME+"\bin\ORACLE_CONNECTION_HOME\oracle_config.properties"

$SID=Select-String -Pattern "oracle_SID" -Path $FilePath 
$Data_Source=$SID.ToString().split('=')[1]

$user_name=Select-String -Pattern "oracle_user_name" -Path $FilePath
$User=$user_name.ToString().split('=')[1]

$user_password=Select-String -Pattern "oracle_user_password" -Path $FilePath
$Pwd=$user_password.ToString().split('=')[1]

$connectionString= "Data Source=$Data_Source;User Id=$User;Password=$Pwd;Integrated Security=no"
[System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient") | Out-Null 
$connection = New-Object System.Data.OracleClient.OracleConnection($connectionString)

function Oracle_Connection ( $query)
{
$connectionString= "Data Source=$Data_Source;User Id=$User;Password=$Pwd;Integrated Security=no"
[System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient") | Out-Null 
$connection = New-Object System.Data.OracleClient.OracleConnection($connectionString)
$queryString = $query 
$command = New-Object System.Data.OracleClient.OracleCommand($queryString, $connection) 
$connection.Open()
$dataset = New-Object System.Data.DataTable
$oracleadapter = New-Object System.Data.OracleClient.OracleDataAdapter $command
$resultcount = $oracleadapter.fill($dataset)
$result = $command.ExecuteScalar()
Write-Host $result
$connection.Close()

}

function Update_p2c ($p2c, $c2p)
{
Write-Host "Updating P2C"
$query_sub_p2c ="MERGE INTO TABLE TB USING (SELECT ...) src ON ( NAME = src.NAME) WHEN MATCHED THEN UPDATE SET TB.P2C = src.ID";
Oracle_Connection $query_p2c
if ($resultcount -gt 0) { Write-Host "$resultcount rows were updated"} else {Write-Host "No rows were updated"}
}

##Initial setup completed.

#Defining Source and Target variables used in functions
$p2c = 'P2C'
$c2p = 'C2P'


Update_p2c -p2c $p2c -c2p $c2p
##End

结果:

PS D:\
Updating P2C

No rows were updated

但是,我看到当我在数据库中手动运行选择和更新时,我可以看到行分别被选中和更新。

此脚本由任务调度程序中的 .bat 文件触发,并生成一个日志文件

bat文件:

pushd "%~dp0"


start /B /WAIT powershell -File "D:\bin\update_status.ps1" >> D:\log\update_status_%USERNAME%_%date%_log.log 2>&1

exit

我的要求是:我需要将更新的输出(从数据库更新的某某行)到日志文件中。即使没有更新任何行,它也应该显示相同。

如果我的问题不清楚,请告诉我。

任何帮助将不胜感激 :)

【问题讨论】:

  • 如果我理解正确,您希望将 $result 的内容写入日志文件?
  • 是的,我需要跟踪日志文件中更新的行。

标签: oracle powershell


【解决方案1】:

原则上,您不需要批处理即可从任务调度程序运行 powershell 脚本。

Task -> Actions -> Program/script = powershell.exe
Task -> Actions -> Add arguments = -File "D:inupdate_status.ps1"

如果您要查找的数据存储在变量 $result 中,只需将其写入日志文件:

$result | set-content "D:logupdate_status_$($env:username)_$(get-date -format 'yyyy-dd-MM')_log.log"

注意 $env:username 将始终是计划任务的调用者身份。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多