Postgresql 如何确定触发器中的列值是否为整数?
下面是更新触发器之前由Postgresql 如何确定触发器中的列值是否为整数?,postgresql,postgresql-9.4,Postgresql,Postgresql 9.4,下面是更新触发器之前由执行的func的框架 CREATE OR REPLACE FUNCTION increment_indexes() RETURNS trigger AS $BODY$ BEGIN IF -- ??? END IF; END; $BODY$ LANGUAGE plpgsql; 我需要的是(使用IF语句)确定NEW.mycl是否为INTEGER,而不是一些文字。因此,对于以下情况,IF条件应返回true: UPDATE mytable SET mycol = 11
执行的func的框架
CREATE OR REPLACE FUNCTION increment_indexes()
RETURNS trigger AS
$BODY$
BEGIN
IF -- ???
END IF;
END;
$BODY$ LANGUAGE plpgsql;
我需要的是(使用IF
语句)确定NEW.mycl
是否为INTEGER
,而不是一些文字。因此,对于以下情况,IF
条件应返回true:
UPDATE mytable SET mycol = 11 WHERE mycol = 10
对于以下情况,为假:
UPDATE mytable SET mycol = mycol + 1 WHERE mycol = 10
如果您正在寻找如何确定列值是否为整数,则可以使用此函数,从
但是你的两次更新会给你同样的结果。我想你不能。因为在这两种情况下,new.mycl
的值始终为11
。我怀疑是否有布尔值来区分new
值是纯值还是以某种方式计算的值。Teejay是对的:触发器只会看到将分配给列的新值(或在触发器之后的中分配的新值)。触发器中没有该值是如何“生成”的信息。问题是:你为什么认为你需要这个?你想解决的真正问题是什么?你能解释一下为什么你需要做这个区分吗?所以顺序是:1。准备要插入的行(评估所有文字)。2.在触发器3之前执行。在表4中插入行。触发后执行-对吗?我只是想用NEW.mycol做点什么,但我不确定在触发过程之前它是否总是整数。
CREATE FUNCTION isnumeric(text) RETURNS boolean AS '
SELECT $1 ~ ''^[0-9]+$''
' LANGUAGE 'sql';