Partage
  • Partager sur Facebook
  • Partager sur Twitter

SELECT INTO dans une fonction plpgsql

SELECT INTO dans une fonction plpgsql

    23 mai 2018 à 14:54:36

    Bonjour à tous,

    Novice en SQL, j'ai le code suivant, que j'exécute sous PostgreSQL, mais le résultat retourné n'est pas celui escompté, à savoir une valeur numérique...

    -- Delete a function
    
    DROP FUNCTION hasStock(VARCHAR);
    
    -- Function hasStock
    
    CREATE FUNCTION hasStock(code VARCHAR) RETURNS INTEGER AS $$
    
    	DECLARE
    	
    		idstock "OpenConcerto48"."ARTICLE"."ID_STOCK"%TYPE;
    
    	BEGIN
    
    		SELECT INTO idstock "ID_STOCK" FROM "OpenConcerto48"."ARTICLE" WHERE "CODE" = code;
    		
    		RETURN idstock;
        
    	END;
        
    $$ LANGUAGE plpgsql;
    
    SELECT hasStock('RHP364XL') AS reponse;

    En effet, la ligne:

    SELECT hasStock('RHP364XL') AS reponse;

     Me renvoie "null"... alors que si je l'exécute hors de la fonction, la ligne:

    SELECT "ID_STOCK" FROM "OpenConcerto48"."ARTICLE" WHERE "CODE" = 'RHP364XL';

     PostgreSQL me renvoie une valeur numérique...

    Je ne saisi pas pourquoi la variable idstock ne prend pas la valeur du SELECT INTO... cela fait déjà quelques heures que je retourne le problème dans tous les sens mais je ne parviens pas à récupérer la valeur de retour du SELECT pour l'affecter à la variable idstock...

    Si quelqu'un a une idée... je suis preneur, merci d'avance, Vivien.

    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2018 à 17:12:00

      C'est parce que la bonne syntaxe est :

      SELECT "ID_STOCK" INTO idstock 


      Toutefois, avec un nom de fonction qui commence par "has" ta fonction devrait retourner un booléen.

      CREATE OR REPLACE FUNCTION hasStock(CHARACTER VARYING) RETURNS BOOL AS $func$
      DECLARE
      
      	code ALIAS FOR $1;
      	result BOOL;
      
      BEGIN
      
      	SELECT COUNT(*) > 0 INTO result
      	FROM "OpenConcerto48"."ARTICLE"
      	WHERE "CODE" = code;
      
      	RETURN result;
      
      END
      $func$ LANGUAGE 'plpgsql';





      • Partager sur Facebook
      • Partager sur Twitter

      SELECT INTO dans une fonction plpgsql

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown