Ошибка с функцией состояния postgres SQL: 42601
create or replace function fibonacci(int) returns int
as $$
declare
a int;
res int := 0;
begin
a := $1;
if(a = 1 or a = 2) then
res :=1;
else
res := fibonacci(a - 2) + fibonacci(a - 1);
end if;
return res;
end;
language plpgsql;
Отображаемое сообщение об ошибке, а я не вижу ошибки, поскольку я исследую несколькими способами, которые продолжают отображаться, это последовательность Фибоначчи.
ERROR: una cadena separada por $ está inconclusa en o cerca de «$$
declare
a int;
res int := 0;
begin
a := $1;
if(a = 1 or a = 2) then
res :=1;
else
res := fibonacci(a - 2) + fibonacci(a - 1);
end if;
return res;
end;
language plpgsql;»
LINE 3: as $$
^
SQL state: 42601
Character: 106
1 ответ
Похоже на итальянскую версию:
ОШИБКА: неограниченная строка в долларовых кавычках на уровне или около "$$"
Это потому, что закрытые котировки доллара отсутствуют:
create or replace function fibonacci(int) returns int
as $$
declare
a int;
res int := 0;
begin
a := $1;
if(a = 1 or a = 2) then
res :=1;
else
res := fibonacci(a - 2) + fibonacci(a - 1);
end if;
return res;
end;
$$ -- !!!
language plpgsql;
Видеть:
Но вы можете значительно упростить функцию PL/pgSQL:
CREATE OR REPLACE FUNCTION fibonacci(int)
RETURNS int
LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE AS
$func$
BEGIN
IF $1 IN (1,2) THEN
RETURN 1;
ELSE
RETURN fibonacci($1 - 2) + fibonacci($1 - 1);
END IF;
END
$func$;
Или используйте более простую функцию SQL:
CREATE OR REPLACE FUNCTION fibonacci(int)
RETURNS int
LANGUAGE sql IMMUTABLE PARALLEL SAFE AS
$func$
SELECT CASE WHEN $1 IN (1,2)
THEN 1
ELSE fibonacci($1 - 2) + fibonacci($1 - 1) END;
$func$;