我想知道以下行动方案是否可行:
我正在实现一个简单的数据输入应用程序。每个可编辑记录都驻留在一个表中。用户必须同时编辑多条记录(以减少数据输入时间)。我目前尝试做的是在记录中实现某种锁定机制。
我想到的第一件事是执行 (ExecuteNonQuery) UPDATE some_table SET status = 'locked' WHERE rownum = 1 RETURNING id INTO :locked_id 与输出参数,给我锁定记录的 ID。我可以根据这个 ID 执行另一个 SELECT 语句来读取我想要的任何其他信息。
虽然上述方法似乎适用于单个锁定记录,但我真的不知道如何为多个返回的行执行此操作。- 如果在上面的示例中,WHERE 子句是“rownum < 4”而不是“rownum = 1”怎么办?
我的 OracleParameter 应该是什么样的?当我像这样指定我的返回 oracle 参数时(适用于单行),
OracleParameter p = cmd.Parameters.Add("ID", OracleDbType.Int32, 10, 0, ParameterDirection.Output);
给出了 ORA-24369。我尝试使用 ArrayBindCount 和数组作为参数的 .Value 属性,但无济于事。
另外,您是否发现整个特定的锁定方式存在根本性的问题?
谢谢你
编辑:一些澄清 - 1. 有一个名为 user_name 的列,它可以保存例如登录用户的名称 - 我将它与锁定更新一起更新 2. 还有另一列我称之为locked_timestamp,它保存时间记录被锁定。可能会有一个后台进程在夜间运行并将锁定的记录重置回“解锁” - 鉴于这种情况不会经常发生,并且由于崩溃等原因保持“锁定”的记录比例很小与已编辑记录的数量相比 3. 并发更新应该由 Oracle 自动处理,是的,我在每次 UPDATE 期间都使用事务 - 所以一条记录同时被两个用户锁定的可能性很小 - 或者就是这样我听说(会试试这个,