我有一个充满“漏洞”的传感器数据表,只有在指定的阈值变化时才会保存数据。
| time stamp | value1 | value2 |
| 2012-01-01 | 1 | |
| 2012-01-02 | | 2 |
| 2012-01-05 | | |
| 2012-01-20 | | |
| 2012-03-01 | 3 | 1 |
我需要进行交叉行计算,但表格中的漏洞使其不切实际。我的解决方案是创建一个辅助函数来包装相关字段,并使用session参数作为持久变量。 ......这样:
CREATE FUNCTION wrap_data( data1 numeric(3,1) )
... LANGUAGE plpgsql
IF data1 <> NULL THEN
EXECUTE 'SET SESSION app.data1 = $1;' USING data1;
END IF;
RETURN current_setting('app.data1')::numeric(3,1)
...
它有效但在执行函数之前,我总是必须通过以下函数初始化函数之外的变量:
SET SESSION app.data1 = 11.1;
或者它会抱怨参数不被识别。
我正在寻找像IfParameterExist()这样的函数,它允许我检查这个变量的存在而不会在我的plpgsql函数中引发错误。