Случайная двойная функция — POSTGRESQL

Я пытаюсь написать функцию, которая принимает минимальный и максимальный ввод и возвращает двойное значение.

Входы:

high (integer)
low (integer)

Выход:

val (double)

Мой код SQL:

CREATE OR REPLACE FUNCTION random_between(low INT ,high INT) 
   RETURNS DOUBLE AS

BEGIN
   RETURN floor(random()* (high-low + 1) + low);
END;

Ошибка:

ОШИБКА: синтаксическая ошибка в начале или рядом с ним


person CodePenguin    schedule 01.12.2020    source источник


Ответы (1)


Вы можете написать это как чистую функцию SQL, например:

create or replace function random_between(low int ,high int) 
returns double precision as $$
    select floor(random()* (high-low + 1) + low);
$$ language sql;

Проблемы с вашим кодом:

  • тело функции должно быть заключено в одинарные кавычки (или что-то подобное, например $$)

  • в Postgres нет типа данных double; возможно, вы имели в виду double precision; обратите внимание, однако, что это неточный тип данных: это может быть, а может и не быть тем, что вам нужно, но убедитесь, что вы понимаете последствия

  • вам нужно указать language функции

person GMB    schedule 01.12.2020
comment
это работает очень хорошо! - person CodePenguin; 01.12.2020
comment
это первый раз, когда я создаю функцию в sql, эту функцию можно использовать для всех элементов таблицы? например, у меня есть таблица из 10 элементов, в которых есть столбцы max и min. я бы выполнил свою функцию для всех строк и сохранил значения в новом столбце с именем value - person CodePenguin; 01.12.2020