我使用PostgreSQL 9.1创建触发器功能,我在这个触发器功能中如何表达...
IF NEW.timetype = 'start' THEN
SELECT timestmp FROM tbl_ebscb_saaaa_log WHERE fnname = NEW.fnname AND timetype = 'start' ORDER BY stmtserial DESC LIMIT 1 INTO v_timestmp_start;
IF FOUND THEN
NEW.timetypespan := age(NEW.timestpm, v_timestmp_start);
ELSE
END IF;
我想...如果没有找到,那么什么都不做(比如"传递"在python中),我该怎么办?把它留在空白???不在任何循环内。
谢谢高级。
PD:如果有人可以提供关于基本postgresql工作流程的示例的良好链接,请。再次感谢。答案 0 :(得分:0)
在SQL中通常至少有两种方法可以做到这一点:
第一种方法是不检索值,只是检查它。这将使用if exists语句替换您的select语句。如果您不需要对v_timestmp_start
值执行任何其他操作,请使用此方法。
看起来像是:IF EXISTS (SELECT 1 FROM tbl WHERE ...) THEN ...
。
另一种方法是检查变量的值,如果select没有找到任何内容,则该值应为NULL。这看起来非常像您已经拥有的(但替换为IF NOT NULL
)。
这看起来像是:IF v_timestmp_start IS NOT NULL THEN ...
。
还有一个与postgres独有的选项。这看起来与您已有的(IF FOUND THEN ...
完全一样。