2016-02-24 2 views
-1

Ниже приведен фрагмент кода, который мне нужно улучшить.Внедрение триггеров базы данных Oracle

CREATE OR REPLACE T_CHANGE AFTER ---Trigger Created for After insert/update option 
INSERT OR 
UPDATE OF QTY ON ABC BEGIN 
IF INSERTING THEN 
UPDATE XYZ D SET FLAG_CHG = 1 
WHERE EXISTS 
(
SELECT 1 FROM XYZ D WHERE 
:NEW.PRODUCT = D.PRODUCT AND 
:NEW.LOCATION = D.LOCATION 
); 

IF UPDATING THEN 
UPDATE XYZ D SET FLAG_CHG = 1 
WHERE EXISTS 
(
SELECT 1 FROM XYZ D WHERE 
:OLD.PRODUCT = D.PRODUCT AND 
:OLD.LOCATION = D.LOCATION `enter code here` 
); 

END IF 
END T_CHANGE; 

The two mentioned tables are as follow: 

CREATE TABLE XYZ (
PRODUCT VARCHAR2(50), 
LOCATION VArchar2(50), 
FLAG_CHG BOOLEAN DEFAULT 0, 
CONSTRAINT XYZ_PK PRIMARY KEY (PRODUCT,LOCATION) 
) 

CREATE TABLE ABC (
PRODUCT VARCHAR2(50), 
LOCATION VArchar2(50), 
QTY NUMBER, 
CONSTRAINT ABC_PK PRIMARY KEY (PRODUCT,LOCATION) 
) 

Чего вы пытаетесь достичь?

1) Если QTY в ABC обновляется или вставляется FLAG_CHG в XYZ должен быть обновлен до 1.

У меня есть несколько запросов на этой

1.) Will the above code work? :P 
2.) If works, will it have performance issues ? 
3.) How can I enhance this code to improve the performance ? 
4.) Please advice a better approach ,if any,to fulfill the requirement? 

Заранее спасибо.

+0

С одной стороны, вы не нужны подзапросы в ваших операторах UPDATE - просто поместите фильтры непосредственно в предложение WHERE. В противном случае ваши обновления будут применяться ко всем записям в таблице. Кроме того, у вас отсутствует END IF после первого оператора обновления. –

ответ

0

Это не сработает, потому что SQL не узнает, что вы собираетесь там делать, я думаю.

Лучше Approch для него, чтобы создать несколько уникальных полей в таблице, а затем сделать запрос INSERT .... ON DUPLICATE KEY UPDATE ...

Ссылка

UPDATE on DUPLICATE KEY ORACLE

+0

Создание триггера является частью требования. Мне не нужно вставлять какие-либо значения, но я хочу обновить флаг в XYZ, если обновлен QTY col в ABC или добавлена ​​новая строка для комбинации (Product, Location), существующей в XYZ. –

+0

Вам нужно использовать свою логику с тем, что было предоставлено SQL-запросом, например, с запросом 'update on duplicate key '. –

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