2016-12-06 2 views
3

Ich versuche und kämpfe, Variablen in PostgreSQL-Abfragen zu deklarieren. Kann mir jemand mit dem untenstehenden helfen?Wie deklariere ich eine Variable in PostgreSQL-Abfragen

declare CampaignID val INT; 
select CampaignID = 6 
select 
    result_code.description, 
    count (*) as count 
from 
    history 
     left join result_code on result_code.result_code = history.result_code 
where 
    campaign_id = CampaignID 
     and history.start_date_time between '2016-12-06 00:00:00' and '2016-12-06 23:00:00' 
group by 
    result_code.description 

Antwort

0

1) Erster Weg (mit PL/pgSQL-Funktion):

CREATE OR REPLACE FUNCTION MY_SELECT_FUNC(CampaignID integer) 
RETURNS TABLE(res_description character varying(255), res_count integer) AS 
$BODY$ 
BEGIN 

    for res_description, res_count 
    in 
    select 
    result_code.description, 
    count (*) as count 
    from history 
    left join result_code on result_code.result_code = history.result_code 
    where campaign_id = CampaignID 
    and history.start_date_time between '2016-12-06 00:00:00' and '2016-12-06 23:00:00' 
    group by result_code.description 
    loop 
    return next; 
    end loop; 

END;$BODY$ 
LANGUAGE plpgsql VOLATILE; 

und dann können Sie Ergebnis in SQL wählen:

SELECT * from MY_SELECT_FUNC(6); 

2) Zweiter Weg (mit SQL-Funktion):

CREATE TYPE MY_SELECT_FUNC_RES AS (res_description character varying(255), res_count integer); 

CREATE OR REPLACE FUNCTION MY_SELECT_FUNC(CampaignID integer) 
RETURNS SETOF MY_SELECT_FUNC_RES AS 
$$ 
    select 
    result_code.description, 
    CAST(count(*) AS INTEGER) 
    from history 
    left join result_code on result_code.result_code = history.result_code 
    where campaign_id = CampaignID 
    and history.start_date_time between '2016-12-06 00:00:00' and '2016-12-06 23:00:00' 
    group by result_code.description 
$$ 
LANGUAGE SQL; 

und dann können Sie auswählen Ergebnis in sql:

SELECT * from MY_SELECT_FUNC(6); 
Verwandte Themen