我每天都需要更新数据库中一定数量的记录。
现在要更新这个数据库,我使用Merge-->选择-->按顺序更新。
但是我需要显示这个更新语句的输出(在日志文件中(
代码:update_status.ps1
$FilePath = $HOME+"binORACLE_CONNECTION_HOMEoracle_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
然而,当我运行select&在DB中手动更新,我可以看到行分别被选中和更新。
这个脚本是由任务调度程序中的.bat文件触发的,它生成一个日志文件
bat文件:
pushd "%~dp0"
start /B /WAIT powershell -File "D:binupdate_status.ps1" >> D:logupdate_status_%USERNAME%_%date%_log.log 2>&1
exit
我的要求是:我需要将更新的输出(从数据库更新的某行(放入日志文件中。即使没有更新任何行,它也应该显示相同的行。
如果我的问题不清楚,请告诉我。
如有任何帮助,我们将不胜感激:(
原则上,从任务调度程序运行powershell脚本不需要批处理。
Task -> Actions -> Program/script = powershell.exe
Task -> Actions -> Add arguments = -File "D:binupdate_status.ps1"
如果您要查找的数据存储在变量$result中,只需将其连接到日志文件:
$result | set-content "D:logupdate_status_$($env:username)_$(get-date -format 'yyyy-dd-MM')_log.log"
注意$env:username将始终是计划任务的调用方标识。