Question

Je l'ai utilisé ce type de fonctionnalité avant mais il est MSSQL, mais ne peut l'obtenir à travailler pour Oracle, des conseils?

DECLARE
    MY_TBL NUMBER := 1;

BEGIN

    IF(MY_TBL > 0) THEN
        SELECT * FROM MY_TBL ORDER BY MY_TBL_ID DESC;
    END IF;
END;

Ce que je voudrais avoir est une variable de drapeau à zéro ou un, si l'on affiche les résultats, si nul saut. Ceci est juste un script simple d'avoir toutes mes tables et des instructions select dans un drapeau ans de script ceux que je besoin de voir les résultats. Donc, si j'ai 5 tables j'utiliser la fonction ELSIF pour ajouter plus comme ceci

DECLARE
    MY_TBL1 NUMBER := 1;
    MY_TBL2 NUMBER := 1;

BEGIN

    IF(MY_TBL1 > 0) THEN
        SELECT * FROM MY_TBL1 ORDER BY MY_TBL1_ID DESC;
    ELSIF(MY_TBL2 > 0) THEN
        SELECT * FROM MY_TBL2 ORDER BY MY_TBL2_ID DESC;
    END IF;
END;

et ainsi de suite. Merci pour toute aide à ce sujet, --Phill

EDIT:

Voici ce que j'ai:

VAR result_set REFCURSOR

DECLARE
   my_tbl_1 NUMBER := 1;
   my_tbl_2 NUMBER := 0;
   my_tbl_3 NUMBER := 0;
BEGIN
   IF (my_tbl_1 > 0)
   THEN
      BEGIN
         OPEN :result_set FOR
            SELECT   *
                FROM my_tbl_1
            ORDER BY my_tbl_1_id DESC;
      END;
   ELSIF (my_tbl_2 > 0)
   THEN
      BEGIN
         OPEN :result_set FOR
            SELECT   *
                FROM my_tbl_2
            ORDER BY my_tbl_2_id DESC;
      END;
   ELSIF (my_tbl_3 > 0)
   THEN
      BEGIN
         OPEN :result_set FOR
            SELECT   *
                FROM my_tbl_3
            ORDER BY my_tbl_3_id DESC;
      END;
   END IF;
END;

PRINT result_set
Était-ce utile?

La solution

Oracle ne peut pas revenir resultsets d'une procédure stockée comme SQL Server fait.

Déclarer les variables curseur côté cliend et d'y revenir:

Pour afficher un curseur dans SQL*Plus:

VAR cur1 REFCURSOR

DECLARE
        MY_TBL1 NUMBER := 1;
        MY_TBL2 NUMBER := 1;

BEGIN
        IF(MY_TBL1 > 0) THEN
        BEGIN
                OPEN :cur1
                FOR
                SELECT  *
                FROM    MY_TBL1
                ORDER BY
                        MY_TBL1_ID DESC;
        END;
        ELSIF (MY_TBL2 > 0) THEN
        BEGIN
                OPEN :cur1
                FOR
                SELECT  *
                FROM    MY_TBL2
                ORDER   BY
                        MY_TBL2_ID DESC;
        END;
        END IF;
END;
/

PRINT cur
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top