2017-01-13 3 views
5

मैं एक त्रुटि जो नीचे जब मैं क्वेरी तैयारी कर रहा हूँ देखा जा सकता है हो रही है निष्पादित किया जाता है:एसक्यूएल: एसक्यूएल क्वेरी की तैयारी विफल हो जाती है। लेकिन जब किया मैन्युअल

SQL-ERR:Preparation of INSERT Query Failed: Ora-Err: -1756 ORA-01756: 
quoted string not properly terminated 

क्वेरी इस प्रकार है:

EXEC SQL declare INSDTA STATEMENT; 
EXEC SQL PREPARE INSDTA FROM :stmt; 
if(sqlca.sqlcode < 0) 
{ 
    DEBUG_LOG("SQL-ERR:Preparation of INSERT Query Failed: Ora-Err: %d %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc); 
    DEBUG_LOG("The Query is: %s\n", insertQuery); 
    return PREPARATION_FAILURE; 
} 

और से क्वेरी लॉग फ़ाइल है:

INSERT INTO TABLENAME 
VALUES (
    '00000001', 
    '00004467', 
    '0', 
    'R56565', 
    '03404395', 
    '20110601', 
    '999', 
    '87685785', 
    '2017-01-10-23.05.26.000000', 
    'KRMAR', 
    'KRMAR', 
    '77898878', 
    '03', 
    '00000001', 
    'U', 
    '01', 
    '1', 
    '87685785', 
    'R56565', 
    '89878988', 
    'cde', 
    'Andr\351', 
    '[email protected]', 
    '01192966', 
    'HGJF', 
    '00000000', 
    '', 
    '900429', 
    '1', 
    '98989897', 
    '', 
    'Aargau/Solothurn (CIC)', 
    'VCD', 
    'RB9', 
    'VCD', 
    'Observer' 
    ) 

यदि मैं इसे मैन्युअल रूप से निष्पादित करता हूं, तो डेटा डाला जा रहा है।

लेकिन प्रोग्रामिक रूप से यह ऐसी कई पंक्तियों में विफल रहा है।

ध्यान दें कि सम्मिलित क्वेरी के लिए इनपुट टेक्स्ट में é, ü जैसे विशेष वर्ण शामिल हैं।

इसके अलावा, एक ही कार्यक्रम विकास प्रणाली पर पूरी तरह से काम कर रहा है। लेकिन उत्पादन पर, यह असफल रहा है।

मैन्युअल सम्मिलन उत्पादन पर ठीक से काम कर रहा है।

समस्या क्या हो सकती है? कोई विन्यास समस्या?

अग्रिम धन्यवाद।

+1

क्या आप रिक्त तारों के बजाय शून्य की कोशिश कर सकते हैं? आमतौर पर एक उद्धरण से बचने के लिए ओरेकल ओएस के लिए दो उद्धरण। – Walfrat

+0

ठीक है, कोशिश करेंगे। क्या आपको कोई अन्य समस्या है? – NJMR

+0

ऐसा नहीं लगता है। – Walfrat

उत्तर

3

\ से बचने वाला चरित्र है, मुझे लगता है कि त्रुटि 'Andr\351' से आता है जो शायद 'André' होना चाहिए।

यह जांचने के लिए कि क्या यह वास्तविक कारण है, अपनी क्वेरी से बैकस्लैश वर्ण हटाएं।

+0

लेकिन वही क्वेरी स्थानीय सिस्टम पर काम कर रही है। स्थानीय देव प्रणाली में लॉग को जांचने दें कि विशेष वर्णों का इलाज कैसे किया जा रहा है। इस पर आप पर वापस आ जाएगा। उत्तर के लिए धन्यवाद। – NJMR

+0

@NJMR यह हो सकता है कि आप एक ही पैरामीटर/कॉन्फ़िगरेशन (उपयोगकर्ता, कनेक्शन स्ट्रिंग पैरामीटर इत्यादि) से जुड़े न हों। –

2

मैन्युअल रूप से क्वेरी निष्पादित करने और गतिशील एसक्यूएल का उपयोग करके विभिन्न मानकों के साथ कई बार निष्पादित करने के लिए बाध्य चर के साथ एक क्वेरी तैयार करने के लिए एक मौलिक अंतर है।

यहां Dynamic SQL Statements पर एक अच्छा अवलोकन है। जो आपको विशेष रूप से उपयोगी हो सकता है वह गतिशील एसक्यूएल स्टेटमेंट तैयार करने का अनुभाग है - विशेष रूप से ओरेकल में प्लेसहोल्डर के बारे में विवरण, और गतिशील एसक्यूएल स्टेटमेंट निष्पादित करने के अनुभाग।

यह कहना मुश्किल है कि समस्या का उपयोग किए जा रहे गतिशील SQL कथन को देखे बिना और आप अपने प्लेसहोल्डर्स को कैसे घोषित कर रहे हैं।

कुछ संकेत दिए गए:

  • यह आप एक चर का उपयोग कर रहे एक से अधिक मान डालने का प्रयास करते समय लगता है। ओरेकल में, उस समय कथन निष्पादित किया जाता है, प्रत्येक प्लेसहोल्डर के लिए एक चर होना चाहिए।

  • जो प्रक्रिया आप दिखा रहे हैं वह पूर्ण नहीं है।

    • :stmt में क्वेरी क्या है?
    • आपके प्लेसहोल्डर्स कैसा दिखते हैं? तार सही ढंग से उद्धृत हैं?
    • प्लेसहोल्डर्स के लिए उपयोग किए जाने वाले चर में क्या मूल्य हैं?

    • आपका कथन याद आ रही है END-EXEC

उदाहरण स्रोत ऊपर से लिया:

move "INSERT INTO publishers " & 
      "VALUES (?,?,?,?)" to stmtbuf 
EXEC SQL 
    PREPARE stmt1 FROM :stmtbuf 
END-EXEC 
    ... 
EXEC SQL 
    EXECUTE stmt1 USING :pubid,:pubname,:city,:state 
END-EXEC 
0

आपकी क्वेरी से निकालने के सभी ('') विफल रहा है क्योंकि आगे spac ई 'आर्गौ/सोलोथर्न (सीआईसी)' कॉलम वैल्यू में ई। बैकस्पेस विशेष चरित्र है इसलिए आपको बैकस्पेस का उपयोग करने या इसे हटाने की देखभाल करने की आवश्यकता है। फिर आप इसे सफलतापूर्वक निष्पादित करने में सक्षम होंगे।

संबंधित मुद्दे