這是我先前提出的問題的第二次迭代。我正在創建以下功能。PostgreSQL選擇到OUT變量
CREATE FUNCTION public.getpogstats(IN symbol character varying, IN pogtypeid integer, OUT closehi numeric, OUT closelo numeric, OUT dayhi numeric, OUT daylo numeric, OUT s7dhi numeric, OUT s7dlo numeric, OUT t13hi numeric, OUT t13lo numeric, OUT close numeric, OUT firstdate timestamp without time zone)
RETURNS record
LANGUAGE 'sql'
AS $function$
SELECT ROUND(MAX(closeprice), 2), ROUND(MIN(closeprice), 2), ROUND(MAX(dayhigh), 2), ROUND(MIN(daylow), 2), ROUND(MAX(sevendaydp), 2), ROUND(MIN(sevendaydp), 2),
ROUND(MAX(thirteendaydp), 2), ROUND(MIN(thirteendaydp), 2), MIN(datadate)
INTO closehi, closelo, dayhi, daylo, s7dhi, s7dlo, t13hi, t13lo, firstdate
FROM pogdata
JOIN symbol ON pogdata.symbolid = symbol.symbolid AND pogdata.pogtypeid = pogtypeid
WHERE symbol.symbol = symbol;
SELECT ROUND(closeprice, 2) INTO close FROM pogdata
JOIN symbol ON pogdata.symbolid = symbol.symbolid
WHERE datadate = (SELECT MAX(datadate)
FROM pogdata JOIN symbol ON pogdata.symbolid = symbol.symbolid AND pogdata.pogtypeid = pogtypeid
WHERE symbol.symbol = symbol)
AND symbol.symbol = symbol;
$function$;
ALTER FUNCTION public.getpogstats(character varying, integer)
OWNER TO postgres;
當我執行創建這個功能,我得到以下信息:
ERROR: syntax error at or near ","
LINE 8: INTO closehi, closelo, dayhi, daylo, s7dhi, s7dlo, t13hi...
^
********** Error **********
ERROR: syntax error at or near ","
SQL state: 42601
Character: 620
我試圖遵循PostgreSQL的文檔,它說
...其中目標可以是記錄變量,行變量或簡單變量和記錄/行字段的逗號分隔列表。
OUT參數計爲「簡單變量」嗎?
'select ... into'只能與PL/pgSQL一起使用,而不是SQL(也是 - 不相關的 - 語言名稱是不應該放在單引號之間的標識符,所以它應該是'language sql'或'語言plpgsql') –
感謝您的反饋意見。我改變了語言到「PLPGSQL」但現在的錯誤是:語法錯誤或接近「選擇」。第6行:SELECT ROUND(MAX(closeprice),2),ROUND(MIN(closeprice),2),... – KFayal
您還需要更改函數的主體以符合PL/pgSQL的語法規則:https ://www.postgresql.org/docs/current/static/plpgsql.html –