DROP PROCEDURE IF EXISTS PUT_HOUSEID_IN_SYSTEM;
    CREATE PROCEDURE PUT_HOUSEID_IN_SYSTEM()
    BEGIN
      DECLARE V_CITY_NAME,V_DISTRICT_NAME,V_HOUSE_NAME VARCHAR(100);
      DECLARE V_CITY_ID,V_DISTRICT_ID INTEGER;
        DECLARE V_HOUSE_ID DECIMAL(60,0);
      DECLARE FOUND BOOLEAN DEFAULT TRUE;
      DECLARE C_HOUSE CURSOR FOR
        SELECT house_id,house_name,city_name,district_name FROM fdd_house_version.fdd_house_version;
      DECLARE CONTINUE HANDLER FOR NOT FOUND
        SET FOUND = FALSE;
      OPEN C_HOUSE;
      FETCH C_HOUSE INTO V_HOUSE_ID,V_HOUSE_NAME,V_CITY_NAME,V_DISTRICT_NAME;
      WHILE FOUND DO
        SELECT V_CITY_ID= CITY_ID FROM fdd_basic.t_region_sites WHERE CITY_NAME = V_CITY_NAME;
        SELECT V_DISTRICT_ID= CITY_ID FROM fdd_basic.t_region_sites WHERE CITY_NAME = V_DISTRICT_NAME AND CITY_PID = V_CITY_ID;
        UPDATE fdd_loupan.fdd_house SET version_house_id = V_HOUSE_ID WHERE
                   city_id=V_CITY_ID
                   AND district_id = V_DISTRICT_ID
                   AND house_name = V_HOUSE_NAME;
        FETCH C_HOUSE INTO V_HOUSE_ID,V_HOUSE_NAME,V_CITY_NAME,V_DISTRICT_NAME;
      END WHILE;
      CLOSE C_HOUSE;
    END
    这样就不可以,但是:
    DROP PROCEDURE IF EXISTS PUT_HOUSEID_IN_SYSTEM;
    CREATE PROCEDURE PUT_HOUSEID_IN_SYSTEM()
    BEGIN
      DECLARE V_CITY_NAME,V_DISTRICT_NAME,V_HOUSE_NAME VARCHAR(100);
      DECLARE V_CITY_ID,V_DISTRICT_ID INTEGER;
        DECLARE V_HOUSE_ID DECIMAL(60,0);
      DECLARE FOUND BOOLEAN DEFAULT TRUE;
      DECLARE C_HOUSE CURSOR FOR
        SELECT house_id,house_name,city_name,district_name FROM fdd_house_version.fdd_house_version;
      DECLARE CONTINUE HANDLER FOR NOT FOUND
        SET FOUND = FALSE;
      OPEN C_HOUSE;
      FETCH C_HOUSE INTO V_HOUSE_ID,V_HOUSE_NAME,V_CITY_NAME,V_DISTRICT_NAME;
      WHILE FOUND DO
        #SELECT V_CITY_ID= CITY_ID FROM fdd_basic.t_region_sites WHERE CITY_NAME = V_CITY_NAME;
        #SELECT V_DISTRICT_ID= CITY_ID FROM fdd_basic.t_region_sites WHERE CITY_NAME = V_DISTRICT_NAME AND CITY_PID = V_CITY_ID;
        UPDATE fdd_loupan.fdd_house SET version_house_id = V_HOUSE_ID WHERE
                   city_id=(SELECT CITY_ID FROM fdd_basic.t_region_sites WHERE CITY_NAME = V_CITY_NAME AND city_pid = 0)
                   AND district_id = (SELECT CITY_ID FROM fdd_basic.t_region_sites WHERE CITY_NAME = V_DISTRICT_NAME AND CITY_PID = (SELECT CITY_ID FROM fdd_basic.t_region_sites WHERE CITY_NAME = V_CITY_NAME AND city_pid = 0))
                   AND house_name = V_HOUSE_NAME;
        FETCH C_HOUSE INTO V_HOUSE_ID,V_HOUSE_NAME,V_CITY_NAME,V_DISTRICT_NAME;
      END WHILE;
      CLOSE C_HOUSE;
    END
    就可以,为什么?

解决方案 »

  1.   

    这样问问题真的不知所云,不知其他人是不是有相同的感受。不过我看到了下面注释的代码,按照Oracle PL/SQL中推论,应该不可以(没怎么写MySQL存储过程)。Oracle PL/SQL中赋值变量,应该这样:
    --匿名PL/SQL块
    DECLARE
        v_sal   emp.sal%type;
    BEGIN
    SELECT sal INTO v_sal FROM emp WHERE empno=7839;
    ...
    END;
    /
      

  2.   

    mysql select可以赋值给变量select id into @var from table where name='abcdd'
    select @var:=id from table where name='abcdd'
    建议有问题时不妨看一下手册。