我有一个表,人为控制记录为100行,有一个级别列分为5个级别(赋值0,1,2,3,4),分别控制在50行,10行,10行,10行,10行(在总行不超过100行时允许各级别超出限制),现在要写一个触发器,在插入第101条数据时,按级别删除已有数据,使每个级别都要在规定行数之内。各位高人帮帮我想想怎么写这个触发器???
id severity
1 0
2 0
3 0
…………
13 0
14 1
…………
…………
100 4
由于plpgsql语言不能嵌套,实在是想不出来怎样实现了,各位帮忙想想,先谢谢了!!!
id severity
1 0
2 0
3 0
…………
13 0
14 1
…………
…………
100 4
由于plpgsql语言不能嵌套,实在是想不出来怎样实现了,各位帮忙想想,先谢谢了!!!
希望高手指点!!!
pretty_sex := 'man';
ELSE
IF demo_row.sex = 'f' THEN
pretty_sex := 'woman';
END IF;
END IF;
这个可以这样写:IF 条件1 THEN
...
ELSIF 条件2 THEN
...
ELSIF 条件3 THEN
...
END IF;
if 条件1 then
……;
eles
if 条件2 then
……;
end if;
if 条件3 then
……;
end if;
if 条件4 then
……;
end if;
.
.
.
end if;
我看的是PostgreSQL文档哦,摘里面的相关内容如下,你参考下吧:35.7.2. 条件
IF 语句让你可以根据某种条件执行命令。 PL/pgSQL有五种形式的IF: IF ... THENIF ... THEN ... ELSEIF ... THEN ... ELSE IFIF ... THEN ... ELSIF ... THEN ... ELSEIF ... THEN ... ELSEIF ... THEN ... ELSE
35.7.2.1. IF-THEN
IF boolean-expression THEN
statements
END IF;
IF-THEN语句是IF的最简单形式。如果条件为真, 在THEN和END IF之间的语句将被执行。 否则,将忽略它们。 例子: IF v_user_id <> 0 THEN
UPDATE users SET email = v_email WHERE user_id = v_user_id;
END IF;35.7.2.2. IF-THEN-ELSE
IF boolean-expression THEN
statements
ELSE
statements
END IF;
IF-THEN-ELSE语句增加了IF-THEN的分支, 让你可以声明在条件计算结果为假的时候执行的语句。 例子: IF parentid IS NULL OR parentid = ''
THEN
RETURN fullname;
ELSE
RETURN hp_true_filename(parentid) || '/' || fullname;
END IF;IF v_count > 0 THEN
INSERT INTO users_count(count) VALUES(v_count);
RETURN 't';
ELSE
RETURN 'f';
END IF;35.7.2.3. IF-THEN-ELSE IF
IF语句可以嵌套并且在下面的例子中: IF demo_row.sex = 'm' THEN
pretty_sex := 'man';
ELSE
IF demo_row.sex = 'f' THEN
pretty_sex := 'woman';
END IF;
END IF;如果你使用这种形式,那么你实际上就是在另外一个IF语句的ELSE 部分嵌套了一个IF语句.因此你需要一个END IF语句 给每个嵌套的IF,另外还要一个给父IF-ELSE用. 这么干是可以的,但是如果我们有太多候选项需要检查,那么就会变得很乏味. 因此有下面的形式。 35.7.2.4. IF-THEN-ELSIF-ELSE
IF boolean-expression THEN
statements
[ ELSIF boolean-expression THEN
statements
[ ELSIF boolean-expression THEN
statements
...]]
[ ELSE
statements ]
END IF;
IF-THEN-ELSIF-ELSE提供了一种更方便的方法用于在一条语句中检查许多候选条件。 形式上它和嵌套的IF-THEN-ELSE-IF-THEN命令相同, 但是只需要一个END IF。 这里是一个例子: IF number = 0 THEN
result := 'zero';
ELSIF number > 0 THEN
result := 'positive';
ELSIF number < 0 THEN
result := 'negative';
ELSE
-- 另外一个唯一的可能是它是空值
result := 'NULL';
END IF;35.7.2.5. IF-THEN-ELSEIF-ELSE
ELSEIF 是 ELSIF 的别名。
对楼主的两个小建议1. 网上到 PostgreSQL 的官网或者其它网站下载一个文档手册。 然后粗看一遍。
2. 安装一个 PostgreSQL, 勇于实践,伟人说得好“实践是检验的标准”, 我把“唯一”两个字去掉了。
::)
csdn=# CREATE FUNCTION sp_shanhengshu(t integer) RETURNS integer AS $$
csdn$# BEGIN
csdn$#
csdn$# IF t > 0
csdn$# THEN
csdn$# RETURN 1;
csdn$# ELSE
csdn$# IF t < 0
csdn$# THEN
csdn$# RETURN -1;
csdn$# ELSE
csdn$# RETURN 0;
csdn$# END IF;
csdn$# END IF;
csdn$# END;
csdn$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
csdn=# select sp_shanhengshu(10);
sp_shanhengshu
----------------
1
(1 row)
csdn=# select sp_shanhengshu(-9);
sp_shanhengshu
----------------
-1
(1 row)
csdn=#