【问题标题】:oracle forms - lock procedure propertyoracle 表单 - 锁定过程属性
【发布时间】:2011-08-16 11:47:45
【问题描述】:

我有一个 oracle 表单,其中数据块的锁定过程属性设置为调用过程'lock_fn'。 程序“lock_fn”如下所示:

procedure lock_fn(outp IN OUT out_tab) IS
l_first BINARY_INTEGER := outp.first;
l_last BINARY_INTEGER := outp.last;
l_id a.id%type;
BEGIN
    for i in  l_first .. l_last loop
        select id
        into   l_id
        from a
        where a.id=outp(i).id;
    end loop;
END lock_fnl;

我的问题是,仅选择 id 就可以保证行级锁定吗?任何帮助都将受到欢迎。

编辑: 数据块的 LOCK-PROCEDURE 触发器具有自动生成的代码,如下所示:

DECLARE
bk_data FRMPKG.OUT_TAB;
BEGIN
PLSQL_TABLE.POPULATE_TABLE(bk_data, 'LOCK_FN', PLSQL_TABLE.LOCK_RECORDS);
FRMPKG.LOCK_FN(bk_data);
END;

【问题讨论】:

    标签: oracle oracleforms


    【解决方案1】:

    仅选择 id 就可以保证行级锁定吗?

    没有。您需要一个 SELECT FOR UPDATE (但只选择一列就足够了)。

    【讨论】:

    • 感谢您的快速回复。有问题的代码在锁定方面有什么好处吗?我在生产中的一种形式中找到了它。
    • 也许我遗漏了一些东西,但它看起来确实像一个空操作。只是选择不会获得任何锁,因此既不会阻止任何人,也不会被其他人阻止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多