2012-07-25 68 views
-1

我有一次替換不正確的多個數據,所以我用了preg_replace,但我堅持,因爲它只是在風格上的拼寫錯誤更換。有多種不同的錯誤樣式,我想用一種標準樣式替換它們中的所有樣式,所以我使用了一個遊標。但它給了我一個語法錯誤。我被困在MySQL存儲過程

我重視我的查詢。

CREATE PROCEDURE addcorrect() 
BEGIN 
DECLARE ADDRESS char(90); 
DECLARE badaddress CURSOR FOR 
    SELECT 
      supplementtal_address_1 
FROM aditi_po 
    WHERE ((
    UPPER(street_name) LIKE '%P%BOX%' 
    OR UPPER(supplementtal_address_1) LIKE 'P%BOX%' 
    ) 
    AND id NOT IN (
    SELECT id 
    FROM aditi_po 
    WHERE (street_name LIKE '%PO %Box%' 
     or supplementtal_address_1 LIKE '%PO %Box%') 
    )); 

    OPEN badaddress 

    read_loop: LOOP 
    FETCH badaddress INTO ADDRESS; 

    IF done THEN 
     LEAVE read_loop; 
    END IF; 
    if ADDRESS LIKE '%P.O. Box%' THEN 
     print ADDRESS = PREG_REPLACE('/(.*?)(P.O. Box)/' , '$1PO Box' ,ADDRESS) 
    ELSE ADDRESS LIKE '%P.O. Box%' THEN print ADDRESS = PREG_REPLACE('/(.*?)(P.O. Box)/' , '$1PO Box' ,ADDRESS) 
     END IF; 
    END LOOP; 

    CLOSE badaddress; 
END; 

MySQL表示:

#1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本的在線使用近「」正確的語法手冊3

+3

所以註釋掉部件直到錯誤消失。然後你要麼自己發現問題,要麼有一個「真正的」SO問題。 (這裏有太多需要解決的問題,這是一個「修復我的代碼」的評論。)希望你在CLI或類似的地方嘗試它。 – 2012-07-25 17:03:25

+0

其實我也試過這種方式,但它不工作,我想知道我錯在哪裏。 – user1552328 2012-07-25 17:27:12

+0

嘗試在第1行末尾添加一個';'。 – Sablefoste 2012-07-25 17:41:43

回答

0

這個片段看起來很糟:

ELSE ADDRESS LIKE '%P.O. Box%' THEN 
    print ADDRESS = PREG_REPLACE('/(.*?)(P.O. Box)/' , '$1PO Box' ,ADDRESS) 

我相信你想:

ELSEIF ADDRESS LIKE '%P.O. Box%' THEN 
    print ADDRESS = PREG_REPLACE('/(.*?)(P.O. Box)/', '$1PO Box', ADDRESS)