2015-06-13 48 views
7

लापता मैं एक बहुत ही सरल टेबल बनाया:ओरेकल क्वेरी परिभाषित करता है

DECLARE 
    whatever varchar2(20) := :bananas; 
BEGIN 
    MERGE INTO tmp t USING 
    (SELECT whatever AS this_id FROM DUAL) d 
    ON (t.id = d.this_id) 
    WHEN NOT MATCHED THEN 
     INSERT (id) VALUES (d.this_id); 
END; 

और फिर बांध

enter image description here

दर्ज करें और प्राप्त करें:

CREATE TABLE TMP ("ID" VARCHAR2(20 BYTE)); 

फिर ऐसा करने की कोशिश की यह त्रुटि:

Error starting at line : 1 in command - 
DECLARE 
    whatever varchar2(20) := :bananas; 
BEGIN 
    MERGE INTO tmp2 t USING 
    (SELECT whatever AS this_id FROM DUAL) d 
    ON (t.id = d.this_id) 
    WHEN NOT MATCHED THEN 
     INSERT (id) VALUES (d.this_id); 
END; 
Error report - 
Missing defines 

मुझे कोई भाग्य नहीं है कि वह क्या चाहता है। यदि मैं 'केले' को एक 'ए' जैसे मान के साथ बदलता हूं, लेकिन जब मैं एक चर का उपयोग करता हूं और मान को बांधता हूं तो नहीं। किसी को पता है कि मेरी क्वेरी के साथ क्या गलत है? धन्यवाद।

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
PL/SQL Release 11.2.0.4.0 - Production 
"CORE 11.2.0.4.0 Production" 
TNS for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production 
NLSRTL Version 11.2.0.4.0 - Production 

संपादित: मैं सिर्फ देखा है कि त्रुटि ... त्रुटि अभी भी विषय में है, हालांकि

+1

'केले' क्या है? क्या यह कोड संग्रहीत प्रक्रिया में है? पैरामीटर को परिभाषित करने की आवश्यकता है। –

+0

मैं सिर्फ एक चर के लिए किसी भी नाम का उपयोग कर रहा था। मैं इसे क्लब्स के साथ एक क्वेरी के रूप में निष्पादित करना चाहता हूं, लेकिन मुझे यह समस्या "लापता परिभाषा" के साथ हमेशा दिखाई दे रही थी और जब तक मैं इस मुद्दे को कम नहीं कर पाता, तब तक मेरे बहुत सारे कोड को हटाने की कोशिश कर रहा था। –

+0

अपनी टिप्पणी दोबारा पढ़ें, इसे ओरेकल एसक्यूएल डेवलपर –

उत्तर

1

कोशिश पर बयान के बाद एक स्लेश जोड़ने सही ढंग से मर्ज किए जाने से डेटा को रोकने नहीं है अपनी खुद की एक पंक्ति। फिर पूरे ब्लॉक को हाइलाइट करें और F5 दबाएं।

1

मैं संभावित रूप से डेक्लेयर सेक्शन को छोड़कर संभावित रूप से छोड़ दूंगा: हर जगह के बजाय केला। BEGIN डालकर: केले: =: केले; और आपको कोई त्रुटि नहीं मिलेगी। शुभकामनाएँ।

0

मुझे एक ही त्रुटि संदेश था। मेरा डीबी कॉलम 32 वर्ण था (VARCHAR2(32 CHAR)) और फिल्टर के लिए घोषित चर 64 वर्ण (szId varchar2(32) := :Id;) था। मैंने इनपुट वैरिएबल के रूप में कुछ मूल्य कॉपी और चिपकाया। किसी कारण से मुझे अंत में सफेद जगह मिली। तो मुझे 33 वर्ण मिले और त्रुटि का उल्लेख किया। मैंने 32 वर्णों की घोषणा की और अधिक सार्थक त्रुटि प्राप्त करना शुरू कर दिया।

मेरा मामला आपका डीबी कॉलम VARCHAR2(20 BYTE) है और घोषित whatever varchar2(20) := :bananas; है। मुझे लगता है कि byte कुल आकार में char नहीं है।

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