0

我正在将 MSSQL 数据库转换为 PostgreSQL,而我对 PostgreSQL 的体验处于“菜鸟”级别。我在 MSSQL 中有一个存储过程,我基本上将值分配给一组 OUT 参数。当我尝试执行以下脚本来创建函数时,我收到一个错误“错误:列“closehi”不存在”我无法弄清楚为什么我无法选择这些 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 closehi = ROUND(MAX(closeprice), 2), closelo = ROUND(MIN(closeprice), 2), dayhi = ROUND(MAX(dayhigh), 2), daylo = ROUND(MIN(daylow), 2), 
    s7dhi = ROUND(MAX(sevendaydp), 2), s7dlo = ROUND(MIN(sevendaydp), 2), t13hi = ROUND(MAX(thirteendaydp), 2), t13lo = ROUND(MIN(thirteendaydp), 2), firstdate = MIN(datadate)
FROM pogdata
JOIN symbol ON pogdata.symbolid = symbol.symbolid AND pogdata.pogtypeid = pogtypeid
WHERE symbol.symbol = symbol;

SELECT close = ROUND(ClosePrice, 2) 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;

在提出建议后,我将函数的部分更改如下:

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;

但现在我收到一条错误消息,提示“错误:在“,”或附近出现语法错误,并且它直接指向 INTO 目标变量列表中 closehi 变量之后的逗号。

4

1 回答 1

2

语法不是

SELECT variable1 = expression1, variable2 = expression2 ...

SELECT expression1, expression2 INTO variable1, variable2 ...

请参阅文档

于 2017-05-08T07:16:57.610 回答