2012-07-25 29 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)