sql 觸發器 if
不知道是 Oracle 還是 SQL Server如果是 Oracle , 基本上是用 fei07100107 那種的用法如果是 SQL Server那么需要定義幾個變量。
create trigger levon customerfor updateas DECLARE @NewIntegral INT;BEGIN -- 取得 本次 更新的 integral -- 如果一條語句,更新很多條記錄的,這里要用游標處理。 SELECT @NewIntegral = integral FROM INSERTED-- 如果這里不是更新全部表的, -- 那么麻煩上面再多定義一個 變量, -- 從 INSERTED 里面,取得 主鍵, 下面這里加 WHERE 條件。
if @NewIntegral>50 and @NewIntegral<200 begin update customer set lev=1 end else if @NewIntegral>200 and @NewIntegral<500 begin update customer set lev=2 end else @NewIntegral>500 begin update customer set lev=3 end END。
ORACLE中觸發器的判斷IF語句
加一行 NULL 即可例如:SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 IF testvalue > 100 THEN 7 8 ELSIF testvalue = 100 THEN 9 dbms_*_line( '100' ); 10 ELSE 11 dbms_*_line( '100-' ); 12 END IF; 13 14 END; 15 / ELSIF testvalue = 100 THEN *ERROR 位于第 8 行:ORA-06550: 第 8 行, 第 9 列:PLS-00103: 出現符號 "TESTVALUE"在需要下列之一時::= . ( @% ;ORA-06550: 第 14 行, 第 4 列:PLS-00103: 出現符號 ";"在需要下列之一時:if上面的例子, 可以看出,如果 IF ELSE 里面, 沒有內容, 那么編譯不通過。
下面是 加一行 NULL 通過的例子:SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 IF testvalue > 100 THEN 7 NULL; 8 ELSIF testvalue = 100 THEN 9 dbms_*_line( '100' ); 10 ELSE 11 dbms_*_line( '100-' ); 12 END IF; 13 14 END; 15 /PL/SQL 過程已成功完成。
mysql 觸發器 if 語句 update
@sqlz ='select asd from flkg'; EXECUTE(@sqlz);----------首先,mysql下動態語句不是這樣寫的,另外,觸發器里不能允許返回結果集的.這里我是希望他能中斷更新!---------------------你的意思是不是要中斷后面的"SET amount =@amountmm WHERE CODE=* AND whcode = * ;"這部分?如果是的話,那這樣改下:DELIMITER $$USE `eerp`$$DROP TRIGGER /*!50032 IF EXISTS */ `material_update`$$CREATE TRIGGER `material_update` AFTER UPDATE ON `sf_material` FOR EACH ROW BEGIN IF *ng = 'Y' THEN SET @amountmm = (SELECT * FROM warehouse WHERE CODE=* AND whcode = *); IF @amountmm >=0 THEN UPDATE warehouse SET amount =@amountmm WHERE CODE=* AND whcode = * ; END IF ; END IF; END;$$DELIMITER ; &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"我是要中斷更新。
。不是后面。
嚴格說就是這個表sf_material更新和后面的那個表warehouse更新也一起中斷!"---------------------------------------------------------------因為mysql下觸發器內不支持rollback,所以,變換一個方式來處理,如下:那觸發器部分這么寫(注意:一定要使表TB_error_rollback在你的庫中不允許存在):CREATE TRIGGER `material_update` BEFORE UPDATE ON `sf_material` FOR EACH ROW BEGIN IF *ng = 'Y' THEN SET @amountmm = (SELECT amount- * FROM warehouse WHERE CODE=* AND whcode = *); IF @amountmm <0 THEN update TB_error_rollback set name=1; END IF; UPDATE warehouse SET amount =@amountmm WHERE CODE=* AND whcode = *; END IF;END;。
mysql 觸發器 if 語句 update
@sqlz ='select asd from flkg';
EXECUTE(@sqlz);
----------
首先,mysql下動態語句不是這樣寫的,另外,觸發器里不能允許返回結果集的.
這里我是希望他能中斷更新!
---------------------
你的意思是不是要中斷后面的
"
SET amount =@amountmm
WHERE CODE=* AND whcode = * ;
"
這部分?
如果是的話,那這樣改下:
DELIMITER $$
USE `eerp`$$
DROP TRIGGER /*!50032 IF EXISTS */ `material_update`$$
CREATE TRIGGER `material_update` AFTER UPDATE ON `sf_material`
FOR EACH ROW BEGIN
IF *ng = 'Y' THEN
SET @amountmm = (SELECT * FROM warehouse WHERE CODE=* AND whcode = *);
IF @amountmm >=0 THEN
UPDATE warehouse
SET amount =@amountmm
WHERE CODE=* AND whcode = * ;
END IF ;
END IF;
END;
$$
DELIMITER ;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
"我是要中斷更新。。不是后面。。。嚴格說就是這個表sf_material更新和后面的那個表warehouse更新也一起中斷!"
---------------------------------------------------------------
因為mysql下觸發器內不支持rollback,所以,變換一個方式來處理,如下:
那觸發器部分這么寫(注意:一定要使表TB_error_rollback在你的庫中不允許存在):
CREATE TRIGGER `material_update`
BEFORE UPDATE
ON `sf_material`
FOR EACH ROW
BEGIN
IF *ng = 'Y' THEN
SET @amountmm = (SELECT amount- * FROM warehouse WHERE CODE=* AND whcode = *);
IF @amountmm <0 THEN
update TB_error_rollback set name=1;
END IF;
UPDATE warehouse
SET amount =@amountmm
WHERE CODE=* AND whcode = *;
END IF;
END;
sql 觸發器 if
不知道是 Oracle 還是 SQL Server
如果是 Oracle , 基本上是用 fei07100107 那種的用法
如果是 SQL Server
那么需要定義幾個變量。
create trigger lev
on customer
for update
as
DECLARE
@NewIntegral INT;
BEGIN
-- 取得 本次 更新的 integral
-- 如果一條語句,更新很多條記錄的,這里要用游標處理。
SELECT @NewIntegral = integral FROM INSERTED
-- 如果這里不是更新全部表的,
-- 那么麻煩上面再多定義一個 變量,
-- 從 INSERTED 里面,取得 主鍵, 下面這里加 WHERE 條件。
if @NewIntegral>50 and @NewIntegral200 and @NewIntegral500
begin
update customer
set lev=3
end
END
ORACLE中觸發器的判斷IF語句
加一行 NULL 即可
例如:
SQL> DECLARE
2 testvalue INT;
3 BEGIN
4 testvalue := 200;
5
6 IF testvalue > 100 THEN
7
8 ELSIF testvalue = 100 THEN
9 dbms_*_line( '100' );
10 ELSE
11 dbms_*_line( '100-' );
12 END IF;
13
14 END;
15 /
ELSIF testvalue = 100 THEN
*
ERROR 位于第 8 行:
ORA-06550: 第 8 行, 第 9 列:
PLS-00103: 出現符號 "TESTVALUE"在需要下列之一時:
:= . ( @
% ;
ORA-06550: 第 14 行, 第 4 列:
PLS-00103: 出現符號 ";"在需要下列之一時:
if
上面的例子, 可以看出,如果 IF ELSE 里面, 沒有內容, 那么編譯不通過。
下面是 加一行 NULL 通過的例子:
SQL> DECLARE
2 testvalue INT;
3 BEGIN
4 testvalue := 200;
5
6 IF testvalue > 100 THEN
7 NULL;
8 ELSIF testvalue = 100 THEN
9 dbms_*_line( '100' );
10 ELSE
11 dbms_*_line( '100-' );
12 END IF;
13
14 END;
15 /
PL/SQL 過程已成功完成。
轉載請注明出處華閱文章網 » sql觸發器的if語句