2015-02-26 2 views
0

мне нужно повторить одну колонку (TYPE) из одной таблицы (CUTOMER) в другой столбец (UNDEF000) из таблицы (ORDERS), этим способом каждый раз, когда кто-то обновить колонку (TYPE) будет автоматически реплицируются на (UNDEF000), таблица CUSTOMER и ORDERS связаны колонкой (PRE_ORDERCODE).Как я могу обновить и скопировать один столбец из одной таблицы в другую из другой таблицы?

Сначала я пытаюсь заполнить UNDEF000 из TYPE:

UPDATE ORDERS 
JOIN CUSTOMER 
SET ORDERS.UNDEF000=CUSTOMER.TYPE 
WHERE ORDERS.PRE_ORDERCODE= CUSTOMER.PRE_ORDERCODE; 

не работает :(

UPDATE ORDERS 
SET ORDERS.UNDEF000= CUSTOMER.TYPE 
FROM CUSTOMER CUSTOMER 
INNER JOIN ORDERS ORDERS 
ON CUSTOMER.PRE_ORDERCODE= ORDERS.PRE_ORDERCODE 

Можете ли вы помочь мне с этими двумя проблемами

+0

http://docs.oracle.com/cd/A57673_01/DOC/server/doc/SCN73/ch15.htm –

+0

вы хотите написать триггер? один раз, когда поле обновляется, срабатывает триггер? – hiren

+0

да, я хотел бы написать триггер, но сначала я думаю, что мне нужно иметь оба столбца с одинаковой информацией. –

ответ

0

Я думаю, что ваше обновление должно? :

UPDATE ORDERS O SET O.UNDEF000= (
SELECT CUSTOMER.TYPE FROM CUSTOMER 
WHERE CUSTOMER.PRE_ORDERCODE = O.PRE_ORDERCODE); 
Код

Trigger:

create or replace trigger after_update_customer after update on 
customer for each row 
declare 

begin 
update orders set UNDEF000 = :new.type 
where pre_ordercode = :new.pre_ordercode; 
end; 
+0

Является ли FUnction с DISTINCT, потому что у меня больше записей в CUSTOMER, чем ORDERS, Большое спасибо. ОБНОВЛЕНИЕ ORDERS O SET O.UNDEF000 = ( SELECT DISTINCT CUSTOMER.TYPE FROM CUSTOMER ГДЕ CUSTOMER.PRE_ORDERCODE = CUSTOMER.PRE_ORDERCODE) Большое спасибо Aramillo –

+0

Теперь я должен создать триггер или процедуры? Чтобы иметь те же данные после того, как кто-то обновит TYPE от CUSTOMER? thx –

+0

Да, вам нужен триггер. посмотрите [здесь] (http://www.techonthenet.com/oracle/triggers/after_update.php) – Aramillo