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

从delete sql-Oracle中捕获文件中某列的行,sql,oracle,Sql,Oracle,我必须为已删除的列捕获行。我如何在不必编写select查询的情况下做到这一点 delete from myschema.mytable where currentdatetimestamp > columnDate 例如,这应该删除5行 我想在受上述影响的文件中捕获columnID行(不是表中的所有列) 文件应该有 1234 1235 1236 1237 1234 1235 1236 1237 1238通过使用删除触发器,可以执行您想要的操作。以下是一个例子: CREATE OR RE

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

delete from myschema.mytable where currentdatetimestamp > columnDate 
例如,这应该删除5行

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

1234 1235 1236 1237 1234 1235 1236 1237
1238

通过使用删除触发器,可以执行您想要的操作。以下是一个例子:

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;
这只是一个例子——你应该修改它来做任何你需要的事情

分享和享受。

您可以使用(改编的):


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

什么类型的“文件”?另一个数据库?同一数据库中的表?文本文件?“…为已删除的列捕获行”,恐怕您不能。行已经被删除了,对吗?@KenWhite-是-在删除之前将数据写入文本文件。唯一的方法是使用删除触发器,正如@BobJarvis在下面所说的那样-这是因为行正在被删除,而不是在删除之后。一旦它们被删除,就太晚了。然而,你到底想完成什么?可能有一种比使用文本文件更好的方法。我同意这是唯一可行的方法。不过,我不确定目的是什么;因为海报没有解释这样做的原因,所以很难说这是否是正确的答案。谢谢-我想捕获这些ID,因为文件系统上也有相应的文件需要删除。所以我将循环遍历文件并删除1234.xml、1235.xml等…@Jay-也许您可以使用UTL_file.FREMOVE()?这里的问题是,如果您的事务由于某种原因被回滚,该文件将被删除,但该行仍将保留。@BobJarvis-我对此不熟悉。让我读一下。谢谢
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;
/