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

  1. #21
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Récrivez votre requête comme ceci :
    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
     
    INSERT INTO table_test (org_id,
                            champ_test)
    SELECT fous.org_id, --ORG_id
           --package1.p1 (fous.vendor_site_id)
           (SELECT paym.payment_method_code
            FROM   ap_suppliers f 
                   JOIN ap_supplier_sites_all fs      
                      ON f.vendor_id = fs.vendor_id,
                   JOIN iby_external_payees_all payee 
                      ON f.party_id = payee.payee_party_id
                   JOIN iby_ext_party_pmt_mthds paym  
                      ON payee.ext_payee_id = paym.ext_pmt_party_id
                         AND fs.vendor_site_id = payee.supplier_site_id  --> jointure triangulaire !!!
             WHERE  paym.primary_flag = 'Y' 
                    AND  fs.vendor_site_id = fous.vendor_site_id) , 0)
    FROM   ap_supplier_sites_all fous
    WHERE  fous.vendor_site_id in (SELECT DISTINCT vendor_site_id_attribute1 
                                   FROM   table_test2_v);
    Vous verrez alors que vous avez fais une jointure circulaire....
    Est-ce bien cela que vous voulez.

    Évitez les jointures de merde avec le WHERE à la Oracle. l'opérateur JOIN existe depuis 1992 soit 32 ans !

    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/ * * * * *

  2. #22
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    Y a un souci de parenthèse dans cette requête non ?
    J'ai un souci au moment d'exécuter.

  3. #23
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    oui, j’avais l'intention de rajouter un COALESCE, mais il ne sert a rien et j'ai oublié de virer le :
    ,0 )

    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
    INSERT INTO table_test (org_id,
                            champ_test)
    SELECT fous.org_id, --ORG_id
           --package1.p1 (fous.vendor_site_id)
           (SELECT paym.payment_method_code
            FROM   ap_suppliers f 
                   JOIN ap_supplier_sites_all fs      
                      ON f.vendor_id = fs.vendor_id
                   JOIN iby_external_payees_all payee 
                      ON f.party_id = payee.payee_party_id
                   JOIN iby_ext_party_pmt_mthds paym  
                      ON payee.ext_payee_id = paym.ext_pmt_party_id
                         AND fs.vendor_site_id = payee.supplier_site_id  --> jointure triangulaire !!!
             WHERE  paym.primary_flag = 'Y' 
                    AND  fs.vendor_site_id = 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);
    Et il y avait une virgule en trop....

    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/ * * * * *

  4. #24
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    Merci

    Par contre, ligne 15, l'alias fous concerne ap_supplier_sites_all de la sous requête et on fait la jointure avec ap_supplier_sites_all de la requête principale ?

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    Parce qu'il ne peut connaître un alias fous, qui n'est pas indiqué dans la sous requête.

  6. #26
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    l'alias fous viens du FROM de la requête principale (externe)

    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/ * * * * *

  7. #27
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    ce n'est pas le nombre de lignes le problème.
    Tout à fait, cette erreur arrive quand il ya un décalage sur le nombre de valeurs entre la table et l'INSERT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE zztest(id number);
    INSERT INTO zztest VALUES (1, 2);
    Ici https://www.techonthenet.com/oracle/errors/ora00913.php je lis que :
    ORA-00913: too many values
    Cause
    You tried to execute a SQL statement that required two sets of equal values, but you entered more items in the second set than was in the first set.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  8. #28
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Évitez les jointures de merde avec le WHERE à la Oracle. l'opérateur JOIN existe depuis 1992 soit 32 ans !
    Non, 28 ans!
    Et comme Oracle existe depuis 1979, sa syntaxe des jointures a fait ses preuves
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  9. #29
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par NewJS Voir le message
    Parce qu'il ne peut connaître un alias fous, qui n'est pas indiqué dans la sous requête.

    Si ! Bien sur !!!!

    L'ordre d'écriture n'est pas l'ordre logique des opérations...
    Extrait d'un de mes cours :
    Nom : Ordre SELECT.jpg
Affichages : 145
Taille : 75,3 Ko

    La clause SELECT est l'avant dernière clause exécutée logiquement avant le ORDER BY.

    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/ * * * * *

  10. #30
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    Non, 28 ans!
    ho j'ai calculé à l'envers !!!!!

    Et comme Oracle existe depuis 1979, sa syntaxe des jointures a fait ses preuves
    Ho oui, la belle merde des jointures dans le WHERE ou la plupart des développeurs se plantent et font des produits cartésiens en pagaille !

    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/ * * * * *

  11. #31
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    [MODE APARTE par rapport au pb en cours]
    La syntaxe ANSI, super forte, pertinente, réfléchie, est bien celle où il y a le NATURAL JOIN? Hein, elle est belle cette jointure
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  12. #32
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Pour avancer un peu dans le pb : que renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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);
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  13. #33
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    [MODE APARTE par rapport au pb en cours]
    La syntaxe ANSI, super forte, pertinente, réfléchie, est bien celle où il y a le NATURAL JOIN? Hein, elle est belle cette jointure
    Figure toi qu'elle n'est plus dans la norme (deprecated depuis la version 2011 de la norme)....

    faut te lettre à la page.... Te recycler !



    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/ * * * * *

  14. #34
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    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 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Je n'arrive pas à trouver de source qui indique que le NATURAL JOIN a été déprécié. Le manuel SQL d'Oracle 19c ne l'indique pas en tout cas.

  15. #35
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Figure toi qu'elle n'est plus dans la norme (deprecated depuis la version 2011 de la norme)....
    Euh, Deprecated ne veut pas dire Obsolete, donc les développeurs peuvent toujours l'utiliser, à leurs risques et périls.
    Merci d'être plus précis dans tes remarques! Et puis, honnêtement, retourne plutôt sur le forum SQL Server, tu y seras plus utile qu'ici!
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  16. #36
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    Pour avancer un peu dans le pb : que renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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);

    Alors, cette requête s'effectue correctement avec succès. Je récupère 5000 lignes, avec mes 2 champs (org_id et package1.p1).

  17. #37
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Si tu dis que c'est OK, on élimine cette piste.

    Et est-ce que ta table n'aurais pas une ou des colonnes invisibles?
    Que renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select COLUMN_NAME, DATA_TYPE, COLUMN_ID, INTERNAL_COLUMN_ID, HIDDEN_COLUMN, VIRTUAL_COLUMN, IDENTITY_COLUMN, SENSITIVE_COLUMN 
    from DBA_TAB_COLS 
    where TABLE_NAME = 'TABLE_TEST' 
    order by INTERNAL_COLUMN_ID;
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  18. #38
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    Cette requête ne revoie aucune ligne
    à la condition WHERE table_name = 'table_test2_v'

    table_test2_v est une vue que j'ai crée

  19. #39
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    N'y a-t-il pas un trigger sur la table de destination ?

  20. #40
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    Non, aucun trigger.

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