从delete sql-Oracle中捕获文件中某列的行



我必须为已删除的列捕获行。我如何在不编写选择查询的情况下做到这一点?

delete from myschema.mytable where currentdatetimestamp > columnDate 

这应该删除5行,例如

我想在受上述影响的文件中捕获columnID的行(而不是表的所有列)文件应该有

1234123512361237

1238

您可以使用DELETE语句的RETURNING子句(改编自Oracle文档中的此示例):

DECLARE
   TYPE NumList IS TABLE OF myschema.mytable.columnID%TYPE;
   IDs NumList;
BEGIN
   DELETE FROM myschema.mytable WHERE currentdatetimestamp > columnDate
      RETURNING columnID BULK COLLECT INTO IDs;
   DBMS_OUTPUT.PUT_LINE('Deleted ' || SQL%ROWCOUNT || ' rows:');
   FOR i IN IDs.FIRST .. IDs.LAST
   LOOP
      DBMS_OUTPUT.PUT_LINE('columnID: '||IDs(i));
   END LOOP;
END;
/

您可以对生成的ID集合执行任意操作。

使用DELETE触发器可以执行您想要的操作。以下是一个例子:

CREATE OR REPLACE TRIGGER MY_TABLE_DELETE_TRIGGER
  BEFORE DELETE ON MY_TABLE
  FOR EACH ROW
BEGIN
  DBMS_OUTPUT.PUT_LINE('Deleted row with ID=' || :OLD.COLUMN_ID);
END MY_TABLE_DELETE_TRIGGER;

这只是一个例子——你应该修改它来做任何你需要的事情。

分享并享受。

最新更新