1
我必须使用powershell查询许多oracle数据库表。 有没有办法动态构建用于读者对象成员的变量?powershell oracle查询 - 动态分配读者对象成员
我必须指定读者对象成员名称,例如GetInt64(3),GetString(4)等,以便我检索表中每列的值。
由于我必须列举具有不同列名的很多表,因此编写这些表的工作量会很大。
我该如何编写它,以便我可以使用变量名称而不是成员名称? thnx - 这是我在这个网站上的第一篇文章。
这是我的问题中正在引用的下面的代码的一部分。
.
.
$premise=$reader.GetInt64(3)
$license=$reader.GetString(4)
$invoice_num=$reader.GetInt64(5)
.
.
.
我从这个链接得到这个例子(我不知道我应该张贴在同一线程: Handling nulls in powershell
# Create a datareader for a SQL statement
$sql="select * from legacydb.ebt_invoice_dtl where premnum = 397743"
$command = New-Object Oracle.DataAccess.Client.OracleCommand($sql,$conn)
$reader=$command.ExecuteReader()
# Write out the result set structure
for ($i=0;$i -lt $reader.FieldCount;$i++) {
Write-Host $reader.GetName($i) $reader.GetDataTypeName($i)
}
# Write out the results
while ($reader.read()) {
$dtl_id=$reader.GetDecimal(0)
$invoice_id=$reader.GetDecimal(1)
$debtor=$reader.GetInt64(2)
$premise=$reader.GetInt64(3)
$license=$reader.GetString(4)
$invoice_num=$reader.GetInt64(5)
$deb_cred=$reader.GetString(6)
$inv_ref=$reader.GetString(7)
$rate=$reader.GetDecimal(8)
$charge=$reader.GetDouble(9)
$usage=$reader.GetInt64(10)
$tax=$reader.GetDouble(11)
$rate_code=$reader.GetString(12)
$inv_date=$reader.GetDateTime(13)
$missed=$reader.GetString(14)
$change_date=$reader.GetDateTime(15)
$dnp=$reader.GetString(16)
Write-Host "$dtl_id $invoice_id $debtor $premise $license $invoice_num $deb_cred $inv_ref $rate $charge $usage $tax $rate_code $inv_date $missed $change_date $dnp "
}
谢谢! - 这些代码对我来说有点进步(我会在这方面进一步学习),但是我使用我的表结构来获得代码。我忘了问 - 我怎样才能动态输出列名?因为我需要获取许多表的所有列,当我查询时我不知道列名,并且会再次进行大量输入。我可以为这部分代码构建变量吗? “格式 - 表dtl_id,invoice_id,债务人,许可证,invoice_num,....”对不起,我应该更明确地问这个问题。再次感谢。 – ikask 2014-10-12 15:40:58
@ikask您可以使用'Format-Table *'来打印出对象的所有属性。在这种情况下,只需要'Format-Table'(无参数)就可以工作,因为没有默认方式来显示这些自定义对象。我将其添加到答案中并稍微清理一下,希望现在可以更容易地使用它。 – 2014-10-12 17:52:18
谢谢迈克z。格式表*做了这项工作。我会尝试修订并了解这两个代码。 – ikask 2014-10-14 02:16:30