大家好,我写了个stored procedure,运行时候一直报错,Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1。能不能帮忙看看,我写的表和stored procedure 哪有问题,纠结了几天了,先谢谢大家啦!DELIMITER $$
CREATE DEFINER=`catavolt`@`%` PROCEDURE `sp_create_timesheet`(IN p_TechId varchar(10), IN p_Date varchar(10))
BEGIN
declare w_last_inserted_record integer;
declare w_pIx integer ;
declare w_update varchar(21845);
declare w_where varchar(2048);
declare w_sql varchar(21845);
declare w_finished integer;
declare w_P_Num integer;
declare w_Service_WON nvarchar(10);
declare w_Comments nvarchar(200);
declare w_TotalHours decimal(4,2);
declare w_OT_Code nvarchar(10);
declare w_JobComplete nvarchar(5);
DECLARE cr CURSOR FOR SELECT `Service_WON`,
`Comments`,`TotalHours`,`OT_Code`,`JobComplete`
FROM `cv_vw_newtransactionsumadmin`
WHERE `PersonID` = p_TechId and `OrderDate` = p_Date;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET w_finished = 1;
OPEN cr;
SET SQL_SAFE_UPDATES = 0;DELETE FROM `cv_timesheet` WHERE `TechName` = p_TechId and `OrderDate` = p_Date ;
INSERT INTO `cv_timesheet` (`TechName`, `OrderDate`)
SELECT `PersonID`,`OrderDate`
FROM `Catavolt`.`cv_vw_newtransactionsumadmin`
where `PersonID` = p_TechId and `OrderDate` = p_Date group by PersonID;
set w_where = concat(' WHERE TechName = ''', p_TechId, ' and OrderDate = ''', p_Date, '''');
set w_update = ' ';
set w_pIx = 1;
set w_finished = 0;
get_details: loop
FETCH cr INTO w_Service_WON, w_Comments, w_TotalHours, w_OT_Code,w_JobComplete; -- , w_Warehouse
if (w_finished = 1 or w_pIx > 10) then
leave get_details;
end if;
set w_update = concat(w_update, '`P_Num', w_pIx, '` = ', w_pIx, ', ');
set w_update = concat(w_update, '`WONo', w_pIx, '` = ''', w_Service_WON, ''', ');
set w_update = concat(w_update, '`Description', w_pIx, '` = ''', w_Comments, ''', ');
set w_update = concat(w_update, '`Hours', w_pIx, '` = ', w_TotalHours, ' , ');
set w_update = concat(w_update, '`WorkCodes', w_pIx, '` = ''', w_OT_Code, ''', ');
set w_update = concat(w_update, '`JC_JNC', w_pIx, '` = ''', w_JobComplete, ''', '); set w_pIx = w_pIx + 1;
end loop get_details;
CLOSE cr;
set w_update = mid(w_update, 1, (length(w_update) - 2));
set w_sql = concat('update `cv_timesheet` set ' , w_update, ' ', w_where);
SET @s = w_sql;
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1; END$$
DELIMITER ;
CREATE TABLE `cv_timesheet` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`P_Num1` int(4) DEFAULT NULL,
`WONo1` int(11) DEFAULT NULL,
`WOLineNumber1` varchar(3) DEFAULT NULL,
`Customer1` varchar(50) DEFAULT NULL,
`Description1` varchar(1150) DEFAULT NULL,
`Hours1` decimal(4,2) DEFAULT NULL,
`WorkCodes1` varchar(10) DEFAULT NULL,
`JC_JNC1` varchar(5) DEFAULT NULL,
`WorkCodesNote1` varchar(300) DEFAULT NULL,
`ProjectCodesNote1` varchar(300) DEFAULT NULL,
`P_Num2` int(4) DEFAULT NULL,
`WONo2` int(11) DEFAULT NULL,
`WOLineNumber2` varchar(3) DEFAULT NULL,
`Customer2` varchar(50) DEFAULT NULL,
`Description2` varchar(1150) DEFAULT NULL,
`Hours2` decimal(4,2) DEFAULT NULL,
`WorkCodes2` varchar(10) DEFAULT NULL,
`JC_JNC2` varchar(5) DEFAULT NULL,
`WorkCodesNote2` varchar(300) DEFAULT NULL,
`ProjectCodesNote2` varchar(300) DEFAULT NULL,
`P_Num3` int(4) DEFAULT NULL,
`WONo3` int(11) DEFAULT NULL,
`WOLineNumber3` varchar(3) DEFAULT NULL,
`Customer3` varchar(50) DEFAULT NULL,
`Description3` varchar(1150) DEFAULT NULL,
`Hours3` decimal(4,2) DEFAULT NULL,
`WorkCodes3` varchar(10) DEFAULT NULL,
`JC_JNC3` varchar(5) DEFAULT NULL,
`WorkCodesNote3` varchar(300) DEFAULT NULL,
`ProjectCodesNote3` varchar(300) DEFAULT NULL,
`P_Num4` int(4) DEFAULT NULL,
`WONo4` int(11) DEFAULT NULL,
`WOLineNumber4` varchar(3) DEFAULT NULL,
`Customer4` varchar(50) DEFAULT NULL,
`Description4` varchar(1150) DEFAULT NULL,
`Hours4` decimal(4,2) DEFAULT NULL,
`WorkCodes4` varchar(10) DEFAULT NULL,
`JC_JNC4` varchar(5) DEFAULT NULL,
`WorkCodesNote4` varchar(300) DEFAULT NULL,
`ProjectCodesNote4` varchar(300) DEFAULT NULL,
`P_Num5` int(4) DEFAULT NULL,
`WONo5` int(11) DEFAULT NULL,
`WOLineNumber5` varchar(3) DEFAULT NULL,
`Customer5` varchar(50) DEFAULT NULL,
`Description5` varchar(1150) DEFAULT NULL,
`Hours5` decimal(4,2) DEFAULT NULL,
`WorkCodes5` varchar(10) DEFAULT NULL,
`JC_JNC5` varchar(5) DEFAULT NULL,
`WorkCodesNote5` varchar(300) DEFAULT NULL,
`ProjectCodesNote5` varchar(300) DEFAULT NULL,
`P_Num6` int(4) DEFAULT NULL,
`WONo6` int(11) DEFAULT NULL,
`WOLineNumber6` varchar(3) DEFAULT NULL,
`Customer6` varchar(50) DEFAULT NULL,
`Description6` varchar(1150) DEFAULT NULL,
`Hours6` decimal(4,2) DEFAULT NULL,
`WorkCodes6` varchar(10) DEFAULT NULL,
`JC_JNC6` varchar(5) DEFAULT NULL,
`WorkCodesNote6` varchar(300) DEFAULT NULL,
`ProjectCodesNote6` varchar(300) DEFAULT NULL,
`P_Num7` int(4) DEFAULT NULL,
`WONo7` int(11) DEFAULT NULL,
`WOLineNumber7` varchar(3) DEFAULT NULL,
`Customer7` varchar(50) DEFAULT NULL,
`Description7` varchar(1150) DEFAULT NULL,
`Hours7` decimal(4,2) DEFAULT NULL,
`WorkCodes7` varchar(10) DEFAULT NULL,
`JC_JNC7` varchar(5) DEFAULT NULL,
`WorkCodesNote7` varchar(300) DEFAULT NULL,
`ProjectCodesNote7` varchar(300) DEFAULT NULL,
`P_Num8` int(4) DEFAULT NULL,
`WONo8` int(11) DEFAULT NULL,
`WOLineNumber8` varchar(3) DEFAULT NULL,
`Customer8` varchar(50) DEFAULT NULL,
`Description8` varchar(1150) DEFAULT NULL,
`Hours8` decimal(4,2) DEFAULT NULL,
`WorkCodes8` varchar(10) DEFAULT NULL,
`JC_JNC8` varchar(5) DEFAULT NULL,
`WorkCodesNote8` varchar(300) DEFAULT NULL,
`ProjectCodesNote8` varchar(300) DEFAULT NULL,
`P_Num9` int(4) DEFAULT NULL,
`WONo9` int(11) DEFAULT NULL,
`WOLineNumber9` varchar(3) DEFAULT NULL,
`Customer9` varchar(50) DEFAULT NULL,
`Description9` varchar(1150) DEFAULT NULL,
`Hours9` decimal(4,2) DEFAULT NULL,
`WorkCodes9` varchar(10) DEFAULT NULL,
`JC_JNC9` varchar(5) DEFAULT NULL,
`WorkCodesNote9` varchar(300) DEFAULT NULL,
`ProjectCodesNote9` varchar(300) DEFAULT NULL,
`P_Num10` int(4) DEFAULT NULL,
`WONo10` int(11) DEFAULT NULL,
`WOLineNumber10` varchar(3) DEFAULT NULL,
`Customer10` varchar(50) DEFAULT NULL,
`Description10` varchar(1150) DEFAULT NULL,
`Hours10` decimal(4,2) DEFAULT NULL,
`WorkCodes10` varchar(10) DEFAULT NULL,
`JC_JNC10` varchar(5) DEFAULT NULL,
`WorkCodesNote10` varchar(300) DEFAULT NULL,
`ProjectCodesNote10` varchar(300) DEFAULT NULL,
`TechName` varchar(50) NOT NULL,
`OrderDate` date NOT NULL,
`Signature` blob,
`TotalHours` decimal(4,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
CREATE DEFINER=`catavolt`@`%` PROCEDURE `sp_create_timesheet`(IN p_TechId varchar(10), IN p_Date varchar(10))
BEGIN
declare w_last_inserted_record integer;
declare w_pIx integer ;
declare w_update varchar(21845);
declare w_where varchar(2048);
declare w_sql varchar(21845);
declare w_finished integer;
declare w_P_Num integer;
declare w_Service_WON nvarchar(10);
declare w_Comments nvarchar(200);
declare w_TotalHours decimal(4,2);
declare w_OT_Code nvarchar(10);
declare w_JobComplete nvarchar(5);
DECLARE cr CURSOR FOR SELECT `Service_WON`,
`Comments`,`TotalHours`,`OT_Code`,`JobComplete`
FROM `cv_vw_newtransactionsumadmin`
WHERE `PersonID` = p_TechId and `OrderDate` = p_Date;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET w_finished = 1;
OPEN cr;
SET SQL_SAFE_UPDATES = 0;DELETE FROM `cv_timesheet` WHERE `TechName` = p_TechId and `OrderDate` = p_Date ;
INSERT INTO `cv_timesheet` (`TechName`, `OrderDate`)
SELECT `PersonID`,`OrderDate`
FROM `Catavolt`.`cv_vw_newtransactionsumadmin`
where `PersonID` = p_TechId and `OrderDate` = p_Date group by PersonID;
set w_where = concat(' WHERE TechName = ''', p_TechId, ' and OrderDate = ''', p_Date, '''');
set w_update = ' ';
set w_pIx = 1;
set w_finished = 0;
get_details: loop
FETCH cr INTO w_Service_WON, w_Comments, w_TotalHours, w_OT_Code,w_JobComplete; -- , w_Warehouse
if (w_finished = 1 or w_pIx > 10) then
leave get_details;
end if;
set w_update = concat(w_update, '`P_Num', w_pIx, '` = ', w_pIx, ', ');
set w_update = concat(w_update, '`WONo', w_pIx, '` = ''', w_Service_WON, ''', ');
set w_update = concat(w_update, '`Description', w_pIx, '` = ''', w_Comments, ''', ');
set w_update = concat(w_update, '`Hours', w_pIx, '` = ', w_TotalHours, ' , ');
set w_update = concat(w_update, '`WorkCodes', w_pIx, '` = ''', w_OT_Code, ''', ');
set w_update = concat(w_update, '`JC_JNC', w_pIx, '` = ''', w_JobComplete, ''', '); set w_pIx = w_pIx + 1;
end loop get_details;
CLOSE cr;
set w_update = mid(w_update, 1, (length(w_update) - 2));
set w_sql = concat('update `cv_timesheet` set ' , w_update, ' ', w_where);
SET @s = w_sql;
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1; END$$
DELIMITER ;
CREATE TABLE `cv_timesheet` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`P_Num1` int(4) DEFAULT NULL,
`WONo1` int(11) DEFAULT NULL,
`WOLineNumber1` varchar(3) DEFAULT NULL,
`Customer1` varchar(50) DEFAULT NULL,
`Description1` varchar(1150) DEFAULT NULL,
`Hours1` decimal(4,2) DEFAULT NULL,
`WorkCodes1` varchar(10) DEFAULT NULL,
`JC_JNC1` varchar(5) DEFAULT NULL,
`WorkCodesNote1` varchar(300) DEFAULT NULL,
`ProjectCodesNote1` varchar(300) DEFAULT NULL,
`P_Num2` int(4) DEFAULT NULL,
`WONo2` int(11) DEFAULT NULL,
`WOLineNumber2` varchar(3) DEFAULT NULL,
`Customer2` varchar(50) DEFAULT NULL,
`Description2` varchar(1150) DEFAULT NULL,
`Hours2` decimal(4,2) DEFAULT NULL,
`WorkCodes2` varchar(10) DEFAULT NULL,
`JC_JNC2` varchar(5) DEFAULT NULL,
`WorkCodesNote2` varchar(300) DEFAULT NULL,
`ProjectCodesNote2` varchar(300) DEFAULT NULL,
`P_Num3` int(4) DEFAULT NULL,
`WONo3` int(11) DEFAULT NULL,
`WOLineNumber3` varchar(3) DEFAULT NULL,
`Customer3` varchar(50) DEFAULT NULL,
`Description3` varchar(1150) DEFAULT NULL,
`Hours3` decimal(4,2) DEFAULT NULL,
`WorkCodes3` varchar(10) DEFAULT NULL,
`JC_JNC3` varchar(5) DEFAULT NULL,
`WorkCodesNote3` varchar(300) DEFAULT NULL,
`ProjectCodesNote3` varchar(300) DEFAULT NULL,
`P_Num4` int(4) DEFAULT NULL,
`WONo4` int(11) DEFAULT NULL,
`WOLineNumber4` varchar(3) DEFAULT NULL,
`Customer4` varchar(50) DEFAULT NULL,
`Description4` varchar(1150) DEFAULT NULL,
`Hours4` decimal(4,2) DEFAULT NULL,
`WorkCodes4` varchar(10) DEFAULT NULL,
`JC_JNC4` varchar(5) DEFAULT NULL,
`WorkCodesNote4` varchar(300) DEFAULT NULL,
`ProjectCodesNote4` varchar(300) DEFAULT NULL,
`P_Num5` int(4) DEFAULT NULL,
`WONo5` int(11) DEFAULT NULL,
`WOLineNumber5` varchar(3) DEFAULT NULL,
`Customer5` varchar(50) DEFAULT NULL,
`Description5` varchar(1150) DEFAULT NULL,
`Hours5` decimal(4,2) DEFAULT NULL,
`WorkCodes5` varchar(10) DEFAULT NULL,
`JC_JNC5` varchar(5) DEFAULT NULL,
`WorkCodesNote5` varchar(300) DEFAULT NULL,
`ProjectCodesNote5` varchar(300) DEFAULT NULL,
`P_Num6` int(4) DEFAULT NULL,
`WONo6` int(11) DEFAULT NULL,
`WOLineNumber6` varchar(3) DEFAULT NULL,
`Customer6` varchar(50) DEFAULT NULL,
`Description6` varchar(1150) DEFAULT NULL,
`Hours6` decimal(4,2) DEFAULT NULL,
`WorkCodes6` varchar(10) DEFAULT NULL,
`JC_JNC6` varchar(5) DEFAULT NULL,
`WorkCodesNote6` varchar(300) DEFAULT NULL,
`ProjectCodesNote6` varchar(300) DEFAULT NULL,
`P_Num7` int(4) DEFAULT NULL,
`WONo7` int(11) DEFAULT NULL,
`WOLineNumber7` varchar(3) DEFAULT NULL,
`Customer7` varchar(50) DEFAULT NULL,
`Description7` varchar(1150) DEFAULT NULL,
`Hours7` decimal(4,2) DEFAULT NULL,
`WorkCodes7` varchar(10) DEFAULT NULL,
`JC_JNC7` varchar(5) DEFAULT NULL,
`WorkCodesNote7` varchar(300) DEFAULT NULL,
`ProjectCodesNote7` varchar(300) DEFAULT NULL,
`P_Num8` int(4) DEFAULT NULL,
`WONo8` int(11) DEFAULT NULL,
`WOLineNumber8` varchar(3) DEFAULT NULL,
`Customer8` varchar(50) DEFAULT NULL,
`Description8` varchar(1150) DEFAULT NULL,
`Hours8` decimal(4,2) DEFAULT NULL,
`WorkCodes8` varchar(10) DEFAULT NULL,
`JC_JNC8` varchar(5) DEFAULT NULL,
`WorkCodesNote8` varchar(300) DEFAULT NULL,
`ProjectCodesNote8` varchar(300) DEFAULT NULL,
`P_Num9` int(4) DEFAULT NULL,
`WONo9` int(11) DEFAULT NULL,
`WOLineNumber9` varchar(3) DEFAULT NULL,
`Customer9` varchar(50) DEFAULT NULL,
`Description9` varchar(1150) DEFAULT NULL,
`Hours9` decimal(4,2) DEFAULT NULL,
`WorkCodes9` varchar(10) DEFAULT NULL,
`JC_JNC9` varchar(5) DEFAULT NULL,
`WorkCodesNote9` varchar(300) DEFAULT NULL,
`ProjectCodesNote9` varchar(300) DEFAULT NULL,
`P_Num10` int(4) DEFAULT NULL,
`WONo10` int(11) DEFAULT NULL,
`WOLineNumber10` varchar(3) DEFAULT NULL,
`Customer10` varchar(50) DEFAULT NULL,
`Description10` varchar(1150) DEFAULT NULL,
`Hours10` decimal(4,2) DEFAULT NULL,
`WorkCodes10` varchar(10) DEFAULT NULL,
`JC_JNC10` varchar(5) DEFAULT NULL,
`WorkCodesNote10` varchar(300) DEFAULT NULL,
`ProjectCodesNote10` varchar(300) DEFAULT NULL,
`TechName` varchar(50) NOT NULL,
`OrderDate` date NOT NULL,
`Signature` blob,
`TotalHours` decimal(4,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货