【问题标题】:Passing parameters in Teradata stored procedure (with Looping)在 Teradata 存储过程中传递参数(带循环)
【发布时间】:2017-10-07 14:20:52
【问题描述】:

我来自报告背景,第一次从 Teradata 构建多维数据集。我正在尝试由一个主 SP 填写我的事实表。主 SP 将调用子 SP。 Child SP 会是这样的——GetData(201704)。我必须在过去 13 个月内调用此 SP(可配置)。我创建了一个表格,用于获取带有 rownum 的月份,这将给我以下结果。

月份行号

201704 1

201703 2

201702 3

请在下面找到主 SP 的逻辑。如果有人可以帮助我语法。

创建 MasterSP(MonthCount)

开始

声明 Count 整数;

声明周期整数;

SET Count=MonthCount; --13 个月

循环开始 如果(我

SELECT Month From TimePeriod WHERE RowNum=Count

设置 获取数据(月)

计数=计数+1

循环结束

结束

【问题讨论】:

  • 创建过程的语法是:CREATE PROCEDURE [databasename.]procedurename。参数以 ` [ IN ] | 的形式给出输出 | INOUT } param-name data-type. Loop is LOOP ... END LOOP;` If is IF .... THEN .... END IF; Set is SET target = source; 你确实声明了 Period 但没有使用它。你没有声明I。 END 需要关闭 ;SET GetData(Month) 应该是 CALL GetData(Month)。如果您使用保留字 Count 作为变量名,则必须将其括在双引号中。
  • 你检查了 sql 语句 group by rollupgroup by cube 吗?

标签: sql loops stored-procedures teradata


【解决方案1】:

我已经设法在 SP 下创建并且工作正常。

Replace PROCEDURE MYDB.MasterLoad( MntCnt Integer)
BEGIN
Declare MonthCount integer;
Declare IniCount integer;
Declare PeriodNum Integer;

SET IniCount =1;
SET MonthCount = MntCnt;


WHILE IniCount <= MonthCount DO
   BEGIN 

SELECT AccountingReportMonthPeriodNum into PeriodNum  FROM MYDB.Monthly_Dim_TimePeriod WHERE Rownum=IniCount; 

CAll MYDB.MthCustFact_Test(PeriodNum) ;   


SET IniCount = IniCount+1;

   END;
END WHILE;



END;

【讨论】:

    猜你喜欢
    • 2015-07-16
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    相关资源
    最近更新 更多