2017-12-20 7 views
-1

これは私のクエリです。関数をpl/pgsqlに書く

select origindept, `count(am_course_name)` as total_course 
from am_courseoffered 
group by origindept; 

私はこのクエリを返す関数を作成しようとしています。

CREATE OR REPLACE FUNCTION getcourse() 
RETURNS TABLE (
course_origindept character varying, 
course_ count(am_course_name) character varying 
) 
AS $$ 
BEGIN 
RETURN QUERY select origindept, count(am_course_name) as number_total_course 
from am_courseoffered 
group by origindept; 
END; $$ 

LANGUAGE 'plpgsql'; 

私の機能には多少の誤差があります。

ERROR:または近くに "文字" LINE 4で構文エラー:

変化course_数(am_course_name)文字どのように私はこのクエリを返す関数を作成します。

+0

私は、より具体的にする必要があると思います。あなたはその機能でどんなエラーを受けますか? –

+0

なぜ表示しないのですか?またはSQL関数? –

+0

なぜPL/pgSQLですか?単純なSQL関数も使用できます。また、 'count'関数のバッククォートは、Postgres(またはSQL一般) –

答えて

0

カウント・ファンクションはデータタイプbigintを返さなければならないので、カウントをvarcharと宣言するとデータ型の不一致が発生すると思います。これは次のように修正する必要があります。

CREATE OR REPLACE FUNCTION getcourse() 
RETURNS TABLE (
    course_origindept character varying, 
    course_count bigint -- change here 
) AS $$ 
BEGIN 
    RETURN QUERY 
    select origindept, count(am_course_name) as number_total_course 
    from am_courseoffered 
    group by origindept; 
END; 
$$ 
LANGUAGE plpgsql; 

これは機能を理解するための学問的な練習ですか?ビューはより適切なので、ユースケースは十分に疑わしいです。

+0

では無効です。この関数を実行すると、何らかのエラーが発生する –

+0

エラー:既存の関数の戻り値の型を変更できません。 DETAIL:OUTパラメータで定義された行の型が異なります。 ヒント:まず、DROP FUNCTION getcourse()を使用してください。 –

+0

ヒントのように、古い関数を先に削除する必要があります。 –

関連する問題