PowerShell脚本数据库查询未传递所有结果

时间:2014-09-30 15:49:19

标签: sql oracle powershell oledb

早上好stackoverflow。我有一个PowerShell脚本,它正在对Oracle数据库执行SQL查询,然后获取结果并将它们传递给本地shell命令。它主要起作用。发生的事情是一些结果被删除,我可以看到的唯一重要的是它们有几个具有空值的列(但是只返回了8列中的2个)。当在sQL开发人员中执行查询时,我得到了所有预期的结果。此问题适用于$ eventcheck开关,$ statuscheck正常工作。 Powershell脚本如下:

param(
    [parameter(mandatory=$True)]$username,
    [parameter(mandatory=$True)]$password,
    $paramreport,
    $paramsite,
    [switch]$eventcheck,
    [switch]$statuscheck
)

$qry1 = Get-Content .\vantageplus_processing.sql

$qry2 = @"
    select max(TO_CHAR(VP_ACTUAL_RPT_DETAILS.ETLLOADER_OUT,'YYYYMMDDHH24MISS')) Completed

    from MONITOR.VP_ACTUAL_RPT_DETAILS

    where VP_ACTUAL_RPT_DETAILS.REPORTNUMBER = '$($paramreport)' and VP_ACTUAL_RPT_DETAILS.SITE_NAME = '$($paramsite)'

    order by completed desc
"@

$connString = @"
    Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="HOST")(PORT="1521"))
    (CONNECT_DATA=(SERVICE_NAME="SERVICE")));User ID="$username";Password="$password"
"@

function Get-OLEDBData ($connectstring, $sql) {
    $OLEDBConn = New-Object System.Data.OleDb.OleDbConnection($connectstring)
    $OLEDBConn.open()
    $readcmd = New-Object system.Data.OleDb.OleDbCommand($sql,$OLEDBConn)
    $readcmd.CommandTimeout = '300'
    $da = New-Object system.Data.OleDb.OleDbDataAdapter($readcmd)
    $dt = New-Object System.Data.DataTable
    [void]$da.fill($dt)
    $OLEDBConn.close()
    return $dt
}

if ($eventcheck)
    {
        $output = Get-OLEDBData $connString $qry1
        ForEach ($lines in $output)
        {
            start-process -NoNewWindow -FilePath msend.exe -ArgumentList @"
                -n bem_snmp01 -r CRITICAL -a CSG_VANTAGE_PLUS -m "The report $($lines.RPT) for site $($lines.SITE) has not been loaded by $($lines.EXPDTE)" -b "vp_reportnumber='$($lines.RPT)'; vp_sitename='$($lines.SITE)'; vp_expectedcomplete='$($lines.SIMEXPECTED)'; csg_environment='Production';"
"@ # KEEP THIS TERMINATOR AT THE BEGINNING OF LINE       
        }
    }

if ($statuscheck)
    {
        $output = Get-OLEDBData $connString $qry2
        # $output | foreach {$_.completed}
        write-host -nonewline $output.completed
    }

为了能够看到数据,下面是Oracle SQL Developer的csv输出,其中ACTUAL结果是我的脚本引用的查询。在这些结果中,第4,5,6,7,8,10行是唯一在ForEach循环中传递的行,而其他行甚至不在$ output数组中捕获。如果有人可以建议一种方法来获得所有结果,我将不胜感激。

"SITE","RPT","LSDTE","EXPDTE","CIMEXPECTED","EXPECTED_FREQUENCY","DATE_TIMING","ETME"
"chrcse","CPHM-054","","2014/09/21 12:00:00","20140921120000","MONTHLY","1",
"chrcse","CPSM-226","","2014/09/21 12:00:00","20140921120000","MONTHLY","1",
"dsh","CPSD-176","2014/09/28 23:20:04","2014/09/30 04:00:00","20140930040000","DAILY","1",1.41637731481481481481481481481481481481
"dsh","CPSD-178","2014/09/28 23:20:11","2014/09/30 04:00:00","20140930040000","DAILY","1",1.4162962962962962962962962962962962963
"exp","CPSM-610","2014/08/22 06:42:10","2014/09/21 09:00:00","20140921090000","MONTHLY","1",39.10936342592592592592592592592592592593
"mdc","CPKD-264","2014/09/24 00:44:32","2014/09/30 04:00:00","20140930040000","DAILY","1",6.35771990740740740740740740740740740741
"nea","CPKD-264","2014/09/24 01:00:31","2014/09/30 03:00:00","20140930030000","DAILY","1",6.34662037037037037037037037037037037037
"twtla","CPOD-034","","2014/09/29 23:00:00","20140929230000","DAILY","0",
"twtla","CPPE-002","2014/09/29 02:40:35","2014/09/30 06:00:00","20140930060000","DAILY","1",1.27712962962962962962962962962962962963
"twtla","CPXX-004","","2014/09/29 23:00:00","20140929230000","DAILY","0",

1 个答案:

答案 0 :(得分:1)

实际上,似乎查询中的某个注释导致了此问题。我删除它,结果开始恢复正常。我不知道为什么会这样,除非它与导入的工作方式有关(它是否将所有内容导入为一行?)。无论哪种方式,结果现在都是正常的。