Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 20h46   #1
Invité de passage
 
Inscription : février 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 4
Points : 0
Points : 0
Par défaut manipulation de tableaux créés à partir d'alias de type

bonjour,
je suis entrain de manipuler des alias de types, mais je rencontre une difficulté pour manipuler les tableaux créés à base de ces alias;
j'ai fait copier/coller d'un exemple équivalent à la manipulation que
j'essaie de faire, si quelqu'un pourrait m'indiquer ce que je ne fais pas
bien dans la deuxième requêtes ci dessous cela me serait d'une grande aide,
je vous remercie pour votre réaction.

Code :
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
/*************************
THIS WORKS OK
*************************/
CREATE TABLE test_string_array (
a int PRIMARY KEY,
b varchar(10)[]
);
 
INSERT INTO test_string_array VALUES (1,'{"(1.0,2.0)","(3.1,4.2)"}');
SELECT * FROM test_string_array
 
/*************************
THIS DOES NOT WORKS
*************************/
 
CREATE TYPE string_array AS (val varchar(10)[]) ;
 
CREATE TABLE test_string_array_1 (
a int PRIMARY KEY,
b string_array
);
 
INSERT INTO test_string_array_1 VALUES (1,'{"(1.0,2.0)","(3.1,4.2)"}');
 
ERREUR: enregistrement litéral invalide : « {"(1.0,2.0)","(3.1,4.2)"} »
LINE 1: INSERT INTO test_string_array_1 VALUES (1,'{"(1.0,2.0)","(3....
^
DETAIL: Parenthèse gauche manquante
wildcat82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 22h32   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
peut-être comme ça:
Code :
INSERT INTO test_string_array_1 VALUES (1, '( "{(1.0,2.0),(3.1,4.2)}" )');
mais je dois dire que ne suis pas certain de ce que tu veux mettre exactement dans le tableau de chaines.
En version plus simple pour y mettre 2 chaines ab et cd:
Code :
INSERT INTO test_string_array_1 VALUES (1, '( "{ab,cd}" )');
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 23h10   #3
Invité de passage
 
Inscription : février 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 4
Points : 0
Points : 0
@estofolio:

merci de votre réaction,
la requête telle que vous l'écrivez passe effectivement mais ne me renvoie un résultat différent du resultat de la partie "THIS WORK" qui correspond à ce que je voudrais faire mais d'une autre façon à savoir: créer une table dont l'une des colonnes est un alias de type représentant un tableau de chaines de caractères quelconques.
en fait c'est un test tout bête qui au cas où il réussit devrait m'aider à résoudre un autre problème.
voilà: je crée un alias de type, par exemple:
Code :
CREATE TYPE string_array AS (val varchar(10)[]) ;
et j'utilise cette alias de type comme type de colonne de la table:
Code :
1
2
3
4
CREATE TABLE test_string_array_1 (
a int PRIMARY KEY,
b string_array
);
ceci devrait pouvoir marcher étant donné que ça marche si la colonne b de ma table est déclarée comme varchar(10)[] directement.
Code :
INSERT INTO test_string_array_1 VALUES (1,'{"(1.0,2.0)","(3.1,4.2)"}');
tout ce que je fais en fait (du moins je crois) c'est de donner un autre nom au type varchar(10)[]

mon problème est peut être lié au fonctionnement du create type. peut être que les types ainsi créés par des alias sont automatiquement des "RECORD" indépendamment des types de bases
wildcat82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 15h41   #4
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
Citation:
Envoyé par wildcat82 Voir le message
tout ce que je fais en fait (du moins je crois) c'est de donner un autre nom au type varchar(10)[]

mon problème est peut être lié au fonctionnement du create type. peut être que les types ainsi créés par des alias sont automatiquement des "RECORD" indépendamment des types de bases
Effectivement il n'y a pas d'alias de type en postgresql. La commande CREATE TYPE AS (..) créé un type composite.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 21h43   #5
Invité de passage
 
Inscription : février 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 4
Points : 0
Points : 0
merci @esfolio;
voilà ce qui devrait m'aider à ne pas perdre du temps à chercher une solution qui n'existe pas, je pense que je vais me contenter d'utiliser mon type tel quel - sans passer par de alias - et de déclarer des colonnes de type array pour les tables qui en ont besoin.
wildcat82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h02.


 
 
 
 
Partenaires

Hébergement Web