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*Plus Oracle Discussion :

utiliser paramètre & dans une creation de tablespace


Sujet :

Sql*Plus Oracle

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut utiliser paramètre & dans une creation de tablespace
    Bonjour,
    Dans un script de création de base oracle 10g, j'ai du mal avec la syntaxe d'utilisation des paramètres :
    Sous session sqlplus, je lance un script comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL>@creation.sql ACE2014A
    Dans le script, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect "SYS"/<password dba>
    CREATE SMALLFILE TABLESPACE TB&1 DATAFILE '/oradata/&1users.dbf' ...
    Lors de l'exécution, le premier &1 est bien remplacé par ACE2014A, mais pour le second, le system me demande de saisir la valeur de 1users. Comment faire pour que sqlplus substitue &1users.dbf en ACE2014Ausers.dbf.
    Merci

  2. #2
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    En tatonnant, j'ai trouvé le workaround suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    connect "SYS"/<password dba>
    define tbfile = &1.users.dbf
    CREATE SMALLFILE TABLESPACE TB&1 DATAFILE '/oradata/&tbfile' ...
    Je n'ai pas compris pourquoi le premier . sert à concaténer et pas le deuxième. Je m'attendais à ce que la substitution me donne ACE2014Ausersdbf alors qu'elle me donne ACE2014Ausers.dbf, ce que j'attendais.

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Je pense que la discussion suivante devrait vous plaire

    http://www.developpez.net/forums/d11...command-spool/
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  4. #4
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    bien vu.
    Heureusement que j'ai trouvé par moi-même !
    Pour faire genre "je ne crée pas des posts inutiles", pourquoi le deuxième . de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define tbfile = &1.users.dbf
    n'est t'il pas pris comme symbole de concaténation ?
    Merci et encore désolé.

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    A part dire que c'est conçu comme ça, et que c'est plutôt une bonne idée à mon goût, je ne vois pas grand chose à ajouter (dit-il avant d'en mettre toute une tartine).

    Une variable de substitution commence par un &, et se termine quand certains caractères spéciaux sont rencontrés.
    Je ne connais pas la liste officielle de ces caractères qui sont considérés comme terminateurs (si quelqu'un a l'info, je suis preneur). Il y a bien entendu l'espace, mais aussi la parenthèse à titre d'exemple.

    Ici, SQL*Plus "comprend" spontanément que la parenthèse ne fait pas partie du nom de la variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select &fonction(ename) from scott.emp;
    Entrez une valeur pour fonction : upper
     
    ancien   1 : select &fonction(ename) from scott.emp
    nouveau   1 : select upper(ename) from scott.emp
    Il est parfois nécessaire d'utiliser un caractère de terminaison explicite pour dire où la variable s'arrête : c'est le point.
    A partir du &, le premier point trouvé a la fonction de terminateur (et sera perdu après remplacement de la variable par sa valeur), les autres points éventuels dans la même chaîne ont leur valeur normale de point, considéré comme un caractère quelconque.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select * from &schema.emp;
    Entrez une valeur pour schema : scott
     
    ancien   1 : select * from &schema.emp
    nouveau   1 : select * from scottemp
    select * from scottemp
                  *
    ERREUR à la ligne 1 :
    ORA-00942: Table ou vue inexistante
    Donc on fait intervenir un point complémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from &schema..emp;
    Entrez une valeur pour schema : scott
    ancien   1 : select * from &schema..emp
    nouveau   1 : select * from scott.emp
    C'est une bonne idée que de mettre le point de concaténation systématiquement, même en présence d'un terminateur implicite comme la parenthèse. Ça ne cause aucun problème et l'écriture est plus cohérente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select &fonction.(ename) from scott.emp;
    Entrez une valeur pour fonction : upper
    ancien   1 : select &fonction.(ename) from scott.emp
    nouveau   1 : select upper(ename) from scott.emp
    A vrai dire, le & n'est qu'une valeur par défaut ; le caractère qui identifie une variable de substitution est paramétrable par SET DEFINE.
    De même, le point n'est qu'une valeur par défaut ; le caractère qui marque la fin d'une variable de substitution est paramétrable par SET CONCAT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set define #
    set concat @
     
    select * from #schema@.emp;
    Entrez une valeur pour schema : scott
    ancien   1 : select * from #schema@.emp
    nouveau   1 : select * from scott.emp
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  6. #6
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Merci pour cette exposé avec exemples. C'est pratique de pouvoir changer le caractère de concaténation et celui pour identifier une variable.

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

Discussions similaires

  1. utilisation de getdate() dans une fonction ?
    Par devdev dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/03/2005, 17h40
  2. Utilisation de Getdate dans une fonction
    Par BaronSamdi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/11/2004, 10h12
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. [Applet]Utiliser plusieurs Applet dans une même classe
    Par BRAUKRIS dans le forum Applets
    Réponses: 5
    Dernier message: 11/06/2004, 15h27
  5. Réponses: 3
    Dernier message: 11/03/2004, 10h58

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