我想根据频率是否大于1200000或小于1200000的条件,将interval
类型的值分配给我的存储过程中名为frequency_to_add
的变量。具体取决于频率,变量将是不同的,所以我可以在整个过程中使用该变量。目前我有以下内容,但它抱怨WHEN (dpl.frequency < '1200000')
的语法错误有什么问题呢? (我还没有用下面代码中创建的变量替换代码)
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...
答案 0 :(得分:0)
您需要将变量分配给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;
但是仍然无法正常工作,因为作业无权访问 dbl
语句后您定义的别名case
。
所以你实际上不能做你想做的事。您需要将case
语句保留在select
中。