CREATE FUNCTION t1_count(int4, int4) RETURNS int4 ASˊ if {![ info exists GD(plan) ]} { # prepare the saved plan on the first call set GD(plan) [ spi_prepare \ “SELECT count(*) AS cnt FROM t1 WHERE num >= \$1 AND num <= \$2”\ int4 ] } spi_execp -count 1 $GD(plan) [ list $1 $2 ] return $cnt ˊLANGUAGE ˊpltclˊ;
注意创建函数时每个 Tcl 会看到的反斜杠必须写双份,因为在 CREATE FUNCTION 时主分析器也处理反斜杠.在给予 spi_prepare 的查询字符串里面应该是真正的标识参数位置的美圆符号,而不应让第一次函数调用给出的值把 $1 给替换掉.