2009-07-11 20 views
23

मैं इस (google book) से प्रक्रिया संग्रहीत एक mysql है, और एक उदाहरण यह है:mysql संग्रहीत-प्रक्रिया: बाहर पैरामीटर

DELIMITER $$ 

DROP PROCEDURE IF EXISTS my_sqrt$$ 
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT) 
BEGIN 
    SET out_number=SQRT(input_number); 
END$$ 

DELIMITER ; 

प्रक्रिया ठीक संकलित करता है। (मैं उबंटू में MySQL क्वेरी ब्राउज़र का उपयोग कर रहा हूं)।

हालांकि जब मैं प्रक्रिया फोन:

CALL my_sqrt(4,@out_value); 

(भी क्वेरी ब्राउज़र में)

यह एक त्रुटि देता है:

(1064) check the manual that correspond to the... 

क्यों नहीं है इस उदाहरण काम कर रहा?

उत्तर

29

दोहराने में असमर्थ। यह मेरे लिए ठीक काम करता है:

mysql> CALL my_sqrt(4, @out_value); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @out_value; 
+------------+ 
| @out_value | 
+------------+ 
| 2   | 
+------------+ 
1 row in set (0.00 sec) 

शायद आपको इसे सारांशित करने के बजाय पूरे त्रुटि संदेश पेस्ट करना चाहिए।

+0

यहाँ पूरे त्रुटि है: आप एक है आपके एसक्यूएल वाक्यविन्यास में त्रुटि; लाइन 2 – domagojk

+2

पर 'SELECT @out_value' के पास उपयोग करने के लिए सही वाक्यविन्यास के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैन्युअल की जांच करें। यह मुझे लगता है जैसे क्वेरी ब्राउज़र में आपके साथ कुछ करना है। इसे mysql कमांड लाइन उपकरण से आज़माएं। – chaos

+0

को QueryBrowser के साथ एक ही समस्या थी। – fubo

1

मैंने टर्मिनल में एक फ़ंक्शन को कॉल करने का प्रयास किया, फिर MySQL क्वेरी ब्राउज़र और यह काम करता है। तो, ऐसा लगता है कि मैं कुछ है कि कार्यक्रम में गलत कर रहा हूँ ...

मैं क्या पता नहीं है के बाद से मैं कुछ प्रक्रियाओं से पहले सफलतापूर्वक कहा जाता है (लेकिन वहाँ जहाँ कोई बाहर पैरामीटर) ...

इस एक के लिए मैं

CALL my_sqrt(4,@out_value); 
SELECT @out_value; 

में प्रवेश किया था और यह एक त्रुटि के साथ परिणाम:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT @out_value' at line 2

अजीब, अगर मैं सिर्फ लिखने:

012,
CALL my_sqrt(4,@out_value); 

परिणाम संदेश है: "क्वेरी को रद्द कर दिया"

मुझे लगता है, अभी मैं केवल टर्मिनल का उपयोग करेगा ...

2

मैं जानता हूँ कि यह एक पुरानी धागा है, लेकिन अगर किसी के लिए लग रही है इसका जवाब यह है कि उनकी प्रक्रियाएं वर्कबेंच में क्यों काम नहीं करती हैं और सोचती हैं कि एकमात्र परिणाम "प्रश्न रद्द कर दिया गया है" या सुराग के बिना ऐसा कुछ भी है:

त्रुटियों या समस्याओं के साथ आउटपुट छिपा हुआ है। मुझे नहीं पता क्यों, मैं समझता हूं कि यह कष्टप्रद है, लेकिन यह वहां है। बस अपने कर्सर को संदेश के ऊपर की रेखा के ऊपर ले जाएं, यह एक डबल तीर (ऊपर और नीचे) में बदल जाएगा, फिर आप उस लाइन को क्लिक करके खींच सकते हैं, फिर आपको याद किए गए संदेश के साथ एक कंसोल दिखाई देगा!

5

आपको इनपुट पैरामीटर के लिए सही हस्ताक्षर का उपयोग करना होगा * नीचे दिए गए कोड में IN अनुपलब्ध है।

select SQRT(input_number); 

कृपया SET out_number नहीं लिखते और अपने इनपुट पैरामीटर होना चाहिए::

CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT) 
+0

आईएन वैकल्पिक है, पैरामीटर से पहले कुछ भी नहीं –

+0

में हम कैसे अंतर करते हैं कि पैरामीटर इनपुट या आउटपुट के लिए है ...? –

+0

यह बुरा व्यवहार है जो मैं सहमत हूं लेकिन क्वेरी अभी भी मान्य होगी। –

1
SET out_number=SQRT(input_number); 
इस लिखने के बजाय

PROCEDURE `test`.`my_sqrt`(IN input_number INT, OUT out_number FLOAT) 
+0

और एसक्यूएल क्वेरी कॉल my_sqrt (4, @ out_value) है; –

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