2016-12-08 1 views
1

以下の手順を使用してテーブルを更新しようとしていますが、プロシージャをコンパイルできませんでした。カーソルのmysqlプロシージャをコンパイルできません

CREATE 
    PROCEDURE `propmanage2016`.`test`() 
    DECLARE CURSOR cur1 FOR 
     SELECT unit_id, unit_code FROM t_units WHERE unit_projectid = 1; 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE a INT; 
    DECLARE b VARCHAR(200); 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
    BEGIN 
     OPEN cur1;  
     read_loop: LOOP 
      FETCH cur1 INTO b , a ;  
      IF done THEN 
       LEAVE read_loop; 
      END IF; 
      UPDATE t_owner_resident SET or_unit = a WHERE unit_name = b; 
     END LOOP; 
     CLOSE cur1; 
    END; 

+0

あなたは「手続きをコンパイルできなかったとはどういう意味ですか混同カラム名を持っている場合はそう言い訳してください、bはあなたのSPに混ざっていると思います"?ストアドプロシージャをコンパイルする必要はありません。 – Barmar

+0

プロシージャを作成しようとするとエラーが発生していますか?何のエラー? – Barmar

答えて

0

は確かにあなたがストアドプロシージャせずに、このようにそれを行うことはできませんいくつかの助けを与えるしてください?

UPDATE t_owner_resident ow INNER JOIN t_units t set ow.unit_name = t.unit_code 
    WHERE o.unit_name = t.unit_id and t.unit_projectid = 1 

注:私は、私は少しあまりにも

+1

答えにANSI JOINの構文を使用してください。私たちは悪い習慣を教えたくありません。 – Barmar

+0

良い点@Barmarそれは悪い習慣です。数年前にmysqlマニュアル(http://dev.mysql.com/doc/refman/5.7/en/update.htmlv)から数年前に習得したことがあります。まだキックする。 – e4c5

+1

私は理解します。私は上司にそれをキックさせることができなかった。 – Barmar

関連する問題