IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[PROCEDURE STOCKEE]Utilisation incorrecte de INSERT


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 29
    Points : 25
    Points
    25
    Par défaut [PROCEDURE STOCKEE]Utilisation incorrecte de INSERT
    J'aurais vraiment besoins de l'aide de quelqu'un car là je suis bloqué de chez bloqué J'ai des procédure complexes a écrire et déjà sur des trucs simples je reste coincé !

    Je voudrais faire une procedure stockée qui effectue par exemple un select d'une valeur max d'une table, stocke cette valeur dans une variable puis réalise un insert de cette valeur dans une table.
    Ca a l'air simple mais il y a quelque chose que je doit mal faire car j'ai le message suivant :
    "Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.".

    Voilà le bout de code incriminé :

    CREATE FUNCTION add_bidule()
    RETURNS INTEGER
    AS
    BEGIN
    declare @i_maxBidule INTEGER


    SELECT @i_maxBidule = MAX(noBidule)+1 FROM BIDULE;

    if (@i_maxBidule IS NULL) BEGIN
    set @i_maxBidule=1;
    END

    insert into bidule(noBidule) values (@i_maxBidule);


    return @i_maxBidule
    END
    Merci d'avance à tout ceux qui peuvent m'aider dans ma galère !!

  2. #2
    Membre averti
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Points : 398
    Points
    398
    Par défaut
    Slt,

    Le message d'erreur est pourtant parlant .. il n'est pas possible de faire d'insert dans une fonction UDF (seule exception les tables locales a la fonction) donc il faut que tu passes par une procedure stockee pour faire cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CREATE PROCEDURE add_bidule() 
     
    AS 
    BEGIN 
    declare @i_maxBidule INTEGER 
     
     
    SELECT @i_maxBidule = MAX(noBidule)+1 FROM BIDULE
     
    if (@i_maxBidule IS NULL) BEGIN 
    set @i_maxBidule=1
    END 
     
    insert into bidule(noBidule) values (@i_maxBidule); 
     
     
    return @i_maxBidule 
    END
    a+
    One ring to rule them all,
    One ring to find them,
    One ring to bring them all
    And in the darkness bind them.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Merci pour le tuyau. Transformer la fonction en procedure a marché, mais maintenant le problème que je rencontre c'est que je ne peux plus faire de requete : select maBase.dbo.add_bidule() as 'noBidule'

    J'aurais voulu pouvoir faire appel a une procedure stockée de cette façon car cela simplifie son utilisation depuis un language tiers !

    Je me suis dit que je pourrais créer une fonction qui fait appel a la procedure et qui me permettrait de recuperer les infos via un select comme avant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE  FUNCTION le_bidule()
    RETURNS INTEGER
    AS 
    BEGIN
    declare @i_maxBidule INTEGER
     
    execute @i_maxBidule=add_bidule;
     
    return @i_maxBidule
    END
    Malheureusement ca ne marche pas.... J'ai le message Seules les fonctions et les procédures étendues peuvent être exécutées à partir d'une fonction.

    C'est dingue le temps que l'on peut perdre sur des petits trucs comme ca !!! Sous interbase je l'avait fait en 2 coups de cuillère à pot

    Quelqu'un a une petite idée ???

  4. #4
    Membre averti
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Points : 398
    Points
    398
    Par défaut
    Slt,

    - ecrire une proc etendue (Visual C++)
    - utiliser ta proc dans le client, je vois pas pourquoi tu dis que les fonctions sont plus faciles a utiliser dans un langage tiers ?

    a+
    One ring to rule them all,
    One ring to find them,
    One ring to bring them all
    And in the darkness bind them.

  5. #5
    slc
    slc est déconnecté
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 36
    Points : 37
    Points
    37
    Par défaut
    select maBase.dbo.add_bidule() as 'noBidule'
    Hello,
    ca ne peut fonctionner que si add_bidule() est une fonction, et tu viens de la transformer en procedure.

    Il suffit d'appeler directement ta procedure stocké et de recuperer le resultat.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    En fait ce que je voulais faire c'est de créer une fonction qui fasse appel à la procédure afin de pouvoir faire un select sur la fonction.... La syntaxe que je voulais utiliser etait :
    select maBase.dbo.le_bidule() as 'noBidule'.

    C'est vrai je vous l'accorde, c'est un peu tordu ! C'est quand même un peu frustant de ne pas pouvoir le faire

    Je crois que je vais passer par une procedure étendue comme me l'a conseillé Gandalf.

    En tout cas merci pour le coup de main, c'est vraiment sympa.

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/05/2006, 19h36
  2. procedures stockees et insertion
    Par rlgrand dans le forum SQL
    Réponses: 2
    Dernier message: 03/05/2004, 14h49
  3. Réponses: 5
    Dernier message: 11/12/2003, 14h45
  4. procedure stockee et sql
    Par fred33 dans le forum SQL
    Réponses: 2
    Dernier message: 27/11/2003, 10h23
  5. [VB6] [ADO] Procedure stockée : spécifier les paramètres
    Par adepdoom dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo