Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql存储过程->游标或处理程序声明后的变量或条件声明_Mysql_Procedure_Declare - Fatal编程技术网

MySql存储过程->游标或处理程序声明后的变量或条件声明

MySql存储过程->游标或处理程序声明后的变量或条件声明,mysql,procedure,declare,Mysql,Procedure,Declare,我试图创建一个存储过程,但保存时总是出错。我尝试了不同顺序的声明,但是得到了相同的错误,或者工作台没有错误地关闭 此过程应将不同表中不同字段的datedif保存到一个表中。从备份还原数据库后,另一个存储过程应在该字段中写入实际日期。这应该是一个演示数据库 备份表“datedifs”包含 'datedifs', 'tabelle', 'varchar(200)' 'datedifs', 'feld', 'varchar(200)' 'datedifs', 'idfeld', 'varchar(20

我试图创建一个存储过程,但保存时总是出错。我尝试了不同顺序的声明,但是得到了相同的错误,或者工作台没有错误地关闭

此过程应将不同表中不同字段的datedif保存到一个表中。从备份还原数据库后,另一个存储过程应在该字段中写入实际日期。这应该是一个演示数据库

备份表“datedifs”包含

'datedifs', 'tabelle', 'varchar(200)'
'datedifs', 'feld', 'varchar(200)'
'datedifs', 'idfeld', 'varchar(200)'
'datedifs', 'idwert', 'varchar(200)'
'datedifs', 'DateDif', 'int(11) unsigned'
'datedifs', 'bemerkung', 'varchar(400)'
这是密码

CREATE PROCEDURE `dumpDateDiffs` ()
BEGIN
  DECLARE idFeld VARCHAR(30);
  DECLARE cursor_i CURSOR FOR SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE from information_schema.columns WHERE (Column_Type LIKE '%time%' or Column_Type LIKE '%date%') AND TABLE_SCHEMA = 'pldemo' 
                   AND TABLE_NAME IN ('angebote', 'ansprechpartner', 'benutzer', 'kontaktblog', 'projekte', 'rechnungen','saetzealt','stundenint');
  DECLARE done INT DEFAULT FALSE;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  DELETE FROM datedifs WHERE NOT tabelle IS NULL;
  OPEN cursor_i;
  read_loop: LOOP
    FETCH cursor_i INTO cursor_TABLE_NAME, cursor_COLUMN_NAME, cursor_COLUMN_TYPE;
    IF done THEN
      LEAVE read_loop;
    END IF;
    /**INSERT INTO table_B(ID, VAL) VALUES(cursor_ID, cursor_VAL);**/
    CASE cursor_TABLE_NAME 
      WHEN 'angebote' then SET idfeld = 'ID_Angebot'; SET idfeld2 = ''; 
      WHEN 'ansprechpartner' then SET idfeld = 'idAnsprechpartner'; 
      WHEN 'benutzer' then SET idfeld = 'uid';
      WHEN 'kontaktblog' then SET idfeld = 'ID'; 
      WHEN 'projekte' then SET idfeld = 'prnum'; 
      WHEN 'rechnungen' then SET idfeld = 'id'; 
      WHEN 'saetzealt' then SET idfeld = 'datedifID'; 
      WHEN 'stundenint' then SET idfeld = 'datedifID'; 
      ELSE  SET idfeld = ''; INSERT INTO datedifs (tabelle, feld, idfeld, idwert, DateDif) VALUES('idFeld-Fehler',  cursor_TABLE_NAME);
    END CASE;    
    IF idfeld <> '' then
       INSERT INTO datedifs (tabelle, feld, idfeld, idwert, DateDif) 
                   SELECT '''' + cursor_TABLE_NAME + '''' as 'tabelle', '''' + cursor_COLUMN_NAME + '''' AS 'feld', '''' + idfeld + '''' as 'idfeld', idfeld as 'idwert', DATEDIFF(NOW(),cursor_COLUMN_NAME) AS 'DateDif'
                   FROM cursor_TABLE_NAME WHERE NOT cursor_COLUMN_NAME IS NULL;
    END IF;
    /**INSERT INTO datedifs (tabelle, feld, idfeld, idwert, DateDif) VALUES(cursor_TABLE_NAME, cursor_COLUMN_NAME, cursor_VAL);**/
    /**INSERT INTO datedifs VALUES(cursor_TABLE_NAME, cursor_COLUMN_NAME, cursor_VAL);**/
  END LOOP;
  CLOSE cursor_i;    
END
有人能帮忙吗


非常感谢每一个提示

首先要做几件事:

最后一个DECLARE应该是DECLARE cursor_i和DECLARE CONTINUE处理程序move DECLARE done,然后再声明游标。 您需要标记变量cursor_*3和idfield 不能从变量中进行选择。为此,必须使用动态SQL