簡體   English   中英

如何通過記錄作為PL / pgSQL函數的參數?

[英]How to pass a record as parameter for PL/pgSQL function?

我一直在網上尋找這個答案,但找不到。

我試圖通過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;

嘗試這個:

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

dim_date必須是一個表。

編輯:

好吧,現在我真的很困惑。

  1. 日期應該是一欄,而不是表格。 我不明白您為什么要創建一個帶有日期值的表。
  2. 您可以使用to_char格式化日期沒有問題。 閱讀本文: 數據類型格式化功能以了解如何。 您創建的函數沒有意義。
  3. 您正在輸出PL / pgSQL嗎? 格式化不應該由中間層完成嗎? 您應該只從數據庫返回一個日期。

最后,我建議閱讀PL / pgSQL 手冊 那里有很多好東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM