postgresQL 中,编写存储过程时,通过execute执行sql语句。可是有些情况下,比如update,不需要获取sql执行的结果,如果这时使用“execute”执行sql,就会报错“invalid input syntax for type boolean”。这时,应该使用“perform”执行不需要获得返回值的sql。
当然,还有一种可能,如果定义了一个可以重定义的cursor,而打开这个cursor时使用了一个字符串作为sql,此时,遍历cursor的时候,不能再对这个sql进行赋值操作,否则也会报这个错误。
例如:
sql := 'select gid,tile_x,tile_y,the_geom from '||tbl ; OPEN cur FOR execute sql; WHILE row_num > 0 LOOP FETCH cur INTO gid,tile_x,tile_y,the_geom; geom_text := GEOM2PIX(tile_x,tile_y,the_geom); sql := 'UPDATE '||tbl||' SET geom_text = '''||geom_text||''' where gid = '||gid; execute sql;--这时就会报错 row_num := row_num -1; END LOOP;改成:sql := 'select gid,tile_x,tile_y,the_geom from '||tbl ; OPEN cur FOR execute sql; WHILE row_num > 0 LOOP FETCH cur INTO gid,tile_x,tile_y,the_geom; geom_text := GEOM2PIX(tile_x,tile_y,the_geom); sql_text := 'UPDATE '||tbl||' SET geom_text = '''||geom_text||''' where gid = '||gid; execute sql_text;--没问题 row_num := row_num -1; END LOOP;