2010-12-03 4 views
2

Y a-t-il un moyen de faire une déclaration CASE WHEN INTO?CASE WHEN ... INTO - Procédure stockée

Create or replace procedure example 
AS 
Variable1 varchar; 
Variable2 varchar; 

BEGIN 
    Select (CASE WHEN number = 1 THEN 
       This_thing INTO Variable1 
      ELSE 
       That_thing INTO Variable2) The_Other 
    FROM table; 
END; 

Répondre

5

Nous ne pouvons pas obtenir deux sorties d'une seule instruction CASE(). Le meilleur que vous pouvez réaliser est d'avoir deux appels distincts avec des conditions mutuellement exclusives:

create or replace procedure example as 

    variable1 t69.this_thing%type; 
    variable2 t69.that_thing%type; 

begin 
    select (case when whatever = 1 then 
       this_thing 
      else 
       null 
      end) 
     , (case when whatever != 1 then 
       that_thing 
      else 
       null 
      end) 
    into variable1, variable2   
    from t69; 
end; 
/
+0

(cas quand tout! = 1 alors null autre that_thing fin) –

+0

cette whould remplacer à tout = 1 –

2

Non, mais vous pouvez donc:

declare 
Variable1 varchar2(30); 
Variable2 varchar2(30); 
BEGIN 
    Select decode(dummy,'X','This_thing'), 
      decode(dummy,'X',null,'That_thing') 
    INTO Variable1,Variable2 
    FROM dual; 
END; 
+0

Merci, je vais essayer. – OneSneakyMofo

+0

Deux INTO clauses n'a pas une requête valide faire –

+0

OMG Ponies, yep-fixe, j'ai copié à tort de la requête d'origine –