2012-05-12 19 views
3

の私は8.4のverのPostgreSQLを使用していますが、次のカスタムのグループ化機能を書かれている:PostgreSQLの機能:最後の文が返すbigint型の代わりに整数

CREATE OR REPLACE FUNCTION custom_group(integer) 
RETURNS TABLE (
grp INTEGER, 
entry_date DATE, 
col1 REAL, 
col2 REAL, 
col3 REAL, 
col4 REAL, 
col5 INTEGER, 
col6 INTEGER) AS 
$BODY$ 
    SELECT ceil(rank() OVER (ORDER BY entry_date)/$1)::int as grp 
      ,entry_date, col1, col2, col3, col4, col5, col6 
    FROM table_foo 
    ORDER BY 1; 
$BODY$ LANGUAGE SQL; 

私はpsqlを使用してに機能をインポートしようとすると、私は次の取得エラー:

Final statement returns bigint instead of integer

私はエラーメッセージを理解できません。特にRECORD(ウェルテーブル)タイプをお待ちしております。

エラーの原因は何ですか。これを修正するにはどうすればよいですか。

[[編集]]

コメントで提案されているように私は、しかし、私は同じエラーを得た、BIGINTにGRPのデータ型を変更しました。詳細は:

ERROR: return type mismatch in function declared to return record 
DETAIL: Final statement returns integer instead of bigint at column 1. 
CONTEXT: SQL function "custom_group" 
+0

私の推測では、 'ceil()'は 'bigint'を返し、' grp'を 'int'として定義しています。リターンテーブル定義で 'grp'を' bigint'に変更してみてください。 –

+0

@juergend:私はそれを試みましたが、エラーはまだ残っています。私の編集した質問を見てください。 –

+0

[この](http://sqlfiddle.com/#!1/8f80f/1)の例を変更してエラーを再現できますか? (新しいリンクをポストバックする) –

答えて

1

編集した後、あなたは今異なるエラーを取得しています。 は、明示的に列1をintにキャストし、bigintと宣言したため、この新しいエラーが発生します。私の推測では、元の問題がcol5またはcol6table_fooであったのはbigintです。

関連する問題