C语言db2存储过程,带存储过程的DB2存储过程

我很难从存储过程中产生正确的结果。我使用的是db2数据库,我有3个输入参数division,department,project。我的通话声明看起来像这样。带存储过程的DB2存储过程

CALL schema.stored_procedure ('IT', 'MARKETING', 'ONLINE FULFILLMENT')

我需要产生的结果将显示数据的行,当指定了第三个参数或具有的项目名称的值(如从上方“Online_fulfillment”的例子),并显示所有的第三个参数的项目名称为“ALL”时的结果(以下示例为'ALL')。

CALL schema.stored_procedure ('IT', 'MARKETING', 'ALL')

我下面的查询只返回列标题名称,没有结果,我在调试时遇到了麻烦。这是我目前的存储过程。

CREATE PROCEDURE schema.stored_procedure

(IN in_DIVISION_NAME VARCHAR(200)

,IN in_DEPARTMENT_NAME VARCHAR(20)

,IN in_PROJECT_NAME VARCHAR(400)

)

DYNAMIC RESULT SETS 1

BEGIN

IF (in_PROJECT_NAME = 'ALL') THEN

BEGIN

DECLARE GLOBAL TEMPORARY TABLE TEMP_DW_1

(DIM_PROJECT_ID INT

,PROJECT_NAME VARCHAR (400)

,DIM_DEPARTMENT_ID INT

,DEPARTMENT_NAME VARCHAR(100)

,DIVISION_NAME VARCHAR(100)

) ON COMMIT DELETE ROWS NOT LOGGED WITH REPLACE;

END;

INSERT INTO SESSION.TEMP_DW_1 (DIM_PROJECT_ID, PROJECT_NAME, DIM_DEPARTMENT_ID,

DEPARTMENT_NAME,DIVISION_NAME)

SELECT DISTINCT DJ.DIM_PROJECT_ID

,PROJECT_NAME

,DIM_DEPARTMENT_ID

,DEPARTMENT_NAME

,DIVISION_NAME

FROM SCHEMA.FACT_TABLE

WHERE DEPARTMENT_NAME = in_DEPARTMENT_NAME

AND DIVISION_NAME = in_DIVISION_NAME;

BEGIN

DECLARE exitCursor CURSOR WITH RETURN FOR

SELECT *

FROM SESSION.TEMP_DW_1;

OPEN exitCursor;

END;

END

预计业绩: CALL schema.stored_procedure( 'IT', '市场营销', 'ONLINE应验')

Y5V6Z.png 预计业绩: CALL schema.stored_procedure( 'IT', '市场营销',“ ALL')

RQirH.png

2014-05-19

Tone

+0

两件事情:1)你为什么结果转储到一个临时表,然后打开一个新的光标,并返回从临时表中的所有行(相只要在初始的'SELECT'上打开一个游标)? 2)这个过程实际上看起来可以被创建为一个视图,如果你加入到结果中,它可能会更好地使用优化器。显然,你不能为视图提供参数,但将它们作为连接条件/作为WHERE条款的一部分提供是很简单的。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值