Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何确定触发器中的列值是否为整数?_Postgresql_Postgresql 9.4 - Fatal编程技术网

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';