Sql 在Postgres存储过程中指定一个变量
我想根据频率是大于1200000还是小于1200000的条件,为存储过程中名为frequency_to_add的变量分配一个interval type的值。根据频率的不同,变量会有所不同,因此我可以在整个过程中使用该变量。目前我有以下内容,但它抱怨dpl.frequency<'1200000'时出现语法错误这有什么问题?我还没有用下面代码中创建的变量替换代码Sql 在Postgres存储过程中指定一个变量,sql,postgresql,Sql,Postgresql,我想根据频率是大于1200000还是小于1200000的条件,为存储过程中名为frequency_to_add的变量分配一个interval type的值。根据频率的不同,变量会有所不同,因此我可以在整个过程中使用该变量。目前我有以下内容,但它抱怨dpl.frequency
CREATE OR REPLACE FUNCTION mo_show_slow_network()
RETURNS TABLE(
id BIGINT,
time_late_by DOUBLE PRECISION
)
AS
$$
DECLARE
frequency_to_add interval;
BEGIN
CASE WHEN (dpl.frequency > '1200000')
THEN frequency_to_add = 20 * interval '1 minute'
WHEN (dpl.frequency < '1200000')
THEN frequency_to_add = dpl.frequency * interval '1 milliseconds'
RETURN QUERY
SELECT
dpl.dp_id AS dp_id,
CASE
WHEN (dpl.frequency > '1200000')
THEN EXTRACT(EPOCH FROM (current_timestamp - dpl.date_created) + 20 * interval '1 minute')
WHEN(dpl.frequency < '1200000')
THEN EXTRACT(EPOCH FROM (current_timestamp - dpl.date_created) + dpl.frequency * interval '1 milliseconds')
ELSE NULL
END AS time_late_by
FROM -- rest of code...
您需要将变量分配给CASE表达式的结果。您不能在案例中执行分配:
frequency_to_add := CASE WHEN (dpl.frequency > '1200000')
THEN 20 * interval '1 minute'
WHEN (dpl.frequency < '1200000')
THEN dpl.frequency * interval '1 milliseconds'
end;
但这仍然不起作用,因为赋值不能访问您在case语句之后定义的别名dbl
所以你不能像那样做你想做的事。您需要保持select中的case语句不变。我将在两个EXTRACT语句中使用该变量,但您在代码中的该点无法访问dbl。所以你不能一开始就分配变量。明白了,测试并实现了它