J'ai du mal à obtenir les résultats corrects de ma procédure stockée. J'utilise une base de données db2 et j'ai 3 paramètres d'entrée division, département, projet. Ma déclaration d'appel ressemble à ceci.Procédure stockée DB2 avec paramètres
CALL schema.stored_procedure ('IT', 'MARKETING', 'ONLINE FULFILLMENT')
J'ai besoin de produire des résultats qui affichera la ligne de données lorsque le troisième paramètre est spécifié ou a une valeur pour le nom du projet (à partir de l'exemple ci-dessus « Online_fulfillment ») et pour afficher toutes les résultats lorsque le troisième paramètre a une valeur 'ALL' pour le nom du projet (selon l'exemple ci-dessous 'ALL'). Ma requête ci-dessous ne renvoie actuellement que les noms d'en-tête de colonne sans résultat et je rencontre des problèmes pour le déboguer. Voici ma procédure stockée actuelle.
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
RESULTATS ATTENDUS: CALL schema.stored_procedure ('IT', 'marketing', 'SATISFACTION EN LIGNE) RÉSULTATS ATTENDUS: CALL schema.stored_procedure ('IT', 'marketing',' ALL ')
Deux choses: 1) Pourquoi Dump-vous les résultats dans une table temporaire, puis ouvrez un nouveau curseur et retourner toutes les lignes de la table temporaire (par opposition juste en ouvrant un curseur sur le 'SELECT 'initial)? 2) Cette procédure semble en fait susceptible d'être créée en tant que vue, ce qui serait probablement plus à même d'utiliser l'optimiseur dans les cas où vous vous joignez aux résultats. Évidemment, vous ne pouvez pas fournir de paramètres pour la vue, mais il serait trivial de les fournir en tant que condition de jointure/dans le cadre d'une clause WHERE. –