DECLARE cursor_line CURSOR FOR  
SELECT  kdparadb.`TB0005_SRVPROC`.`F0001_SRVCODE` FROM kdparadb.`TB0005_SRVPROC`;
编译报错1064
实在看不错来有什么问题,kdparadb库.`TB0005_SRVPROC表`.`F0001_SRVCODE字段都是存在的!mysql 游标

解决方案 »

  1.   

    完整代码是什么
    mysql> delimiter //
    mysql> drop PROCEDURE p_bluelive//
    Query OK, 0 rows affected (0.00 sec)mysql> CREATE PROCEDURE p_bluelive()
        -> BEGIN
        ->   DECLARE done INT DEFAULT 0;
        ->   DECLARE v_a INT;
        ->   DECLARE cur1 CURSOR FOR SELECT distinct a FROM t_bluelive;
        ->   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
        ->
        ->   OPEN cur1;
        ->   FETCH cur1 INTO v_a;
        ->   WHILE done=0 DO
        ->          set @sqlstmt=concat('SELECT a,count(*) as N from t_bluelive wher
    e a=',v_a,' INTO OUTFILE \'',v_a,'.txt\'');
        ->          PREPARE stmt1 FROM @sqlstmt;
        ->          EXECUTE stmt1 ;
        ->          DEALLOCATE PREPARE stmt1;
        ->          FETCH cur1 INTO v_a;
        ->   END WHILE;
        -> END;
        -> //
    Query OK, 0 rows affected (0.00 sec)mysql>
    mysql> delimiter ;
      

  2.   

    DELIMITER //
    CREATE PROCEDURE SP_KDJC_LINE_DAYSUM197111
    (i_kdtime INT,i_kddate INT,i_timestamp INT,OUT o_rowcount INT)
    BEGIN
    DECLARE wk_start_time INT;
    DECLARE wk_end_time INT;
    DECLARE wk_NewSumKWh REAL;
    DECLARE wk_NewSumP   REAL;
    DECLARE wk_LineCode VARCHAR(24);
    DECLARE wk_PPointCode VARCHAR(24);
    DECLARE wk_ACCPointCode VARCHAR(24);
    DECLARE wk_BreakCode VARCHAR(24);
    DECLARE wk_MeasType SMALLINT;
    /*SET NOCOUNT ON*/SELECT wk_start_time = i_kdtime;
    SELECT wk_end_time = i_kdtime+86400;
    DECLARE cursor_line CURSOR LOCAL FOR
     SELECT A.F1005_FEEDCODE,A.F1005_MBREAK,B.F4014_POINTCODE,B.F4004_MEASTYPEID
     FROM KDPARADB.TB1005_FEEDERLINE A,KDPARADB.TB4014_ACCPOINT B,KDPARADB.TB9001_MEASPOINTPARA C 
     WHERE  A.F1005_MBREAK=C.F9001_DEVCODE AND C.F9001_MEASPCODE = B.F1002_DEVCODE
     AND F4014_POINTTYPE  = 2
     AND  (B.F4004_MEASTYPEID = 200 OR B.F4004_MEASTYPEID = 202)
    END //这是完整的
      

  3.   

    DELIMITER //
     CREATE PROCEDURE SP_KDJC_LINE_DAYSUM197111
     (i_kdtime INT,i_kddate INT,i_timestamp INT,OUT o_rowcount INT)
     BEGIN
     DECLARE wk_start_time INT;
     DECLARE wk_end_time INT;
     DECLARE wk_NewSumKWh REAL;
     DECLARE wk_NewSumP   REAL;
     DECLARE wk_LineCode VARCHAR(24);
     DECLARE wk_PPointCode VARCHAR(24);
     DECLARE wk_ACCPointCode VARCHAR(24);
     DECLARE wk_BreakCode VARCHAR(24);
     DECLARE wk_MeasType SMALLINT;
       DECLARE cursor_line CURSOR FOR SELECT A.F1005_FEEDCODE,A.F1005_MBREAK,B.F4014_POINTCODE,B.F4004_MEASTYPEID
      FROM KDPARADB.TB1005_FEEDERLINE A,KDPARADB.TB4014_ACCPOINT B,KDPARADB.TB9001_MEASPOINTPARA C 
      WHERE  A.F1005_MBREAK=C.F9001_DEVCODE AND C.F9001_MEASPCODE = B.F1002_DEVCODE
      AND F4014_POINTTYPE  = 2
      AND  (B.F4004_MEASTYPEID = 200 OR B.F4004_MEASTYPEID = 202);
      SELECT wk_start_time = i_kdtime;
     SELECT wk_end_time = i_kdtime+86400;
     END //
      

  4.   

    DECLARE cursor_line CURSOR LOCAL FOR 语句必须放在所有执行语句之前。
      

  5.   

    是的,已经解决了,sqlserver中游标声明可以单个编译(想检查语法错误),但mysql里得写在一个存储过程里,而且mysql的声明都要一起写在最前面,sqlserver就没这些个限制,mysql真苛刻!