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.
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.
Mais je ne suis pas sur que cela soit très judicieux. Pourquoi ne pas faire une VUE ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INSERT INTO Stock2014 SELECT * FROM STOCK
Merci d'ajouter un sur les tags qui vous ont aidé
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.
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
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.
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é
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
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
[EDIT] Finalement non , cela ne fonctionne pas car la table n'est pas créée
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 ; ^
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
après création des procéduresdeux lignes seulement
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
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+
Bonjour,
Voilà une solution faite sur une de mes BDD , en soit cela n'a valeur que d'exemple
et donc via delphi l'on a besoin que de faire appel a 2 procédures , voire un Script .
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 ; ^
Quand j'ai écritj'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)une procédure faisant l'ensemble n'est pas très compliquée
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.je vous assure que c'est du chinois pour moi malgré mes huit ans de programmation avec delphi et les tables Paradox,
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager