4

この答えをオンラインで探し続けていますが、見つかりません。

PL/pgSQL 関数で 1 つのレコードを渡そうとしています。2つの方法で試しました。

最初の方法:

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) ...
                                                             ^

2 番目の方法:

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;
4

1 に答える 1

2

これを試して:

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

dim_dateはテーブルである必要があります。

編集:

さて、今私は本当に混乱しています。

  1. 日付は表ではなく列である必要があります。なぜ日付値のテーブルを作成するのか理解できません。
  2. to_charで問題なく日付をフォーマットできます。方法については、 「データ型フォーマット関数」をお読みください。作成したその関数は意味がありません。
  3. PL / pgSQLを出力していますか?フォーマットは中間層で行うべきではありませんか?データベースから日付を返すだけです。

最後に、PL/pgSQLマニュアルを読むことをお勧めします。そこにはたくさんの良いものがあります。

于 2010-10-07T09:27:08.103 に答える