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

Oracle Discussion :

[PL/SQL] SELECT INTO avec type TABLE


Sujet :

Oracle

  1. #1
    Nouveau membre du Club

    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 31
    Points
    31
    Par défaut [PL/SQL] SELECT INTO avec type TABLE
    Bonjour,

    j'ai un petit problème avec une requete 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
    26
    27
    28
    29
    30
    31
    32
     
    BEGIN
    DECLARE
      noCurrencyValue  EXCEPTION ;
      TYPE errorLine IS RECORD (REPORTING_ENTITY_ID 	TEMP_COPS_UPLOAD_AUTO.REPORTING_ENTITY_ID%TYPE,
    			    LEGAL_ENTITY_ID 		TEMP_COPS_UPLOAD_AUTO.LEGAL_ENTITY_ID%TYPE,
    			    OPERATING_ENTITY_ID 	TEMP_COPS_UPLOAD_AUTO.OPERATING_ENTITY_ID%TYPE,
    			    BILL_TO_CUSTOMER_ID 	TEMP_COPS_UPLOAD_AUTO.BILL_TO_CUSTOMER_ID%TYPE,
    			    SHIP_TO_CUSTOMER_ID 	TEMP_COPS_UPLOAD_AUTO.SHIP_TO_CUSTOMER_ID%TYPE,
    			    FINAL_DEST_CUSTOMER_ID 	TEMP_COPS_UPLOAD_AUTO.FINAL_DEST_CUSTOMER_ID%TYPE,
    			    ITEM_ID 			TEMP_COPS_UPLOAD_AUTO.ITEM_ID%TYPE) ;
      TYPE errorTable IS TABLE OF errorLine ;
     
      BEGIN
     
    SELECT REPORTING_ENTITY_ID, 
                LEGAL_ENTITY_ID,    
                OPERATING_ENTITY_ID,       
                BILL_TO_CUSTOMER_ID,
                SHIP_TO_CUSTOMER_ID,
                FINAL_DEST_CUSTOMER_ID,
                ITEM_ID 
    	 INTO errorTable
         FROM TEMP_COPS_UPLOAD_AUTO 
         WHERE CURRENCY_ID IS NULL ;
     
     
         IF	(errorTable IS NOT NULL) THEN
      		RAISE noCurrencyValue ;
         END IF ;
       END ;	 
    END;
    A la compilation, je recois l'erreur

    PLS-00321: expression 'ERRORLINE' is inappropriate as the left hand side of an assignment statement

    sur la ligne INTO errorTable

    D'ou vient l'erreur ? d'une mauvaise utilisation du type TABLE ?

    Merci pour toutes réponses.

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Nouveau membre du Club

    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 31
    Points
    31
    Par défaut
    Désolé d'avoir oublié la version des outils.
    - Oracle database 10g
    - Toad 8.0.0.47

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    En version 10g, il est possible d'utiliser bulk collect.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    declare
      type tab  is table of maTable%rowtype index by binary_integer;
      maVar tab;
    begin
       select *
       bulk collect into maVar
       from maTable;
    end;
    /
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Même sans BULK COLLECT il est toujours possible de fetcher dans un record

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Declare
      Cursor cur is select * from EMP ;
      var     cur%type ;
    Begin
      Open cur ;
      Loop
         Fetch cur into var ;
         ...
         dbms_output.put_line ( var.ename ) ;
      End loop ;
      Close cur ;
      ...
    End ;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par SheikYerbouti
    Même sans BULK COLLECT il est toujours possible de fetcher dans un record
    Sauf que dans ton exemple tu ne charges pas le résultat de ta requête dans un tableau
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    c'est vrai
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #8
    Nouveau membre du Club

    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 31
    Points
    31
    Par défaut
    Merci à vous 2 pour votre réponse

  9. #9
    Nouveau membre du Club

    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par plaineR
    Sauf que dans ton exemple tu ne charges pas le résultat de ta requête dans un tableau

    Pourquoi n'est-ce pas le cas ? maVar tab est bien de type Table pourtant.

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par Kaejar
    Pourquoi n'est-ce pas le cas ? maVar tab est bien de type Table pourtant.
    Je répondais à SheikYerbouti
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  11. #11
    Nouveau membre du Club

    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par plaineR
    Je répondais à SheikYerbouti
    Oui, mais c'est bien de son exemple que je parle . Il déclare bien une var de type Table ???

  12. #12
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par Kaejar
    Oui, mais c'est bien de son exemple que je parle . Il déclare bien une var de type Table ???
    non, elle est de type cur%type, donc en fait un record simple.
    pour votre exemple, il faudrait une table d'enregistrements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type TYP_TAB_REC is table of cur%type index by binary_integer ;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  13. #13
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Non, il déclare une variable du cur%type (même type que ce que retourne son curseur dans un fetch) :

    Déclarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cursor monCurs is select col1, col2 from maTable;
    maVar monCurs%rowtype;
    revient à quelque chose près que déclarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type monType is record (col1 varchar2(10), col2 number);
    cursor monCurs is select col1, col2 from maTable;
    maVar monType;
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  14. #14
    Nouveau membre du Club

    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Points : 31
    Points
    31
    Par défaut
    super, merci beaucoup

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

Discussions similaires

  1. [Requête SQL] - Select count avec plusieurs tables
    Par Pithonnette dans le forum SQL
    Réponses: 7
    Dernier message: 25/06/2009, 19h19
  2. Select into avec "Identity"
    Par Crotte dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/03/2007, 11h14
  3. [SQL S2K] Pb avec type de données
    Par Tankian dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/06/2006, 10h16
  4. [ORACLE9I, PL/SQL] Select into
    Par NPortmann dans le forum Oracle
    Réponses: 7
    Dernier message: 10/11/2005, 10h12
  5. [SQL] jointure externe avec 3 tables, comment faire ....
    Par grumbok dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2005, 16h13

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