В настоящее время я использую PostgresSQL 10 в качестве новичка и, как могу, следую документации. Вся помощь приветствуется.
Я пытаюсь установить значение переменной на основе оператора case, чтобы я мог использовать это значение в следующей части моего кода. У меня проблемы с синтаксисом, и, честно говоря, я просто понимаю, как установить значение из оператора case.
Ниже приведен код, который я получил до сих пор.
Я пытаюсь установить значение переменной "AndSol". Значение будет либо установлено на 0, либо на 1 в зависимости от ситуации.
В блоке с комментарием «Солнечное излучение» у меня возникают проблемы при установке значения переменной. Остальная часть кода включена только для справки о том, чего я пытаюсь достичь. Я заканчиваю каждое предложение where чем-то вроде THEN AndSol: = 1; , и я предполагаю, что именно в этом и заключается ошибка. Я не знаю, как это исправить.
Основной поток:
Определите, должна ли переменная быть 0 или 1.
Установите переменную.
Используйте переменную в следующей части.
DO $$
DECLARE AndSol NUMERIC;
BEGIN
DROP MATERIALIZED VIEW IF EXISTS view_6day_mat;
CREATE MATERIALIZED VIEW view_6day_mat
AS
SELECT prod_qld_6km_grids.weather_cell_id,
prod_qld_6km_grids.latitude,
prod_qld_6km_grids.longitude,
/* Solar Radiation */
CASE
WHEN EXTRACT(MONTH FROM prod_weathergrids.dates) >= 8 AND EXTRACT(MONTH FROM prod_weathergrids.dates) <= 12 THEN AndSol := 1;
WHEN EXTRACT(MONTH FROM prod_weathergrids.dates) = 1 AND EXTRACT(MONTH FROM prod_weathergrids.dates) <= 2 AND prod_weathergrids.cloudcover < 30 then AndSol := 1;
ELSE AndSol := 0; END/* 0 END AS AndersonsSolarRad, */
/* Moisture Content */
CASE WHEN prod_weathergrids.rh > 0 AND prod_weathergrids.temperature > 0 THEN
ROUND(4.37+0.161*prod_weathergrids.rh-0.1*(prod_weathergrids.temperature-25)-AndSol*0.027*prod_weathergrids.rh), 2)
ELSE 0 END AS AndersonsHMC
FROM MyTable
ORDER BY prod_qld_6km_grids.weather_cell_id
END $$;
Сообщение об ошибке, которое я получаю отpgAdmin:
ERROR: syntax error at or near ":="
LINE 49: ...(MONTH FROM prod_weathergrids.dates) <= 12 THEN AndSol := 1;
^
SQL state: 42601
Character: 2440
Я должен признать, я не знаю, как преодолеть ошибку, потому что из документации и примеров, которые я видел, в основном все устанавливают переменную, используя ": =".