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 :

ALTER INDEX PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut ALTER INDEX PL/SQL
    Bonjour tout le monde,

    Voila, j'ai des index qui ont été créés dans le TABLESPACE USERS et j'aimerais les déplacer dans le TABLESPACE INDX en une seule fois.

    J'ai donc fait un peu de PL/SQL qui récupère tous les index et qui boucle pour les déplacer un par un.

    Le problème est que dans la boucle, quand je demande d'exécuter le Alter Index, il me retourne une erreur comme quoi il ne devrait pas y avoir d'Alter à cet endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    alter index C.index_name rebuild tablespace INDX ;
    *
    ERREUR à la ligne 9 :
    ORA-06550: Ligne 9, colonne 1 :
    PLS-00103: Symbole "ALTER" rencontré à la place d'un des symboles suivants :
    begin declare exit for goto if loop mod null pragma raise
    return select update while <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall
    <a single-quoted SQL string>

    Voila le code 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
    DECLARE 
     
    CURSOR C_INDEX IS (SELECT index_name FROM user_indexes WHERE table_name IN (select table_name from user_tables));
     
    BEGIN
     
    FOR C IN C_INDEX LOOP
     
    ALTER INDEX C.index_name REBUILD TABLESPACE INDX;
     
    END LOOP;
     
    END;
    Lorsque je lui demande d'afficher les requêtes, elles sont bien formées et tout.


    Au passage, j'aimerais avoir votre avis sur cette façon de faire car je ne suis pas certain que ce soit la meilleure façon de procéder.
    Est-il mieux, niveau sécurité et intégrité de la base, de procéder d'une autre façon ? Par exemple, les changer un par un ?


    Merci d'avance pour vos réponses et conseils

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Alter c'est du DDL. Pour le DDL employez le SQL Dynamique: DBMS_SQL ou mieux dans votre cas Execute immediate.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup pour votre réponse, j'ai trouvé la solution

    Pour information si ça peut servir à quelqu'un :

    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
    declare 
     
    CURSOR C_INDEX is (SELECT index_name FROM user_indexes WHERE table_name IN (select table_name from user_tables));
     
    requete VARCHAR2(512);
     
    begin
     
    for C in C_INDEX loop
     
    EXECUTE IMMEDIATE 'alter index '||C.index_name||' rebuild tablespace INDX';
     
     
    end loop;
     
    end;
    J'ai juste appelé EXECUTE IMMEDIATE avec la chaine de la requête.

    Merci encore
    Bonne journée

  4. #4
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    C'est merveilleux !
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

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

Discussions similaires

  1. ALTER INDEX / Type LOB
    Par segphault dans le forum Oracle
    Réponses: 3
    Dernier message: 09/02/2018, 11h35
  2. Indexes avec SQL Vb.net
    Par Astro8899 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/10/2006, 02h06
  3. Alter index dans un trigger
    Par dadg dans le forum Oracle
    Réponses: 8
    Dernier message: 09/09/2006, 19h37
  4. alter table et sql server
    Par soltani.slim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/01/2006, 16h24
  5. Modifier champ indexés en SQL
    Par jlvalentin dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/10/2005, 12h26

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