Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

लिक्विबेस स्क्रिप्ट ORA-01843 लौटाती है:मान्य माह नहीं

'02.01.15 12:00:00' एक तारीख नहीं है यह एक स्ट्रिंग है; यदि आप इसे DATE . में सम्मिलित करने का प्रयास कर रहे हैं डेटा प्रकार कॉलम तो Oracle इसके समकक्ष का उपयोग करके किसी तिथि पर डालने का प्रयास करेगा:

SELECT TO_DATE(
         '02.01.15 12:00:00',
         ( SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT' )
       ) as CHANGED
FROM   DUAL

तो अगर आपका NLS_DATE_FORMAT सत्र पैरामीटर आपकी स्ट्रिंग के प्रारूप से मेल नहीं खाता '02.01.15 12:00:00' तो यह एक अपवाद उठाएगा - और ऐसा तब हो रहा है जब आपको ORA-01843: not a valid month मिल रहा है। ।

सबसे अच्छा समाधान यह है कि स्ट्रिंग को स्पष्ट रूप से किसी तिथि पर डालने के लिए अपनी स्क्रिप्ट को संशोधित करें:

MERGE INTO A config
USING (
  SELECT 100 as id,
         TO_DATE( '02.01.15 12:00:00', 'DD.MM.YY HH24:MI:SS' ) as CHANGED,
         0 as DELETED,
         1 as B
  FROM   DUAL
) src ON (src.id = config.id)
WHEN NOT MATCHED THEN 
  INSERT(id,CHANGED, DELETED, B) VALUES(src.id, src.CHANGED, src.DELETED, src.B)
WHEN MATCHED THEN
  UPDATE SET config.B = src.B;

या टाइमस्टैम्प शाब्दिक का उपयोग करने के लिए:TIMESTAMP '2015-01-02 12:00:00'

लेकिन आप NLS_DATE_FORMAT . को बदलने के लिए लॉगऑन ट्रिगर भी बना सकते हैं सत्र पैरामीटर। इस कोड के चारों ओर ट्रिगर लपेटें:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YY HH24:MI:SS';

हालांकि, यह सभी निहित रूपांतरणों में उपयोग किए जाने वाले दिनांक प्रारूप को स्ट्रिंग से तिथि (और इसके विपरीत) में बदल देगा, इसलिए अन्य प्रश्नों को तोड़ सकता है जो ऐसे निहित रूपांतरणों पर भी निर्भर करते हैं। साथ ही, प्रत्येक उपयोगकर्ता अपने सत्र पैरामीटर को किसी भी समय बदल सकता है इसलिए लॉग ऑन पर इस डिफ़ॉल्ट को सेट करना उन पर निर्भर करता है कि वे अपने सत्र के दौरान इसे कभी नहीं बदलते।

[TL;DR] अंतर्निहित रूपांतरणों के लिए उपयोग किए गए प्रारूप मॉडल को संशोधित करने के बजाय डेटा प्रकारों के बीच निहित रूपांतरणों का उपयोग न करने के लिए अपनी स्क्रिप्ट को ठीक करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle प्रोटोकॉल एडेप्टर त्रुटि

  2. Oracle तालिका में डेटा को कैसे पुनर्स्थापित करें?

  3. ORA-00913 त्रुटि जब बहुत सारे IN स्टेटमेंट का उपयोग करते हैं

  4. sqldeveloper त्रुटि संदेश:नेटवर्क एडेप्टर कनेक्शन त्रुटि स्थापित नहीं कर सका

  5. प्रति आईडी मानों की संख्या गिनें