Oracle - 根据原始列值删除行

Oracle - DELETE Rows based on Raw Column values

我想用我的代码执行以下操作,但我不确定从哪里开始:

假设我有一个包含 Byte() ID 字段的 class:

Public Class Message
    Public Property ID as Byte()
    '...
End Class

那些 Message 存储在数据库中,ID 存储为 RAW 列。

鉴于 Messages = List(Of Message),我将如何删除列表中的所有邮件?

我已经做到了:

Dim sql as String = "DELETE FROM TableName WHERE IDColumn IN ("
For Each msg in Messages
    sql = sql + msg.ID ' I don't think this will work
Next
sql = sql + ")"

Using oCommand As New OracleCommand(sql)
' ...

Note: The IDColumn isn't actually a primary key column or anything - it's just another column (as per spec, unfortunately).

您的列表中缺少逗号,因此 ID 1、2 和 3 构成 IN (123)。您可以改用此循环:

For Each msg in Messages
    sql = sql + msg.ID + ","
Next

sql= sql.Substring(0, sql.Length - 1) + ")";

即便如此,前提是 IDColumn 不能为空:

Dim sql as String = "DELETE FROM TableName WHERE IDColumn IN (null"
For Each msg in Messages
    sql = sql + ", " + msg.ID
Next
sql = sql + ")"

这也可以处理 Messages 为空的情况,而在第一个示例中,您应该检查它,以免以 IN () 结束,这会导致语法错误。

我的代码有两处错误:

  1. 我需要在项目之间加入逗号(参见
  2. 我忘记了 ID 值周围的单引号
  3. 我需要将 Byte() 转换为一串十六进制值:

String.Join(String.Empty, msg.ID.Select(Function(id) id.ToString("X2")))

所以我的循环看起来像:

For Each msg in Messages
    sql = sql + "'" + String.Join(String.Empty, msg.ID.Select(Function(id) id.ToString("X2"))) + "'"
Next