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

SQL Oracle Discussion :

Changer une valeur obtenue en tuple en int


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut Changer une valeur obtenue en tuple en int
    Bonjour à tous,

    Après des recherches sur le net, je suis tombé sur un bon tuto, mais le problème est au moment ou je le suis, j'ai des erreurs alors que je suis bien le tuto a priori alors si je pourrais avoir un peu aide s'il vous plaît.

    Donc voici mon code:

    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
    19
    20
    21
    22
    23
    import cx_Oracle
     
     
    def stock_usi_to_stock_orli(taille,quantite,article,couleur):
     
     sql= "select :quantite from prod_stok where code_lieu = 'USI' and  code_art_com = :article and code_colm = :couleur and typ_enrg = '0'"
     sql1= "update prod_stok set "+ taille +"= :quantite where code_art_com = :article and code_colm=:couleur and code_lieu= 'USI' and typ_enrg = '0'"
     try:
         with cx_Oracle.connect("user", "pass", "base_de_donnée") as connection:
             with connection.cursor() as cursor:
                 cursor.execute(sql,[quantite,article,couleur])
                 connection.commit()
                 cursor.rowfactory = int(quantite)
                 quantite_initial = cursor.fetchone()
                 quantie_vendu = quantite_initial - quantite
                 cursor.execute(sql1,[quantie_vendu,article,couleur])
                 connection.commit()
     except cx_Oracle.Error as error:
         print(error)
     
     
    if __name__ == '__main__':
        stock_usi_to_stock_orli("qte_3",40,"184","300")

    Et voici l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "T:\CILEA\Exportation des vendus\beta_de_connexion.py", line 23, in <module>
        stock_usi_to_stock_orli("qte_3",40,"184","300")
      File "T:\CILEA\Exportation des vendus\beta_de_connexion.py", line 14, in stock_usi_to_stock_orli
        quantite_initial = cursor.fetchone()
    TypeError: 'int' object is not callable
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par azaouali Voir le message
    Après des recherches sur le net, je suis tombé sur un bon tuto
    Lequel ?

    Quelques remarques :
    1/ C'est la variable :quantite de la fonction qui est sélectionnée et non la valeur d'une colonne
    2/ donc quantie_vendu vaudra 0 : attention le nom est mal orthographié et en plus devrait probablement plutôt être quantite_restante, la quantite vendue étant probablement plutôt :quantite.
    3/ Le SELECT est inutile, il faut faire directement l'UPDATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update prod_stok set qte_3 = qte_3 - :quantite 
     where code_art_com = :article 
       and code_colm = :couleur 
       and code_lieu = 'USI' 
       and typ_enrg  = '0';

  3. #3
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Tout d'abord merci d'avoir répondu,

    Pour le tuto c'est celui-ci :https://cx-oracle.readthedocs.io/en/...execution.html et je vois donc le fait directement dans le update.

  4. #4
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    J'ai modifier mon SQL et le problème maintenant c'est qu'il bug il ne répond plus je doit kill le programme.

    Voila ce que j'ai modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql= "update prod_stok set "+ taille +"="+taille+" - :quantite where code_art_com = :article and code_colm=:couleur and code_lieu= 'USI' and typ_enrg = '0'"

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Poster le code complet

  6. #6
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Encore Merci

    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
    import cx_Oracle
     
     
    def stock_usi_to_stock_orli(taille,quantite,article,couleur):
     
     sql= "update prod_stok set "+ taille +" = "+taille+" - :quantite where code_art_com = :article and code_colm=:couleur and code_lieu= 'USI' and typ_enrg = '0'"
     try:
         with cx_Oracle.connect("user", "pass", "base_de_donnée") as connection:
             with connection.cursor() as cursor:
                 cursor.execute(sql,[quantite,article,couleur])
                 connection.commit()
     except cx_Oracle.Error as error:
         print(error)
     
    if __name__ == '__main__':
        stock_usi_to_stock_orli("qte_3","8","184","300")

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Essayez déjà sans concaténation, et sans mettre de quote autour des nombres et avec 3 quotes autour de la requête comme dans le tuto sur les bind variables :

    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
    import cx_Oracle
     
     
    def stock_usi_to_stock_orli(quantite,article,couleur):
     
     sql= """update prod_stok set qte_3 = qte_3 - :quantite where code_art_com = :article and code_colm=:couleur and code_lieu= 'USI' and typ_enrg = '0'"""
     try:
         with cx_Oracle.connect("user", "pass", "base_de_donnée") as connection:
             with connection.cursor() as cursor:
                 cursor.execute(sql,[quantite,article,couleur])
                 connection.commit()
     except cx_Oracle.Error as error:
         print(error)
     
    if __name__ == '__main__':
        stock_usi_to_stock_orli(8,184,300)

  8. #8
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    J'ai cette erreur ORA-01722: Nombre non valide et pour la taille c'est vraiment important de l'avoir car j'ai plusieurs QTE

  9. #9
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    C'est mon SQL développeur qui à fait bug la base de donnée ça fonctionne.

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    ORA-01722: Nombre non valide
    Vérifiez les types de données des colonnes de la table prod_stok et mettez des quotes autours des colonnes en varchar2 et pas de quote autour des colonnes de type number.

    D'abord il faut réussir à exécuter sans concaténation, puis vous pourrez vous y atteler.

  11. #11
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    C'est bon avec la concaténation, c'étais juste mon SQL développeur qui m'a fait bug

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

Discussions similaires

  1. bouton radio qui font changer une valeur
    Par keithsize dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/06/2009, 08h42
  2. Réponses: 5
    Dernier message: 11/10/2007, 12h29
  3. [Débutant] Changer une valeur dans une autre base
    Par Cyphen dans le forum Access
    Réponses: 5
    Dernier message: 18/08/2006, 15h26
  4. Changer une valeur d'une carte réseau
    Par Mut dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 21/02/2006, 16h25
  5. [formulaire] changer une valeur affichée
    Par soad dans le forum Access
    Réponses: 8
    Dernier message: 11/10/2005, 18h59

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