Teradata 具有可变表和输入参数的存储过程

Teradata 具有可变表和输入参数的存储过程,teradata,Teradata,我试图创建一个存储过程,将一些数据收集到各种(2)易失性表中,然后根据来自这些易失性表的查询输出结果集 我想我已经正确地编写了语法,但是当我调用这个过程(调用msn_test('2018-05-01','510001'))时,它返回0个结果。我相信这与分析变量的方式有关 下面是我的表结构示例 create VOLATILE TABLE customer_count ( cust_no varchar(10) ,ordercount int ,rpt_mth date ) on commit

我试图创建一个存储过程,将一些数据收集到各种(2)易失性表中,然后根据来自这些易失性表的查询输出结果集

我想我已经正确地编写了语法,但是当我调用这个过程(调用msn_test('2018-05-01','510001'))时,它返回0个结果。我相信这与分析变量的方式有关

下面是我的表结构示例

create VOLATILE TABLE  customer_count  (
cust_no varchar(10)
,ordercount int
,rpt_mth date
)  on commit preserve rows;

INSERT INTO customer_count VALUES ('510001', '502','2018-05-01');
INSERT INTO customer_count VALUES ('510002', '2','2018-05-01');
INSERT INTO customer_count VALUES ('510003', '100','2018-05-01');

create VOLATILE TABLE  customer_sales  (
cust_no varchar(10)
,revenue decimal(15,2)
,rpt_mth date
)  on commit preserve rows;

INSERT INTO customer_sales VALUES ('510001', '12500','2018-05-01');
INSERT INTO customer_sales VALUES ('510002', '5000','2018-05-01');
INSERT INTO customer_sales VALUES ('510003', '1400','2018-05-01');
这是我正在执行的存储过程-

create VOLATILE TABLE tmp_one (cust_no varchar(30), ordercount int)  on commit preserve rows;
create VOLATILE TABLE tmp_two (cust_no varchar(30),revenue decimal(18,2)) on commit preserve rows;

replace procedure msn_test (
IN mth date,
IN cust varchar(30))
dynamic result sets 1

begin

declare rslt cursor with return only for

select
a.cust_no, a.ordercount, b.revenue
from tmp_one a
join tmp_two b
    on a.cust_no = b.cust_no
    ;


call dbc.SysExecSQL('create VOLATILE TABLE tmp_one as (select cust_no, sum(ordercount) ordercount   from customer_count where cust_no = ''' || cust || ''' and rpt_mth = cast(''' || mth ||''' as date)    group by 1) with data on commit preserve rows');
call dbc.SysExecSQL('create VOLATILE TABLE tmp_two as (select cust_no, sum(revenue) revenue             from customer_sales  where cust_no = ''' || cust || ''' and rpt_mth = cast(''' || mth ||''' as date)    group by 1) with data on commit preserve rows');


open rslt;
 drop table tmp_one;
 drop table tmp_two;
end;
  drop table tmp_one;
drop table tmp_two;
最后,这里是我的sp调用,但我没有得到任何结果

call msn_test ('2018-05-01','510001')
这是我想要的结果-

    cust_no ordercount  revenue
 1  510001  502         12,500.00

我错过了什么?提前谢谢。

我认为您需要在声明游标(在进程内)之前创建volatile表。虽然我真的不明白为什么这里需要可变表。当我运行代码时,我得到了你想要的结果:)@Andrew这个场景大大简化了。显然,从一张小桌子复制到另一张桌子是没有意义的。这只是我需要聚合多个数据表,然后在最后合并的一个例子。@dnoeth这与不同的版本或其他东西有什么关系吗?我真的只是运行了这个,我没有得到任何结果。。。。。我不明白。不要放下VTs,检查数据并在通话后运行Select。您的会话模式是Teradata还是ANSI?