【发布时间】:2012-07-29 11:58:42
【问题描述】:
我刚刚开始深入研究 Teradata 的锁定功能,Google 对此的解释相当复杂。希望我能从 SE 那里得到一个非常简单和精简的答案。
在 Teradata 中遇到许多与标识列有关的问题后,我决定创建一种模仿 Oracle 序列的机制。为此,我正在创建一个包含两个字段的表,一个包含表名,另一个存储其最后使用的序列。然后,我将创建一个采用表名的存储过程。在该过程中,它将执行以下选项:
- 从序列表中选择最后使用的序列到一个变量中 (
select LastId from mydb.sequence where tablename = :tablename) - 将变量的值加 1,从而使其递增
- 更新序列表以使用增量值
- 将序列变量返回到过程的 OUT 参数,以便我可以在我的 .NET 应用程序中访问序列 ID
当所有这些操作都在进行时,我需要锁定序列表以进行所有读写访问,以确保对过程的其他调用不会尝试对当前正在排序的表进行排序.这显然是为了防止相同的序列在同一张表中被使用两次。
如果这是 .NET,我会使用 Sync Lock (VB.NET) 或 lock (C#) 来阻止其他线程进入代码块,直到当前线程完成。我想知道是否有一种方法可以像锁定 .NET 中的线程一样锁定表。
【问题讨论】:
标签: stored-procedures locking teradata