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 Firebird Discussion :

Comment copier une table dans la meme BDD


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 118
    Points
    118
    Par défaut Comment copier une table dans la meme BDD
    Bonjour,

    je veux copier une table 'stock' en 'stock2014',
    j'ai essayé ce qui suit : select table stock2014 as select * from stock ça ne marche,
    Besoin d'aide, marci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Stock2014
    SELECT * FROM STOCK
    Mais je ne suis pas sur que cela soit très judicieux. Pourquoi ne pas faire une VUE ?
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 118
    Points
    118
    Par défaut
    Merci Olivier,

    j'ai juste oublié de préciser que la table stock2014 n'existe pas,
    donc : - il s'agit d'un création avec copie du contenu de la table source.

    et comment procede-t-on si on veut parametrer le nom de la table de destination ( stock2014 dans notre cas) .

    Merci.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 067
    Points
    41 067
    Billets dans le blog
    62
    Par défaut
    Bonjour ,

    Voir du coté de Execute Statement

    -faire la création de la table dans ce bloc
    - puis faire la copie
    le tout dans une procédure
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 118
    Points
    118
    Par défaut
    Bonjour,

    pourquoi le mot clé [ AS ] dans la commande
    CREATE TABLE stock2014 AS stock
    n'est pas reconnu

    est-ce que c'est à cause de mon SGBD ?
    j'utilise : D7, FIREBIRD,ADO

    j'ai eu le meme problème avec [LIKE] à la place de [AS]

    Merci.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Cette petite lecture aurait été la bienvenue ...

    la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE Stoc2014 (
       col_1 Type?,
       col_2 type?,
      ....);
    Merci d'ajouter un sur les tags qui vous ont aidé

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 118
    Points
    118
    Par défaut
    Merci beaucoups les amis,

    Je crois que je vais utiliser la méthode standard présentée par Olivier en continuant de chercher une solution pour les fénéants comme moi qui consiste à copier une table existante avec une ou deux lignes seulement

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 067
    Points
    41 067
    Billets dans le blog
    62
    Par défaut
    Bonjour ,

    une procédure faisant l'ensemble n'est pas très compliquée , l'exécution ensuite ne nécessite qu'une ligne

    voici un truc presque correct
    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
    SET TERM ^ ;
    CREATE PROCEDURE COPYTABLESTOCK (
        ANNEE Smallint )
    AS
    DECLARE VARIABLE TABLENAME VARCHAR(10);
     DECLARE VARIABLE EXISTE SMALLINT;
    BEGIN
     TABLENAME='STOCK'||ANNEE;
     select count(*) from RDB$RELATIONS where RDB$RELATION_NAME = :TABLENAME INTO EXISTE;
     IF (EXISTE=0) THEN
      BEGIN
       EXECUTE STATEMENT 'CREATE TABLE '||TABLENAME||
    '(
      NUMERO Integer NOT NULL,
      NOM Varchar(40),
      QTE   Integer,
      DATE_ENTREE DATE)';
     END 
     EXECUTE STATEMENT 'INSERT INTO '||TABLENAME||' SELECT * FROM STOCK WHERE EXTRACT(YEAR FROM DATE_ENTREE)='||ANNEE;  
    END^
    SET TERM ; ^
    [EDIT] Finalement non , cela ne fonctionne pas car la table n'est pas créée
    par contre en faisant la création de la table dans une première procédure, puis dans une deuxième la copie c'est

    donc
    deux lignes seulement
    après création des procédures
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 118
    Points
    118
    Par défaut
    Bonjour Serge,

    Vous dites
    [une procédure faisant l'ensemble n'est pas très compliquée]

    Je vous assure que c'est du chinois pour moi malgré mes huit ans de programmation avec delphi et les tables Paradox, je vous prie de bien vouloir
    essayer de nous comprendre pour nous aider au mieux.

    Je vais essayer d'étudier la solution que vous avez posté et vous tiendrai au courant.

    Merci de votre compréhension et A+

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 067
    Points
    41 067
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Voilà une solution faite sur une de mes BDD , en soit cela n'a valeur que d'exemple

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    /******************** TABLES ********************/
     
    CREATE TABLE SOCIETE
    (
      NUMERO Integer NOT NULL,
      NOM Varchar(40),
      ALIAS_BASE Varchar(15),
      ALIAS_MVTS Varchar(15),
      DEFAULT_USER Varchar(15),
      DEFAULT_PWD Varchar(8),
      COULEUR Integer,
      ALIAS_BDEBASE Varchar(15),
      ALIAS_BDEMVTS Varchar(15),
      CONSTRAINT PK_SOCIETE_1 PRIMARY KEY (NUMERO)
    );
     
    /******************** TRIGGERS ********************/
     
    SET TERM ^ ;
    CREATE TRIGGER SOCIETE_BI FOR SOCIETE ACTIVE
    BEFORE INSERT POSITION 0
    AS
    DECLARE VARIABLE tmp DECIMAL(18,0);
    BEGIN
      IF (NEW.NUMERO IS NULL) THEN
        NEW.NUMERO = GEN_ID(GEN_SOCIETE_ID, 1);
      ELSE
      BEGIN
        tmp = GEN_ID(GEN_SOCIETE_ID, 0);
        if (tmp < new.NUMERO) then
          tmp = GEN_ID(GEN_SOCIETE_ID, new.NUMERO-tmp);
      END
    END^
    SET TERM ; ^
     
     
    /******************** PROCEDURES ********************/
     
    SET TERM ^ ;
    CREATE PROCEDURE CREERTABLE (ANNEE Smallint )
    AS
    DECLARE VARIABLE TABLENAME VARCHAR(60);
    DECLARE VARIABLE EXISTE SMALLINT;
    BEGIN
    TABLENAME='SOCIETE'||ANNEE;
     select count(*) from RDB$RELATIONS where RDB$RELATION_NAME = :TABLENAME INTO EXISTE;
     IF (EXISTE=0) THEN   // Table Inexistante
    EXECUTE STATEMENT 'CREATE TABLE SOCIETE'||ANNEE||
    '(
      NUMERO Integer NOT NULL,
      NOM Varchar(40),
      ALIAS_BASE Varchar(15),
      ALIAS_MVTS Varchar(15),
      DEFAULT_USER Varchar(15),
      DEFAULT_PWD Varchar(8),
      COULEUR Integer,
      ALIAS_BDEBASE Varchar(15),
      ALIAS_BDEMVTS Varchar(15)
    )';
    END^
    SET TERM ; ^
     
     
    SET TERM ^ ;
    CREATE PROCEDURE COPIERTABLE (ANNEE Smallint )
    AS
    DECLARE VARIABLE TABLENAME VARCHAR(60);
    BEGIN
     TABLENAME='SOCIETE'||ANNEE;
     EXECUTE STATEMENT 'INSERT INTO '||TABLENAME||' SELECT * FROM SOCIETE';  
    END^
    SET TERM ; ^
    et donc via delphi l'on a besoin que de faire appel a 2 procédures , voire un Script .
    Quand j'ai écrit
    une procédure faisant l'ensemble n'est pas très compliquée
    j'aurais du écrire une procédure faisant l'ensemble ne semble pas très compliquée (après tout le PSQL n'est qu'un petit programme avec un langage simple) . Suite à mon test (voir le [EDIT] de mon dernier post je me suis heurté au problème de la transaction , à savoir : on ne peut pas faire un COMMIT (@makowski j'ai fini par le comprendre )dans une procédure (et donc la table n'est pas encore créée au moment de l'insertion des données)

    je vous assure que c'est du chinois pour moi malgré mes huit ans de programmation avec delphi et les tables Paradox,
    comme déjà indiqué , le SQL est un langage à apprendre avec la même application qu'un langage tel Pascal , C++ etc .... Firebird n'est pas "juste" (pardonnez moi le terme) une zone de stockage de données.
    Pour ce qui est de Delphi et de sa connexion avec Firebird ne vous cantonnez pas au BDE (qui je le rappelle est obsolète) osez UIB,Firedac si possible, voire les ZEOSDBO etc... et vous apprendrez vite à ne manipuler que des Querys (et donc le SQL) plutôt que des tables
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/05/2012, 15h19
  2. Réponses: 11
    Dernier message: 20/03/2007, 00h13
  3. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21
  4. Comment Copier une table dans un fichier?
    Par thx2003 dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/12/2003, 12h09
  5. Comment copier une image dans le presse papier.
    Par cprogil dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2003, 15h54

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