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