2010-10-20 13 views
19

मैं MySQL 5.0 में चर के साथ कुछ सरल जोड़-विमर्श करने की कोशिश कर रहा हूं लेकिन मुझे इसे काम करने में काफी कुछ नहीं मिल रहा है। मैंने DECLARE/SET के लिए कई (बहुत!) अलग वाक्यविन्यास देखा है, मुझे यकीन नहीं है कि क्यों ... किसी भी मामले में मैं संभवतः उन्हें भ्रमित कर रहा हूं/गलत चुन रहा हूं/उन्हें मिला रहा हूं।MySQL वर्कर चर का घोषणापत्र और उपयोग

यहाँ एक न्यूनतम टुकड़ा है कि विफल रहता है:

DECLARE FOO varchar(7); 
DECLARE oldFOO varchar(7); 
SET FOO = '138'; 
SET oldFOO = CONCAT('0', FOO); 

update mypermits 
    set person = FOO 
where person = oldFOO; 

मैं भी यह लपेटकर के साथ शुरू ... अंत की कोशिश की है; और एक प्रक्रिया के रूप में। इस मामले में MySQL वर्कबेंच मददगार रूप से मुझे बताता है: "पहली पंक्ति पर" एसक्यूएल सिंटैक्स त्रुटि '' '' और 'दूसरी ओर' DECLARE oldFOO varchar (7) '' के पास SQL ​​वाक्यविन्यास त्रुटि। अन्यथा यह दोनों पंक्तियों को पूर्ण रूप से त्रुटियों के रूप में देता है, दोनों के साथ "एसक्यूएल वाक्यविन्यास त्रुटि ..." के साथ।

संपादित करें: मैं यह उल्लेख करना भूल गया कि मैंने इसे चर के साथ और बिना @ के प्रयास किया है। कुछ संसाधनों के साथ, दूसरों के बिना था।

मैं क्या बेवकूफ गलती कर रहा हूं?

+0

पोस्ट के बीच अपने कोड रैप करने के लिए वास्तव में क्या आप का उपयोग करने की कोशिश कर रहे हैं, क्योंकि मैंने एक नई प्रक्रिया बनाई है और मुझे आपके द्वारा प्रदान किए गए सिंटैक्स त्रुटि नहीं मिलती है - मेरा उत्तर देखें। –

उत्तर

25

यह मैं MySQL 5.1.35 प्रयोग करने के लिए ठीक काम करता है:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `example`.`test` $$ 
CREATE PROCEDURE `example`.`test`() 
BEGIN 

    DECLARE FOO varchar(7); 
    DECLARE oldFOO varchar(7); 
    SET FOO = '138'; 
    SET oldFOO = CONCAT('0', FOO); 

    update mypermits 
    set person = FOO 
    where person = oldFOO; 

END $$ 

DELIMITER ; 

तालिका:

DROP TABLE IF EXISTS `example`.`mypermits`; 
CREATE TABLE `example`.`mypermits` (
    `person` varchar(7) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO mypermits VALUES ('0138'); 

CALL test() 
+2

ऐसा लगता है कि काम करता है! डेलीमीटर कमांड जो मुझे चाहिए, स्पष्ट रूप से। यह अब तक जादू है ... मुझे इसे देखने दो। – Charles

0

ऐसा लगता है कि आप @ परिवर्तनीय घोषणा में भूल गए हैं। मुझे बहुत समय पहले माइस्क्ल में SET के साथ समस्याएं याद आ रही हैं।

DECLARE @FOO varchar(7); 
DECLARE @oldFOO varchar(7); 
SELECT @FOO = '138'; 
SELECT @oldFOO = CONCAT('0', @FOO); 

update mypermits 
    set person = @FOO 
where person = @oldFOO; 
+0

क्षमा करें, मैं यह उल्लेख करना भूल गया था कि त्रुटि तब होती है जब मैं चरों पर @s डालता हूं (जैसा कि मैंने मूल रूप से किया था।) – Charles

0

इस कोशिश का प्रयास करें:

declare @foo varchar(7), 
     @oldFoo varchar(7) 

set @foo = '138' 
set @oldFoo = '0' + @foo 
+2

"एसक्यूएल सिंटैक्स त्रुटि" घोषित करें @ foo varchar (7), @oldFoo वर्कर (7) ' " – Charles

+1

मैंने सचमुच सिर्फ एक नई क्वेरी पर प्रतिलिपि बनाई और चिपकाया और यह किसी समस्या के बिना काम किया ...क्या आपके पास इस हिस्से के आस-पास कोई कोड है? – IWriteApps

+0

नहीं। मैंने बाकी सब कुछ टिप्पणी की और यह अभी भी उस त्रुटि को दिया। – Charles

-1
Declare @variable type(size); 

Set @variable = 'String' or Int ; 

उदाहरण:

Declare @id int; 
set @id = 10; 

Declare @str char(50); 
set @str='Hello' ; 
0

MySQL में, हम घोषणा करते हैं और तरह

नीचे
mysql> set @foo="manjeet"; 
mysql> select * from table where name = @foo; 
6

मैं MySQL Workbench का उपयोग कर एक ही समस्या में पड़ गए सेट कमांड के साथ चर का उपयोग कर सकते हैं। MySQL documentation के अनुसार, DECLARE "कथन संग्रहित कार्यक्रमों के भीतर स्थानीय चर घोषित करता है।" इसका स्पष्ट अर्थ यह है कि यह केवल संग्रहीत प्रक्रियाओं/कार्यों के साथ काम करने की गारंटी है।

मेरे लिए समाधान DECLARE कथन को आसानी से निकालना था, और SET कथन में चर प्रस्तुत करना था। अपने कोड के लिए इसका मतलब यह होगा:

-- DECLARE FOO varchar(7); 
-- DECLARE oldFOO varchar(7); 

-- the @ symbol is required 
SET @FOO = '138'; 
SET @oldFOO = CONCAT('0', FOO); 

UPDATE mypermits SET person = FOO WHERE person = oldFOO; 
+4

आपको संग्रहित प्रक्रियाओं/कार्यों के बाहर एसईटी चर के लिए '@' प्रतीक की आवश्यकता होगी। ई, जी 'एसईटी @ एफ 00 = '138'' – Yoga

0

आप phpmyadmin उपयोग कर रहे हैं नई दिनचर्या तो जोड़ने के लिए मत भूलना से शुरू और समाप्त enter image description here

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