0
votes

Quel paramètre de base de données dois-je enregistrer dans Oracle pour le paramètre de date par défaut dans une fonction?

J'ai le problème étrange suivant. J'ai la procédure suivante, dans un package: xxx pré>

l'application qui appelle cette procédure utilise "oracledb": "^ 4.2.0". Ce qui suit est un journal de deviser (formaté pour faciliter la lecture): p> xxx pré>

Les éléments suivants, se produisent en production (formaté pour faciliter la lecture): P>

DBService: calling stored procedure 'BEGIN pkg.createSmth(
:p_param1, 
:p_param2, 
:p_param3, 
:p_param4, 
:p_description, 
:p_last_login, 
:o_sid, 
:p_ret, 
:p_mess); END;' 

with bindings 

[{"dir":3001,"type":2001,"val":"test"},
{"dir":3001,"type":2010,"val":37},
{"dir":3001,"type":2001,"val":"01/06/2020"},
{"dir":3001,"type":2001,"val":"03/06/2020"},
{"dir":3001,"type":2001,"val":"test233"},
{"dir":3001,"type":2001,"val":"admin"},
{"dir":3003,"type":2010},
{"dir":3003,"type":2010},
{"dir":3003,"type":2001}]

pkg.createSmth: get connection - 0 ms
Unexpected DB error
undefined: Error: ORA-01843: not a valid month
ORA-06512: at line 1, trace: Error: ORA-01843: not a valid month
ORA-06512: at line 1


0 commentaires

3 Réponses :


0
votes

Il peut y avoir de nombreuses causes pour cette erreur. Il peut être nls_date_format paramètre ou un paramètre de format dans to_date fonction par exemple.

Vous devez analyser le code pour résoudre ce problème.

Exemple: xxx


0 commentaires

0
votes

au lieu de 01/06/2020 Utilisez

  • to_date ('01 / 06/2020 ',' dd / mm / aaaa ') ou

  • date '2020-06-01' - Date littéral

    Pour connaître le format de date utilisé par votre session / base de données, vous pouvez utiliser le nls_session_parameters ou nls_database_parameters vue (nom de paramètre: nls_date_format ). Mais il est recommandé d'utiliser le format spécifique avec to_date ou date littéral comme nls_date_format peut changer au fil du temps et votre code ne fonctionnera pas.


2 commentaires

Ne pas utiliser l'un d'eux dans Dev et cela fonctionne comme il devrait


Ensuite, dans Dev, nls_date_format que votre session utilise doit être DD / mm / aaaa qui est différent de prod que vous êtes donc confronté au problème de Prod. C'est pourquoi il est recommandé de toujours utiliser le to_date ou date littéral pour créer la date indiquée dans la réponse.



1
votes

Si la procédure s'attend à ce que date code>, ne fournissez pas une chaîne forte>.

Ceci est chaîne: p>

date '2020-06-01'
to_date('01/06/2020', 'dd/mm/yyyy')


1 commentaires

Le paramètre de procédure est de date. Oracle-dB type est une chaîne. Pour la mappage entre types de nœuds-oracledb et types Oracle, veuillez cocher oracle.github.io/node-oracledb/doc/...