2016-07-26 6 views
0

У меня есть таблица CLIENT, и мне нужно ее отфильтровать, чтобы она показывала только недавно добавленные записи.Создание процедуры Oracle для выбора недавно добавленных данных в таблицу CLIENT, и если они будут найдены, добавьте эти записи в таблицу Archive

SELECT * 
FROM Client 
WHERE TIMESTAMP >= sysdate -1; 

Мне нужно создать процедуру PL/SQL, которая вставляет эти записи в таблицу архива с Newest = 'y'. Новейший - столбец в архивной таблице. И удалите Newest = 'y' из старых записей, которые уже находятся в архивной таблице.

Я застрял здесь

CREATE OR REPLACE PROCEDURE add_to_arch(
arch_ archive%rowtype) 
as 
begin 

SELECT * 
FROM Client 
WHERE TIMESTAMP >= sysdate -1; 



loop 
INSERT 
INTO archive 
(
CLIENT_ID, 
    NAME, 
    SURNAME, 
    PHONE, 
    VEH_ID, 
    REG_NO, 
    MADE_MODEL, 
    MAKE_YEAR, 
    WD_ID, 
    WORK_DESC, 
    INV_ID, 
    INV_SERIES, 
    INV_NUM, 
    INV_DATE, 
    INV_PRICE 
) 
SELECT CL_ID, 
CL_NAME, 
CL_SURNAME, 
CL_PHONE, 
VEH_ID, 
VEH_REG_NO, 
VEH_MODEL, 
VEH_MAKE_YEAR, 
WD_ID, 
WORK_DESC, 
INV_ID, 
INV_SERIES, 
INV_NUM, 
INV_DATE, 
INV_PRICE 
FROM CLIENT, INVOICE, VEHICLE, WORKS, WORKS_DONE 
WHERE CL_ID = arch_.Client_ID; 
end loop;  
END; 

ответ

0

поставил "SELECT * FROM Клиент WHERE TIMESTAMP> = SYSDATE -1;" в курсор, как:

CURSOR cr_c IS 
SELECT * 
FROM Client 
WHERE TIMESTAMP >= sysdate -1; 

Затем перебирать CR_c в цикле (http://www.techonthenet.com/oracle/loops/cursor_for.php)

ИЛИ

использования триггера, возможно, было бы лучше, (http://www.techonthenet.com/oracle/triggers/after_insert.php)

+0

Хорошо, что я понимаю, но я не уверен, как написать эту бизнес-логику, когда мне нужно перенести их в архивную таблицу со столбцом. Новая поговорка «y». Я должен сделать это в процедуре, которая не срабатывает! – Mairis

+0

@Mairis Вы пытаетесь изобрести колесо. Поиск в Интернете, как хранить исторические данные. Если кто-то другой попытается изменить таблицу не через вашу процедуру, тогда старые данные не будут отображаться в исторической таблице. –

+0

Как обновить столбец при вставке новой записи? – Mairis

0

как насчет только утверждения слияния. слияние в архив с использованием таблицы клиентов. матч по идентификаторам. если вы найдете запись в таблице архива, то просто обновите новейший индикатор до «N». если вы не нашли запись в таблице архива, тогда вставьте запись с «Y» в качестве самого нового значения. у вас нет данных, поэтому вам, вероятно, придется играть с приведенным ниже утверждением, но что-то вроде этого.

+0

Мне было предложено сделать это в процедуре, потому что эта процедура должна быть автоматически один раз в день – Mairis

+0

, потому что в противном случае это ускорилось? просто положите начало концу вокруг и bam вы получили свою процедуру –

+0

Хорошо, я сделал это, но процедура дублировала мои записи вместо 2 записей, которые я получил сейчас 24 – Mairis