我很難從存儲過程中產生正確的結果。我使用的是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')
兩件事情:1)你爲什麼結果轉儲到一個臨時表,然後打開一個新的光標,並返回從臨時表中的所有行(相只要在初始的'SELECT'上打開一個遊標)? 2)這個過程實際上看起來可以被創建爲一個視圖,如果你加入到結果中,它可能會更好地使用優化器。顯然,你不能爲視圖提供參數,但將它們作爲連接條件/作爲WHERE條款的一部分提供是很簡單的。 –