【问题标题】:How to delete data from oracle table using powershell如何使用powershell从oracle表中删除数据
【发布时间】:2020-06-10 12:48:30
【问题描述】:

我想在使用 powershell 插入数据之前从 oracle 表中删除整个数据,

Add-Type -Path C:\Users\sankar\ODP.NET_Managed_ODAC122cR1\odp.net\managed\common\Oracle.ManagedDataAccess.dll
#Database Connection String & Establish connection
$compConStr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxx)(PORT=xxxxx)))(CONNECT_DATA=(SID =xxxxxxxx)));User Id=spcl_init;Password=xxxxxx;Pooling=False"
$connection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($compConStr)
$connection.open()
$Grouplists = Import-Csv "\\XXX\Techsupportgroups1.csv"
#Deleate existing data from oracle table
 $query = "DELETE FROM TableName"

            $command=$connection.CreateCommand()
            $command.CommandText=$query
            #$command.ExecuteNonQuery()
            $command.ExecuteReader()
#Insert memebers details into oracle Table
foreach ($Group in $Grouplists){
$MembersList=(Get-QADGroupMember $Group.Group_DL |Get-QADuser -Properties * |where {$_.Type -ne "group" -and $_.AccountIsDisabled -ne "False" -and $_.Samaccountname -notmatch "unixlinuxops"} | Select-Object |Select-Object @{n='Group_Name';e={$Group.Group_Name}},Samaccountname,NTAccountName,UserPrincipalName)

        foreach($Member in $MembersList)
        {
            $GroupName = $Member.Group_Name
            $SamAccountName=$Member.SamAccountName
            $NTAccountName = $Member.NTAccountName
            $UserPrincipleName =$Member.userprincipalname

            $query = "INSERT INTO IVISTA_RBAC (Group_Name, SamAccountName,NTAccountName,UserPrincipalName)  
                                        VALUES ('$GroupName','$SamAccountName','$NTAccountName', '$UserPrincipleName')"

            $command=$connection.CreateCommand()
            $command.CommandText=$query
            $ds = New-Object system.Data.DataSet
            $da = New-Object Oracle.ManagedDataAccess.Client.OracleDataAdapter($command)
            [void]$da.fill($ds)
        } 
}
$connection.Close()

上面的代码会将数据插入到表中,但在插入之前不会从表中删除数据,

【问题讨论】:

  • 根据您的需要,truncate table 可能更合适。它比删除更有效,因为它不会生成重做。但是,它是不可逆的,执行隐含提交,因为它是 DDL,而不是 DML,并且未处理外键关系(引发错误)。我有几百万行的表,我的分析师执行删除需要 15 分钟以上。我们将删除替换为需要几微秒的截断。

标签: .net oracle powershell odac


【解决方案1】:

在这个 sn-p 中,您已将 ExecuteNonQuery 注释掉,但这是您需要使用的命令,而不是 ExecuteReader

 $query = "DELETE FROM TableName"
 $command=$connection.CreateCommand()
 $command.CommandText=$query
 #$command.ExecuteNonQuery()
 $command.ExecuteReader()

所以应该是这样的:

 $query = "DELETE FROM TableName"
 $command=$connection.CreateCommand()
 $command.CommandText=$query
 $command.ExecuteNonQuery()

【讨论】:

  • 试过了,但是脚本在运行状态下被击中,也没有收到任何错误信息
  • @SankarM - 然后下一步是调试脚本并找出它挂在哪里。您可以查看此链接 (stackoverflow.com/questions/10159066/…),了解如何执行此操作的一些指南。
猜你喜欢
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 2011-03-05
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多