Oracle SQL 查询在应该为空时返回一些数据-PowerShell

Oracle SQL query returns some data when it should be empty-PowerShell

提问人:Brute 提问时间:5/31/2022 更新时间:5/31/2022 访问量:83

问:

我正在 PowerShell Core 7.2 中编写脚本。我从一个文件夹中获取一个文件列表,我根据 Oracle 数据库检查该文件夹。我需要描述的数据,如果文件在数据库中,我需要NC_Name列。 问题是,即使文件不在数据库中,它仍然返回数据,但返回其他文件的数据。 例如:我有一个文件列表,File#1、File#2、File#3。如果 File#2 不在数据库中,它仍然返回 File#1 的数据。

我试过计算行数并将其作为条件。如

 $rowNum = $connection.count

这样做的问题是它永远不会为零,因为它返回其他文件的数据;因为变量从不为空。$rowNum$fileName

我还尝试在查询本身中检查文件名,但它给出了很多错误。查询是

$query="DECLARE record_exists INTEGER; BEGIN SELECT COUNT(*) INTO record_exists FROM NC_PROGRAMS WHERE NC_PROGRAMS.NC_NAME  = '$fileName' AND ROWNUM = 1; IF record_exists = 1 THEN Select DESCRIPTION, NC_NAME"

代码为:

#Get all files
$result = $start.EnumerateDirectories() | ForEach-Object -Parallel {
    $_.GetFiles('*.EIA', $using:enum)
}
$result | Format-Table -AutoSize 

foreach($item in $result){
    $fileName = $item.BaseName
    #Oracle connection 
    Add-Type -Path C:\lib\netstandard2.1\Oracle.ManagedDataAccess.dll
    $query = "Select DESCRIPTION, NC_NAME From NC_PROGRAMS WHERE 
    NC_PROGRAMS.NC_NAME  = '$fileName' "
    $connectionString = "connectionString"
    $connection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($connectionString)
    $connection.Open()
    $command = $connection.CreateCommand()
    $command.CommandText = $query
    $reader = $command.ExecuteReader()
    $rowNum = $connection.count
    Write-host "Number of rows-"$rowNum
    while($reader.Read()) {   
        $description=$reader.GetString(0)
        $fastemsFileName = $reader.GetString(1)
    }
  
    $connection.Close()
}
SQL Oracle PowerShell

评论

0赞 mjsqu 5/31/2022
$connection.Count如果连接到数据库,将始终返回 1。您需要从以下位置获取计数:stackoverflow.com/questions/3959511/...$reader
1赞 Brute 5/31/2022
@mjsqu我已经试过了。从$reader获取计数不起作用。$reader.count -ge 1 破坏了整个事情;循环仅使用一个文件名向前移动。
0赞 mjsqu 5/31/2022
查看文档和其他一些类似的问题,应该是一个具有可以访问的属性的对象。检查正在使用的成员$readerOracleDataReaderHasRows$reader$reader | Get-Member
0赞 Brute 5/31/2022
@mjsqu 感谢您的回复。即使我得到行,我也不认为它会做任何事情,因为它总是得到一行(当它不应该时)。我注意到的是,当文件夹中的文件不在数据库中时,它会替换以前找到的文件名并为我提供数据。似乎我需要清除变量的值或处置它,但这也没有用

答: 暂无答案