client compilé avec OCI: 10.2.0.4.0
serveur: Oracle9i Édition Enterprise version 9.2.0.4.0Oracle OCI: requête avec champ Date
La requête est problématique:
SELECT CODIGO FROM LOG WHERE TEL = :telnumber AND DATE_PROC = '05-JUL-08'
Table Description:
SQL>describe LOG;
TEL NOT NULL VARCHAR2(15)
CODIGO NOT NULL VARCHAR2(20)
DATE_PROC NOT NULL DATE
aussi simple que cela peut paraître, lorsqu'il est exécuté directement sur le serveur avec SQLPlus, il renvoie un résultat, mais lorsqu'il est exécuté à partir de l'application qui utilise OCI, cette requête renvoie OCI_NO_DATA
toujours. Au début, la valeur date était aussi un espace réservé, mais j'ai découvert que même donner un littéral comme '05-JUL-08'
ne fonctionnait pas. J'ai essayé ce qui suit:
- J'ai essayé les bases: l'interrogation du DB du client fonctionne. Il est celui qui me donne du mal
Ce qui suit fonctionne:
SELECT CODIGO FROM LOG WHERE TEL = :telnumber
exécution
ALTER SESSION SET NLS_DATE_FORMAT="DD-MM-YYYY";
avant que la requête dans le serveur et le client. Même résultat: le serveur renvoie les données, clientOCI_NO_DATA
- Essayé de changer le format
DATE_PROC
, en combinant ceci avec l'utilisation deTO_DATE()
. Même résultat - Recherché, recherché, recherché. Pas de réponse
Je suis un peu désespérée pour trouver une réponse, j'apprécierais toute aide et je pourrais fournir autant de détails que nécessaire. Merci.
--- Plus d'infos ---
update log set DATE_PROC = TO_DATE('20080705162918', 'YYYYMMDDHH24MISS') where CODIGO='BancoOne';
J'ai essayé différentes combinaisons en utilisant trunc() et "modifier session de jeu NLS_DATE_FORMAT" ... et voici ce que je reçois:
SELECT CODIGO FROM LOG WHERE TEL = 11223344 AND DATE_PROC = TO_DATE('20080705162918', 'YYYYMMDDHH24MISS');
dans le serveur: retour: "BancoOne" (bonne valeur)
Dans l'application OCI: Retours OCI_NO_DATA
SELECT CODIGO FROM LOG WHERE TEL = 11223344 AND trunc(DATE_PROC) = TO_DATE('20080705', 'YYYYMMDD');
dans le serveur: retour: « BancoOne »
Dans l'application OCI: Revient « BancoOne »
Ainsi, le point est, pourquoi l'application OCI variant les résultats si les deux accèdent au même serveur DB? En outre, pour clarifier le but de l'application OCI: il a une requête à configurer par l'utilisateur. L'idée est que l'utilisateur adaptera la requête pour qu'elle corresponde au champ Date présent dans la base de données de destination, c'est pourquoi je ne devrais pas inclure les instructions "alter set set nls_date_format" dans mon code, car je ne connaîtrais pas le format de date. De cette façon, je veux offrir de la flexibilité à l'utilisateur, et ne pas compter sur des formats de date spécifiques. Est-ce que ça a du sens? Aucune suggestion?
Salut Vincent, La première version de la requête utilisait la fonction TO_DATE(). C'est comme ça que les problèmes ont commencé. Il n'y aura pas de lettres dans la date de mon code, mais je ne connaîtrai pas non plus le format spécifique de la date. J'ai ajouté d'autres informations dans la question sur le fonctionnement de l'application OCI. – AntonioHerraizS