2017-05-08 13 views
0

私はMSSQLデータベースをPostgreSQLに変換しています。PostgreSQLの私の経験は "noob"レベルです。私は基本的にOUT引数のグループに値を代入するストアドプロシージャをMSSQLに持っています。関数を作成するために以下のスクリプトを実行しようとすると、エラー 'ERROR:column "closehiが存在しません。なぜこれらのOUTパラメータにSELECTできないのか分かりません。 『』で、または近くに構文エラー:出力パラメータPostgreSQL SELECT

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変数の直後にカンマを指しています。

+2

'closehi = ROUND(MAX(closeprice)、2)'をROUND(MAX(closeprice)、2)をclosehiに変更するなどです。 2番目のクエリでセミコロンを閉じることができません –

+0

ありがとうございます。これは私のMSSQLストアドプロシージャから直接コピーされていましたが、それまでのところ、直接動作しなかった唯一のものでした。 – KFayal

答えて

1

構文は

SELECT variable1 = expression1, variable2 = expression2 ... 

しかし

SELECT expression1, expression2 INTO variable1, variable2 ... 

ないthe documentationを参照してください。

関連する問題