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

PL/SQL Oracle Discussion :

Erreur ORA-00913: too many values


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Par défaut Erreur ORA-00913: too many values
    Bonjour à tous,
    j'ai une erreur de code sous Oracle que voici. En fait je crée une fonction dans un package, là voici. C'est une requête en PL/SQL.

    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
    24
    25
    function p1 ( p1_id in number) return varchar2
        is
        retour varchar2(80);
        begin
     
        retour := null;
     
        begin
        SELECT paym.payment_method_code
        INTO retour
        FROM ap_suppliers fou,
        ap_supplier_sites_all fous,
        iby_external_payees_all payee,
        iby_ext_party_pmt_mthds paym
        WHERE fou.party_id = payee.payee_party_id
        AND payee.ext_payee_id = paym.ext_pmt_party_id
        AND fous.vendor_site_id = p1_id
        AND fou.vendor_id = fous.vendor_id
        AND fous.vendor_site_id = payee.supplier_site_id
        AND paym.primary_flag = 'Y';
        exception
        when no_data_found then null;
        end;
        return retour;
        end;
    Ensuite, j'essaye d'insérer cette fonction dans une table pour me retourner une valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    insert into table_test (
        org_id,
        champ_test
        )
        select
        fous.org_id, --ORG_id
        package1.p1 (fous.vendor_site_id)
        from ap_supplier_sites_all fous
        where ( fous.vendor_site_id) in (select DISTINCT vendor_site_id_attribute1 from table_test2_v);
    Mais en retour j'ai une erreur. Pourtant j'ai bien 2 champs dans mon INSERT. Pourquoi il met cette erreur 'Too many values' ? Quelqu'un a une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into table_test (
        *
        ERROR at line 1:
        ORA-00913: too many values

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Es tu sûr que ta fonction ne retourne qu'au plus une ligne?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Par défaut
    Bonjour

    Non, je ne suis pas sûr et je soupçonne qu'elle retourne plusieurs lignes.
    Mais comment le savoir ? Sur SQLDeveloper par exemple

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    Votre erreur ne serait-elle pas ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in (select DISTINCT vendor_site_id_attribute1 from table_test2_v)
    Combien de valeurs sont retournées par cette sous-requête ?
    Optez pour un jointure !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Votre erreur ne serait-elle pas ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in (select DISTINCT vendor_site_id_attribute1 from table_test2_v)
    Combien de valeurs sont retournées par cette sous-requête ?
    Optez pour un jointure !

    A +
    Alors effectivement, je pense que la piste est plutôt à creuser ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select DISTINCT vendor_site_id_attribute1 from table_test2_v
    me retourne 25 lignes.

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Non ce n'est pas grave si la sous-requête ramène plusieurs lignes. Au fait le distinct ne sert à rien dans une sous-requête IN, dans ce cas il vaut mieux faire un EXISTS.
    Il faut y aller par étape. D'abord, enlever l'appel à la fonction. Est-ce que l'instruction suivante fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    insert into table_test (
        org_id,
        champ_test
        )
        select
        fous.org_id, --ORG_id
        'Test', --package1.p1 (fous.vendor_site_id)
        from ap_supplier_sites_all fous
        where exists (select 1 from table_test2_v v
                            where v.vendor_site_id_attribute1  = fous.vendor_site_id
                           );

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par NewJS Voir le message
    Alors effectivement, je pense que la piste est plutôt à creuser ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select DISTINCT vendor_site_id_attribute1 from table_test2_v
    me retourne 25 lignes.
    ce n'est pas le nombre de lignes le problème.

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Il faudrait joindre la requête de la fonction à la requête servant à l'insertion Déjà, pour savoir si c'est bien le problème, ajoute "or too_many_rows" à l'exception de ta fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    when no_data_found or too_many_rows then null;

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Par défaut
    Citation Envoyé par vanagreg Voir le message
    Il faudrait joindre la requête de la fonction à la requête servant à l'insertion Déjà, pour savoir si c'est bien le problème, ajoute "or too_many_rows" à l'exception de ta fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    when no_data_found or too_many_rows then null;

    Alors que je rajoute le too_many_rows, j'ai le message Package created No errors
    En revanche, la console ne me rend pas la main, donc pour quitter je fais un CTRL C et j'ai ce message

    Nom : error.PNG
Affichages : 3035
Taille : 4,9 Ko

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Tu dois annuler quand tu fais la requête d'insertion?

Discussions similaires

  1. Erreur du type "too many indices for array"
    Par scorpion291084 dans le forum Général Python
    Réponses: 2
    Dernier message: 27/09/2015, 17h14
  2. [Python 2.X] too many values to unpack
    Par Sh0rtY dans le forum Général Python
    Réponses: 5
    Dernier message: 07/07/2014, 19h22
  3. [MySQL] Erreur accès dossier : Too many levels of symbolic links
    Par Max_ASUS dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 27/05/2010, 09h59
  4. Réponses: 6
    Dernier message: 16/04/2010, 15h02
  5. Pgsql : erreur de connexion 'too many clients ...'
    Par petitmoosse dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/08/2003, 14h03

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