2016-11-07 7 views
0

Как создать хранимую процедуру, способную принимать значение флага, например (1,2,3) где 1 = insert, 2 = delete, 3 = update.Комбинированная процедура для триггеров

Так, например, если флаг равен 1, процедура будет вставляться и т. Д.

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

Спасибо.

+0

Подсказка: 'if' кажется, что это было бы полезно. –

+0

Я бы создал три разных хранимых процедуры для каждого из вставки, удаления и обновления. Вы бы создали традиционную функцию, например, C, C# Java, которая выполняет все три операции? Я знаю, что не буду! [Разделение концерна] (https://en.wikipedia.org/wiki/Separation_of_concerns)! –

ответ

0

Я бы использовал CTE и условия.

Чтобы дать вам пример того, что я имею в виду:

CREATE OR REPLACE FUNCTION public.test (_flag integer) RETURNS void AS 
$func$ 

WITH delete AS 
(DELETE FROM 
atable 
WHERE 
_flag = 1), 

insert AS 
(INSERT INTO 
atable (acolumn) 
SELECT 
'Hello World' 
WHERE 
_flag = 2) 

UPDATE 
atable 
SET 
acolumn = 'Hello World' 
WHERE 
_flag = 3; 

$func$ 
LANGUAGE sql COST 100 STRICT; 

Вы заметите, что каждый оператор имеет свое собственное состояние флага проверки.

1

Вы можете использовать нормальный Если еще заявление:

CREATE PROCEDURE <ProcedureName> (@Flag int) 
AS 
BEGIN 
    IF(@Flag = 1)--INSERT 
    BEGIN 
     <Insert statement> 
    END 
    ELSE IF(@Flag = 2) --DELETE 
    BEGIN 
     <Delete statement> 
    END 
    ELSE IF (@Flag = 3) --UPDATE 
    BEGIN 
     <Update statement> 
    END 
END 
GO 
Смежные вопросы