0
votes

Comment déclarer une variable dans une instruction Oracle Select

J'ai cette requête Oracle SQL:

SELECT col1,
       col2,
       DECODE(
                 myVariable,
                 NULL,
                 0,
                 myVariable
             )
FROM mytable
group by col1, col2;


1 commentaires

Comment avez-vous l'intention d'utiliser cette requête? Les variables ne sont pas une chose SQL mais appartiennent au domaine du logiciel qui dirige la requête. La solution dépendra donc de la question de savoir si votre souhait d'exécuter la requête de manière interactive dans un client tel que SQL * Plus, dans le cadre d'une procédure stockée paramétré ou en tant que système de préparé JDBC (pour nommer que trois possibilités).


4 Réponses :


1
votes

Non, mais vous pouvez faire une sous-requête:

SELECT col1,
       col2,
       DECODE(
                 SUM(myColumn),
                 NULL,
                 0,
                 SUM(myColumn)
             )
FROM (
    SELECT 
        col1,
        col2,
        CASE WHEN col3='A' AND col4='+' THEN col5 ELSE 0 END myColumn   
        FROM mytable
     ) a
group by col1, col2;


0 commentaires

0
votes

Oui, vous pouvez utiliser des variables de substitution: xxx

Plus d'infos ici Variables de substitution Oracle SQL * Plus


1 commentaires

Je crois que l'intention est de traiter somme (cas lorsque Col3 = 'a' et col4 = '+' puis col5 0 extrémité) comme "variable" afin qu'il n'a pas besoin d'être répété, non pas passer en quantités arbitraires comme variables,



0
votes

vous pouvez simly utiliser coalesce () code> (ou nvl () code>) au lieu de décodage () code>.

SELECT col1,
       col2,
       coalesce(sum(CASE
                      WHEN col3 = 'A'
                           AND col4 = '+' THEN
                        col5
                      ELSE
                        0
                    END),
                0)
       FROM mytable
       GROUP BY col1,
                col2;


0 commentaires

0
votes

Vous pouvez utiliser coalesce () . Je pense que cela suffit: xxx

dans le fait réel, cette expression: xxx

ne peut pas retourner null in Une requête avec un groupe par - chaque groupe a au moins une ligne et le eleser garantit un 0 renvoie plutôt que null < /code >.

so, cela devrait également faire ce que vous voulez: xxx


0 commentaires