2013-05-21 6 views
5

मैं psql में बहुत शुरुआती हूं और मेरे पास एक सवाल है।एसक्यूएल * प्लस पाठ से पाठ चर को कैसे स्वीकार करें?

SET serveroutput ON 
ACCEPT myVariable PROMPT "Input value: "; 

BEGIN 
    dbms_output.put_line('My input variable is: '||&myVariable); 
END; 

प्रश्न बहुत सरल है::

यहाँ कोड है कैसे मैं अपने चर के लिए पाठ पारित कर सकते हैं? मैं इनपुट एक नंबर यह है सही ढंग से काम करता है और अगर मैं अपने नंबर लॉग इन करने में पढ़ सकते हैं, लेकिन अगर मैं संख्या की जगह की तरह "mytext" एक पाठ गुजरती हैं, मैं एक त्रुटि मिली:

old:BEGIN 


    dbms_output.put_line('My input variable is: '||&myVariable); 
    END; 


    new:BEGIN 

    dbms_output.put_line('My input variable is: '||mytext); 
END; 

    Error starting at line 5 in command: 
    BEGIN 
     dbms_output.put_line('My input variable is: '||&myVariable); 
    END; 
    Error report: 
    ORA-06550: 2 sor, 50 oszlop: 
    PLS-00201: identifier 'MYTEXT' must be declared 
    ORA-06550: 2 sor, 3 oszlop: 
    PL/SQL: Statement ignored 
    06550. 00000 - "line %s, column %s:\n%s" 
    *Cause: Usually a PL/SQL compilation error. 
    *Action: 

उत्तर

8

आप ACCEPT statement के हिस्से के रूप डेटा प्रकार निर्दिष्ट करना होगा। अगर कोई नहीं दिया जाता है, तो यह एक संख्या मानता है।

बजाय ACCEPT myVariable CHAR PROMPT 'Input value: '; की कोशिश करो।

1

आप नहीं करते MYTEXT चर कहीं भी घोषित किया है।

dbms_output.put_line('My input variable is: '||mytext); -- here is the error. It should be &myVariable. 
+0

नहीं है, कोड से ऊपर है, इनपुट VALUE "mytext" है जो मैंने दिया है! –

6

जब आप इसे स्ट्रिंग करते हैं तो आपको उद्धरणों में वर्ण प्रतिस्थापन चर को संलग्न करना होगा, अन्यथा ओरेकल मान को ऑब्जेक्ट नाम के रूप में समझने का प्रयास करता है। आपको लगता है कि 'नए' संस्करण (नहीं दिखाया गया है क्योंकि आप set verify on है) पर देख सकते हैं, और sexta13 कि करने के लिए बहुत alluded। तो आप क्या करेंगे:

dbms_output.put_line('My input variable is: '||'&myVariable'); 

लेकिन आप इस मामले में मूल्य जोड़ की जरूरत नहीं है (चाहे वह एक नंबर या रों स्ट्रिंग है):

dbms_output.put_line('My input variable is: &myVariable'); 
+3

आप शायद दो ऐम्परसेंड उपयोग करना चाहिए: 'dbms_output.put_line ('&& myVariable');' इस तरह यदि वह पहले से परिभाषित किया गया है यह मूल्य के लिए पूछना नहीं होंगे। –

+0

इस समस्या के लिए सबसे अच्छा जवाब ... – Iero

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