SQL: таблица, возвращающая функцию, не соответствует ожидаемой отметке времени типа - PullRequest
0 голосов
/ 25 февраля 2020

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

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Ваша функция работает, если вы явно приведете столбцы в свой SELECT, например:

CREATE OR REPLACE FUNCTION list_assistant_transactions(_assistant VARCHAR(64))
RETURNS TABLE (can VARCHAR(32), "timestamp" TIMESTAMP) AS
$$
BEGIN
    RETURN QUERY SELECT transaction.can::varchar, 
    transaction.timestamp::timestamp as "Time of transaction" 
    FROM transaction
    WHERE assistant = _assistant;
END;
$$ language plpgsql
;

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

0 голосов
/ 25 февраля 2020

В вашем запросе «ВОЗВРАТ ЗАПРОС ВЫБОР транзакции.can,« отметка времени »как« Время транзакции »ОТ транзакции» вы хотите указывать метку времени столбца, но, поместив ее в одинарные кавычки ('), вы указали Postgres, что хотите строка timestamp, которая не соответствует определению возвращаемой таблицы. Просто бросьте одинарные кавычки. Я не совсем уверен, что он сделал со «Time of Transaction», поскольку это тоже строка, но что бы она ни была пропущена в пользу определения вывода.

create or replace function list_assistant_transactions(_assistant varchar(64))
returns table (can varchar(32), "timestamp" timestamp) as
$$
    select transaction.can, timestamp 
     from transaction
    where assistant = _assistant;
$$ language sql;

Предполагается, что отметка времени - это имя столбца в таблице транзакций. Кстати, если это очень плохая практика, называйте столбец так же, как тип данных. Если в таблице DDL указана двойная кавычка, то и в запросе это тоже нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...