我必须为已删除的列捕获行。我如何在不编写选择查询的情况下做到这一点?
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;
这只是一个例子——你应该修改它来做任何你需要的事情。
分享并享受。