0

我必须为已删除的列捕获行。我怎样才能做到这一点而不必编写选择查询?

delete from myschema.mytable where currentdatetimestamp > columnDate 

例如,这应该删除 5 行

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

1234
1235
1236
1237

1238

4

2 回答 2

1

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

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 集合做任何您喜欢的事情。

于 2012-09-08T04:09:58.320 回答
0

使用 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;

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

分享和享受。

于 2012-09-08T01:31:51.593 回答