Jump to content

Archived

This topic is now archived and is closed to further replies.

windu.2b

[Résolu][SQL][SQLite]length() et view

Recommended Posts

Bonjour à tous,

J'ai remarqué un comportement bizarre dans SQLite : lorsque je veux connaitre la longueur d'un champ d'une vue en SQL, j'obtiens une valeur NULL ! La même commande sur la table à l'origine de la vue me donne le bon résultat.

Je peux donc certes obtenir la valeur que je recherche, mais cela m'oblige à "court-circuiter" ma vue pour atteindre la table, ce que j'aimerais éviter.

Y a-t-il donc quelque chose de particulier à faire ? Ou bien est-ce une fonctionnalité manquante (ou un bug) de SQLite ?

Pour info, voici la requête SQL utilisée:

/*
* Requête sur la vue
*/
SELECT LENGTH(oid)
FROM V_products

/*
* Requête sur la table
*/
SELECT LENGTH(oid)
FROM product

Voici la structure de la table :

CREATE TABLE PRODUCT(OID VARCHAR(36) NOT NULL PRIMARY KEY,
NAME VARCHAR(50) NOT NULL,
POIDS FLOAT NOT NULL,
XUNIT VARCHAR(36),
XCATEGORY VARCHAR(36),
CONSTRAINT SYS_FK_50 FOREIGN KEY(XUNIT) REFERENCES UNIT(OID),
CONSTRAINT SYS_FK_51 FOREIGN KEY(XCATEGORY) REFERENCES CATEGORY(OID))

Share this post


Link to post
Share on other sites

C'est un peu étonnant puisque la fonction s'exécute après la récupération de la donnée et ne sait pas si la donnée vient d'une vue ou d'une table à la base :inpactitude2:

J'imagine que tu as vérifié si tu lis la valeur de la colonne de ta vue, que ça te renvoie bien une chaîne non vide ?

Share this post


Link to post
Share on other sites
C'est un peu étonnant puisque la fonction s'exécute après la récupération de la donnée et ne sait pas si la donnée vient d'une vue ou d'une table à la base :inpactitude2:

J'imagine que tu as vérifié si tu lis la valeur de la colonne de ta vue, que ça te renvoie bien une chaîne non vide ?

Oui, bien sûr ! La lecture fonctionne parfaitement bien dans la vue, sinon je me serais, anéfé, posé la question de la construction de ma vue ;)

Share this post


Link to post
Share on other sites

J'ai fait le test rapidement avec la dernière version de SQLite :

sqlite> CREATE TABLE test ( colText varchar(50) NOT NULL );
sqlite> insert into test (colText) values ('blablabla');
sqlite> select * from test;
blablabla
sqlite> create view testView as
  ...> select colText AS text FROM test;
sqlite> select * from testView;
blablabla
sqlite> select LENGTH(colText) from test;
9
sqlite> select LENGTH(text) from testView;
9

Tout fonctionne bien :]

Share this post


Link to post
Share on other sites

Je viens de re-tester, mais au lieu de passer par "sqliteman", je suis passé par l'extension firefox "SQLite Manager"...

Et ben, c'est bon ! Je pense donc que ça vient de SQliteman qui est basé sur une vieille version de sqlite.

Je clos le topic, merci de ton aide :transpi:

Share this post


Link to post
Share on other sites

×
×
  • Create New...