Как передать запись в качестве параметра для функции PL / pgSQL? - PullRequest
4 голосов
/ 07 октября 2010

Я продолжаю искать этот ответ в Интернете, но не могу его найти.

Я пытаюсь передать одну запись через функцию PL / pgSQL. Я попробовал это двумя способами.

Первый путь :

CREATE OR REPLACE FUNCTION translateToReadableDate(mRecord dim_date%ROWTYPE) RETURNS void AS $$

Это выход:

psql:requestExample.sql:21: ERROR:  syntax error at or near "%"
LINE 1: ... FUNCTION translateToReadableDate(mRecord dim_date%ROWTYPE) ...
                                                             ^

Второй способ :

CREATE OR REPLACE FUNCTION translateToReadableDate(mRecord RECORD) RETURNS void AS $$

А есть вывод

psql:requestExample.sql:21: ERROR:  PL/pgSQL functions cannot accept type record

Кто-то знает, как это сделать, пожалуйста?

CREATE OR REPLACE FUNCTION translateToReadableDate(mRecord dim_date) RETURNS void AS $$

    BEGIN

    SELECT dim_day.name || ' (' || dim_day_in_month.id || ') ' || dim_month.name   || 'is the ' || dim_week.id || ' week of the year. ' AS "Une phrase", dim_quarter.id, dim_year.id
    FROM dim_date dd
     JOIN dim_day ON dd.day_id = dim_day.day_id
     JOIN dim_day_in_month ON dd.day_in_month_id = day_in_month.day_in_month_id
     JOIN dim_week ON dd.week_id = dim_week.week_id
     JOIN dim_month ON dd.month_id = dim_month.month_id
     JOIN dim_quarter ON dd.quarter_id = dim_quarter.quarter_id
     JOIN dim_year ON dd.year_id = dim_year.year_id
    WHERE dd.day_id = mRecord.day_id
     AND dd.day_in_month_id = mRecord.day_in_month_id
     AND dd.week_id = mRecord.week_id
     AND dd.month_id = mRecord.month_id
     AND dd.quarter_id = mRecord.quarter_id
     AND dd.year_id = mRecord.year_id;

    END;
    $$ LANGUAGE plpgsql;

1 Ответ

2 голосов
/ 07 октября 2010

Попробуйте:

CREATE OR REPLACE FUNCTION translateToReadableDate(mRecord dim_date) RETURNS void AS $$

dim_date должен быть таблицей.

РЕДАКТИРОВАТЬ:

Хорошо, теперь я действительно запутался.

  1. Дата должна быть столбцом, а не таблицей.Я не могу понять, почему вы создали бы таблицу со значениями даты.
  2. Вы можете форматировать даты без проблем с to_char.Прочитайте это: Функции форматирования типов данных , чтобы узнать, как это сделать.Эта созданная вами функция не имеет смысла.
  3. Вы выводите PL / pgSQL?Разве форматирование не должно выполняться средним уровнем?Вы должны просто вернуть Date из базы данных.

Наконец, я бы порекомендовал прочитать PL / pgSQL Manual .Там много хорошего.

...