【发布时间】:2017-01-27 10:32:50
【问题描述】:
我使用postgresql 创建了这个存储过程:
create or replace Function GetTimeStamp(
IN t1 timestamp ,
IN t2 timestamp ,
Out reg_os Varchar(50),
Out customer_count int ,
Out t5 timestamp
) returns void AS $$
Begin
SELECT payment.payment_ts AS t , customer.registration_os As os ,count(Distinct customer.customer_id) As total
From customer inner join payment on customer.customer_id = payment.customer_id
Where Payment.payment_ts Between t1 And t2
Group By 1 , 2
Union
SELECT transfer.ts_created AS t , customer.registration_os As os, count(Distinct customer.customer_id) As total
From customer inner join account on customer.customer_id = account.customer_id inner join transfer on account.account_id = transfer.from_account
Where transfer.ts_created Between t1 And t2
Group By 1 , 2;
select t , os , total into t5 , reg_os , customer_count ;
End;
$$ LANGUAGE plpgsql;
我可以创建存储过程,但是当我使用此代码时:
SELECT GetTimeStamp('2016-01-01' ,'2017-01-01') OR
SELECT * FROM GetTimeStamp('2016-01-01' ,'2017-01-01')
它给了我一个错误:
查询没有结果数据的目的地提示:如果您想丢弃 SELECT 的结果,请改用 PERFORM
.
我在存储过程中使用 perform 而不是 select,它给了我
PERFORM 附近的语法错误。
我不知道我是否可以在两个执行查询之间使用联合。我怎样才能得到这个存储过程的结果?
【问题讨论】:
-
PERFROM 附近的语法错误 -- 它是
PERFORM,而不是 PERFROM -
@pozs 这是我编辑的错字
-
那么请给我们你用
PERFORM调用这个函数的代码示例。可能只是上面的语句中缺少一个分号。 -
@pozs PERFORM GetTimeStamp('2016-01-01' , '2017-01-01');它给了我:“PERFORM”处或附近的语法错误。我也尝试在存储过程中使用 perfom 而不是 sql,但它给了我同样的错误。
-
请在您的问题中提供整个上下文(通常很难从 cmets 读取代码)。
标签: sql postgresql stored-procedures