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 :

Equivalent Oracle du IF EXIST


Sujet :

PL/SQL Oracle

  1. #1
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut Equivalent Oracle du IF EXIST
    Bonjour,

    Je cherche à faire un équivalent du IF EXIST pour Oracle pour mon script de création de table/sequence/trigger mais je ne trouve pas comment faire pour chacun de mes éléments.

    Voici mon script de base :

    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
     
    Drop table FULL_PURGE_TABLES;
     
    Create Table DBDWIRDUSR.FULL_PURGE_TABLES(
        ID_TABLE number(10),
        TABLE_NAME varchar(30 char),
        NB_LIGNE_ENTREE number(30),
        NB_LIGNE_SORTIE number(30),
        NB_LIGNE_PURGE number(30),
        ETAPE number(1),
        DT_DEB date,
        DT_FIN date
    );
     
    Alter Table DBDWIRDUSR.FULL_PURGE_TABLES ADD(
    CONSTRAINT PK_PURGE_FULL PRIMARY KEY (ID_TABLE));
     
    CREATE SEQUENCE PURGE_SEQUENCE;
     
    CREATE OR REPLACE TRIGGER PURGE_ON_INSERT
      BEFORE INSERT ON FULL_PURGE_TABLES
      FOR EACH ROW
    BEGIN
      SELECT PURGE_SEQUENCE.nextval
      INTO :new.ID_TABLE
      FROM dual;
    END;
    /
     
    commit;
    J'ai cru comprendre que pour la table il fallait chercher dans all_tables si la table existe ou non. Mais pour le reste je ne sais pas comment faire.
    Si quelqu'un à des propositions je suis preneur.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 132
    Par défaut
    J'utilise une fonction pour vérifier l'existence d'une table, vue, séquence, etc
    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
    create  or replace
    function    TABLE_EXISTS
                    (   p_Table_Name    varchar2
                    ,   p_Table_Type    varchar2    := 'TABLE'
                    ,   p_Table_Owner   varchar2    := null
                    )
        return  boolean
    is
        n_Exists    integer := 0;
    begin
        select  count(0)
        into    n_Exists
        from    ALL_CATALOG
        where   TABLE_NAME  = upper(trim(p_Table_Name))
            and TABLE_TYPE  = coalesce(upper(trim(p_Table_Type)), 'TABLE')
            and OWNER       = coalesce(upper(trim(p_Table_Owner)), user)
        ;
        return  (n_Exists > 0);
    end;/
    Il ne manque plus grand'chose pour la transformer en procédure qui supprime l'objet s'il existe
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut
    C'est parfait, merci bcp

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 962
    Par défaut
    Pour exécuter des scripts de manière conditionnelle, sans passer par des procédures/fonctions,
    il est possible de spooler les résultats dans un fichier que l'on exécute ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    spool '/tmp/script.sql'
    set head off
    select /* csv */ case when exists(select 1  from all_catalog where table_name = 'TARGET_TABLE' and table_type = 'TARGET_TYPE' and owner = 'TARGET_OWNER')
        then 'drop TARGET_TYPE TARGET_TABLE ;' end as s from dual ;
    spool off 
    @/tmp/script.sql
    les TARGET pouvant évidemment être des variables de scripts
    (éventuellement initialisées par d'autres query en utilisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    column COLNAME_FROM_QUERY new_value SQL_VAR_NAME
    select ...
    ;
    /
    Et pour la compilation conditionnelle de PL/SQL (dans un SPC ou un BDY par exemple) :
    dans le script SQL précédant l'exécution du code PL/SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER SESSION SET PLSQL_CCFlags = 'PLSLQ_VAR_NAME:&SQL_VAR_NAME'
    Et dans le PL/SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $IF $$PLSLQ_VAR_NAME = CONDITION $THEN   
     
    $END

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

Discussions similaires

  1. Equivalent Oracle de replicate de sql Server
    Par Cssm976 dans le forum SQL
    Réponses: 3
    Dernier message: 30/08/2007, 09h26
  2. Réponses: 5
    Dernier message: 09/08/2007, 13h23
  3. Equivalent Oracle pour sysforeignkeys
    Par binoo dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2007, 17h21
  4. [Oracle 10i] Fonction Exists et Tableaux
    Par ftrifiro dans le forum SQL
    Réponses: 2
    Dernier message: 31/01/2007, 15h50
  5. Equivalence oracle du db_owner de SQL Server
    Par axel-erator dans le forum Oracle
    Réponses: 2
    Dernier message: 29/06/2006, 11h21

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