2017-09-13 6 views
0

Je sais que je dois passer du texte à la fonction de tableau croisé dans postgres. Mais de toute façon je suis incapable de le faire. Je ne suis pas sûr de ce que je fais mal s'il vous plaît Aide. Ceci est la fonction que je suis en train de créerImpossible de passer des arguments dans la fonction de tableau croisé postgres

create or replace function hrms.test2(startdate date) 
returns table(
employeeid int, 
col1 int, 
col2 INT, 
col3 int, 
col4 int) as 
$body$ 
SELECT * FROM hrms.crosstab(
    $firstquery$ 
    SELECT tms.employeeid,tms.today,count(tms.employeeid) as countid 
    FROM hrms.timesheet as tms 
    where dated>=|| quote_literal(startdate) || 
    and dated < ||+ quote_literal(startdate)||::timestamp + '1 MONTH'::INTERVAL 
    group by tms.employeeid,tms.today $firstquery$, 
    $secquery$ select distinct tms.today 
    from hrms.timesheet as tms$secquery$ 
)as 
finalresult(employeeid int,leave int,present int,absent int, holiday int) 
$body$ 
LANGUAGE SQL; 

Il fonctionne avec succès, mais quand je le lance en utilisant une date comme

select * from hrms.test2('2017-09-01') 

Je reçois un message d'erreur indiquant

column startdate doesn't exist 

J'ai essayé quelques autres alternatives aussi bien. Je ne suis pas sûr de ce que je fais mal S'il vous plaît aider.

+0

quelqu'un peut-il s'il vous plaît répondre au moins – Vikram

Répondre

0

Vous avez oublié de conclure des variables ayant citant $firstquery$, vient votre code Je suppose que vous vouliez smth comme:

create or replace function hrms.test2(startdate date) 
returns table(
employeeid int, 
col1 int, 
col2 INT, 
col3 int, 
col4 int) as 
$body$ 
SELECT * FROM hrms.crosstab(
    $firstquery$ 
    SELECT tms.employeeid,tms.today,count(tms.employeeid) as countid 
    FROM hrms.timesheet as tms 
    where dated>=$firstquery$|| quote_literal(startdate) ||$firstquery$ 
    and dated < $firstquery$||+ quote_literal(startdate)||$firstquery$::timestamp + '1 MONTH'::INTERVAL 
    group by tms.employeeid,tms.today $firstquery$, 
    $secquery$ select distinct tms.today 
    from hrms.timesheet as tms$secquery$ 
)as 
finalresult(employeeid int,leave int,present int,absent int, holiday int) 
$body$ 
LANGUAGE SQL; 
+0

Merci, il a travaillé après avoir enlevé le signe + dans la deuxième ligne quote_literal. Mais ça a vraiment marché, merci beaucoup ... – Vikram