2015-10-11 3 views
0

Я использую эти таблицы для хранения данных. Я хотел бы удалить все данные старше 1 месяца (например), используя один SQL-запрос из всех таблиц.Удаление строк из нескольких таблиц

-- TABLE AGENT_HISTORY 

CREATE TABLE AGENT_HISTORY(
    EVENT_ID INTEGER NOT NULL, 
    AGENTID INTEGER NOT NULL, 
    EVENT_DATE DATE NOT NULL 
) 
/

CREATE TABLE CPU_HISTORY(
    CPU_HISTORY_ID INTEGER NOT NULL, 
    EVENT_ID INTEGER, 
    CPU_NAME VARCHAR2(50) NOT NULL, 
    CPU_VALUE NUMBER NOT NULL 
) 
/

CREATE TABLE CPU_TEMP_HISTORY(
    CPU_TEMP_HISTORY_ID INTEGER NOT NULL, 
    EVENT_ID INTEGER, 
    CPU_TEMP_NAME VARCHAR2(50) NOT NULL, 
    CPU_TEMP_VALUE NUMBER NOT NULL 
) 
/

CREATE TABLE MEMORY_HISTORY(
    MEMORY_HISTORY_ID INTEGER NOT NULL, 
    EVENT_ID INTEGER, 
    MEMORY_NAME VARCHAR2(50) NOT NULL, 
    MEMORY_VALUE NUMBER NOT NULL 
) 
/

CREATE TABLE DISK_HISTORY(
    DISK_HISTORY_ID INTEGER NOT NULL, 
    EVENT_ID INTEGER, 
    DISK_NAME VARCHAR2(50) NOT NULL, 
    DISK_VALUE NUMBER NOT NULL 
) 
/

CREATE TABLE NETWORK_HISTORY(
    NETWORK_HISTORY_ID INTEGER NOT NULL, 
    EVENT_ID INTEGER, 
    ADAPTER_NAME VARCHAR2(50) NOT NULL, 
    TRANSMITBYTES NUMBER NOT NULL, 
    TRANSMITSPEED NUMBER, 
    RECEIVESPEED NUMBER, 
    RECEIVEBYTES NUMBER 
) 
/

CREATE TABLE SWAP_HISTORY(
    SWAP_HISTORY_ID INTEGER NOT NULL, 
    EVENT_ID INTEGER, 
    SWAP_NAME VARCHAR2(50) NOT NULL, 
    SWAP_VALUE NUMBER NOT NULL 
) 
/

CREATE TABLE CONNECTIONS_HISTORY(
    CONNECTIONS_HISTORY_ID INTEGER NOT NULL, 
    EVENT_ID INTEGER, 
    CONNECTIONS_NAME VARCHAR2(50) NOT NULL, 
    CONNECTIONS_VALUE NUMBER NOT NULL 
) 
/

CREATE TABLE PARTITIONS_HISTORY(
    PARTITIONS_HISTORY_ID INTEGER NOT NULL, 
    EVENT_ID INTEGER, 
    PARTITIONS_NAME VARCHAR2(50) NOT NULL, 
    PARTITIONS_VALUE NUMBER NOT NULL 
) 
/

Возможно ли это в Oracle? Я использую EVENT_ID как уникальный идентификатор ключа во всех таблицах.

+1

Только одна из таблиц имеет столбец «дата», поэтому непонятно, что вы намерены удалить в других. –

+0

Вы имеете в виду EVENT_ID как уникальный ключ? – leeor

+0

Да, извините за ошибку. –

ответ

1

Как предложено «a_horse_with_no_name», вы можете использовать ON DELETE CASCADE, создав необходимые отношения.

Например,

ALTER TABLE table_name 
ADD CONSTRAINT constraint_name 
    FOREIGN KEY (column1, column2, ... column_n) 
    REFERENCES parent_table (column1, column2, ... column_n) 
    ON DELETE CASCADE; 

Закладка Database SQL Language Reference и начать читать понятия для лучшего понимания.

+0

Не могли бы вы показать мне полный пример SQL-запроса? –

Смежные вопросы