有问题的代码:
CREATE OR REPLACE FUNCTION foo(searchid INTEGER)
RETURNS INTEGER AS
$$
DECLARE
level INTEGER := 0;
mid INTEGER := searchid;
BEGIN
WHILE EXISTS(SELECT id INTO mid FROM tbl1 WHERE parent_id=mid) LOOP
level := level + 1;
END LOOP;
RETURN level;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE;
我需要找到 id 元素的树深度searchid
,我编写了一个与上面略有不同的函数,它mid NOTNULL
用作 while 循环的条件并且它可以工作。
但是,当我尝试EXISTS
直接在 WHILE 条件下使用上面发布的代码时,postgresql 说:
SQL error:
ERROR: syntax error at or near "$1"
LINE 1: SELECT EXISTS(SELECT id INTO $1 FROM tbl1 WHERE ...
所以它对我的代码做了一些奇怪的转换,这使得它在语法上是错误的。
如何解决?
它在 postgresql 8.3.17 上运行。