我很难从存储过程中产生正确的结果。我使用的是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应验')
预计业绩: CALL schema.stored_procedure( 'IT', '市场营销',“ ALL')
2014-05-19
Tone
+0
两件事情:1)你为什么结果转储到一个临时表,然后打开一个新的光标,并返回从临时表中的所有行(相只要在初始的'SELECT'上打开一个游标)? 2)这个过程实际上看起来可以被创建为一个视图,如果你加入到结果中,它可能会更好地使用优化器。显然,你不能为视图提供参数,但将它们作为连接条件/作为WHERE条款的一部分提供是很简单的。 –