我想删除从光标获取的数据而不使用更新

Posted

技术标签:

【中文标题】我想删除从光标获取的数据而不使用更新【英文标题】:i want to delete the data fetching from the cursor without using for update 【发布时间】:2019-08-14 06:09:27 【问题描述】:

我有一组来自 select 语句的数据过滤,我需要从表 'SHOP_MATERIAL_ASSIGN_TAB' 中删除这些数据。我用光标来删除。但这在执行时引起了问题。在不使用'for update' 方法的情况下完成它的任何想法。

DECLARE
  CURSOR DELDATA_ IS
    SELECT B.*
      FROM IC_WQ_OLD_LOCATION_TAB A, SHOP_MATERIAL_ASSIGN_TAB B
     WHERE A.LOCATION_NO = B.LOCATION_NO
       AND A.SITE = B.CONTRACT
       AND B.LOCATION_NO = 'HYLIN001'
       FOR UPDATE;

  TEMP_ DELDATA_%ROWTYPE;

BEGIN
  OPEN DELDATA_;
  LOOP
    FETCH DELDATA_
      INTO TEMP_;
    EXIT WHEN DELDATA_%NOTFOUND;
    DELETE FROM SHOP_MATERIAL_ASSIGN_TAB WHERE CURRENT OF DELDATA_;
  END LOOP;
  COMMIT;
END;

【问题讨论】:

【参考方案1】:

根本不要使用 PL/SQL。

DELETE FROM shop_material_assign_tab
      WHERE     EXISTS
                   (SELECT NULL
                      FROM ic_wq_old_location_tab a
                     WHERE     a.location_no = b.location_no
                           AND a.site = b.contract)
            AND b.location_no = 'HYLIN001'

【讨论】:

以上是关于我想删除从光标获取的数据而不使用更新的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ListView 中删除项目而不从数据库中删除它?

使用更改的 CSS 光标属性更新鼠标光标而不移动鼠标

CouchDB 复制而不删除文档

如何获取 QTableWidget 光标下的行

更新 Plist 数据而不删除旧数据

具有相同参考光标的多个循环