【发布时间】:2014-05-19 19:57:44
【问题描述】:
我很难从我的存储过程中产生正确的结果。我正在使用 db2 数据库,我有 3 个输入参数部门、部门、项目。我的调用语句如下所示。
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', 'MARKETING', 'ONLINE FULFILLMENT') 预期成绩: CALL schema.stored_procedure ('IT', 'MARKETING', 'ALL')
【问题讨论】:
-
两件事:1)为什么要将结果转储到临时表中,然后打开一个新游标并返回临时表中的所有行(而不是仅在初始 @987654326 上打开游标@)? 2) 这个过程实际上似乎可以创建为视图,在您加入结果的情况下,这可能会更好地使用优化器。显然,您无法为视图提供参数,但将它们作为连接条件/作为
WHERE子句的一部分提供是微不足道的。
标签: sql stored-procedures db2