Aller au contenu

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


windu.2b

Messages recommandés

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))

Lien vers le commentaire
Partager sur d’autres 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 ?

Lien vers le commentaire
Partager sur d’autres 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 ;)

Lien vers le commentaire
Partager sur d’autres 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 :]

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...