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] Création d'un script conditionnel


Sujet :

Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut [PL/SQL] Création d'un script conditionnel
    Bonjour à tous et à toutes,

    Je voudrais créer un script conditionnel :

    je voudrais vérfier au debut si l'objet existe ou pas dans la base en cours ( de style select 1 from nom_table)
    si l'objet est inexistant donc, je lance le script de sa création sinon je fais rien.

    comment je puisse intercepter l'erreur de non existant de l'objet et le manipuler dans un script sql?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il faut le faire en PL/SQL avec EXECUTE IMMEDIATE pour la création de la table. Une recherche dans le forum devrait t'apporter l'aide nécessaire, le sujet ayant déjà été évoqué

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    Oui je suis d'accord sur cette solution avec le sql dynamique (EXECUTE IMMEDIATE)
    mais que je voudrais savoir exactement un script dans ce sens :

    SET ECHO ON

    SELECT 1 FROM NOM_TABLE

    IF (lecture de l'erreur dans le buffer?) THEN
    Script de création de la table

    SET ECHO OFF

    Sans passer pas sql dynamique

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ce n'est pas possible... le SQL est un langage d'extraction de donnée (SQL = Structured query language) pas un langage procédurale

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    Vous avez raison!

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    en sqlplus, il y a quelques astuces ...

    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
     
    SQL> whenever sqlerror exit failure
    SQL>  exec if (1=2) then raise_application_error(-20001,'erreur'); end if
     
    PL/SQL procedure successfully completed.
     
    SQL>  @script
    ...
    SQL> 
    SQL> exec if (1=1) then raise_application_error(-20001,'erreur'); end if
    BEGIN if (1=1) then raise_application_error(-20001,'erreur'); end if; END;
     
    *
    ERROR at line 1:
    ORA-20001: erreur
    ORA-06512: at line 1
     
     
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
    With the Partitioning, Real Application Clusters, OLAP and Data Mining options
    ou alors

    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
     
    SQL> whenever sqlerror exit failure
    SQL> var dummy number
    SQL> exec select 1 into :dummy from emp where empno=7934
     
    PL/SQL procedure successfully completed.
     
    SQL> @script
    ...
    SQL>
    SQL> exec select 1 into :dummy from emp where empno=9999
    BEGIN select 1 into :dummy from emp where empno=9999; END;
     
    *
    ERROR at line 1:
    ORA-01403: no data found
    ORA-06512: at line 1
     
     
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
    With the Partitioning, Real Application Clusters, OLAP and Data Mining options
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> col script new_v script nopri
    SQL> select decode(1,1,'/tmp/monscript') script from dual;
     
     
     
    SQL> @&script
    ...

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    mais c'est du PL/SQL pas du SQL

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par Fred_D
    mais c'est du PL/SQL pas du SQL
    whenever, col et @ sont des commandes sqlplus. Il est vrai que les deux premières solutions contiennent un test en PL/SQL, mais pas la troisième.

    Lorsque le select decode retourne nul, alors ne fait rien.

    J'adore les commandes qui ne font rien

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    capilotracté est le mot qui me vient naturellement à l'esprit

  10. #10
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    un exemple d'algorythme similaire en sqlplus (10.2) est

    $ORACLE_HOME/rdbms/admin/catupgrd.sql

    en fonction de la version de ton instance, le script exécuté sera différent, mais d'une manière transparente pour l'utilisateur. ça me semble correspondre au besoin de fab, non?

  11. #11
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    exact

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    Bien vu

    Merci beaucoup

Discussions similaires

  1. Erreur SQL lors de l'exécution du script
    Par mahieus dans le forum Sql Developer
    Réponses: 0
    Dernier message: 17/06/2015, 11h49
  2. Réponses: 2
    Dernier message: 27/04/2014, 14h41
  3. SQL 2005 Suppression de base par script
    Par geof dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/04/2008, 15h10
  4. Réponses: 8
    Dernier message: 10/04/2008, 10h11
  5. [PL/SQL] [9i] Ordre Create dans un Script
    Par ftrifiro dans le forum Oracle
    Réponses: 14
    Dernier message: 22/05/2006, 12h01

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