为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:win11
【CPU】:I7-10510U
【问题描述】*:CREATE OR REPLACE PROCEDURE site_statistics_withpage("begintime" IN VARCHAR(32),
"endtime" IN VARCHAR(32),
"unitids" IN VARCHAR(10000),
"beginIndex" IN int,
"endIndex" IN int,
out "rowSum" IN int)
AUTHID DEFINER
as
v_str varchar2(1000);
v_str_sum varchar2(1000);
v_strsql varchar2(1000);
rowsum1 int;
BEGIN
SET @v_str := CONCAT("SELECT
( SELECT siteName FROM siteentity WHERE id = cvs.siteId ) AS NAME,
COUNT( siteId ) AS num,
( SELECT
IFNULL(COUNT( siteId ),0) AS num
FROM
conf_vs_siteused cvs
INNER JOIN conf c ON cvs.confId = c.id
WHERE
c.begin_Time > '", begintime, "'
AND c.end_Time < '", endtime, "'
AND if(1= '", unitids, "' ,1=1,cvs.unitId IN (", unitids, "))
AND c.conf_State = 4 ) totalnum,
siteId,
ROUND(SUM(TIMESTAMPDIFF(SECOND,
(DATE_FORMAT(cvs.beginDttm,'%Y-%m-%d %H:%i:%s')),
(DATE_FORMAT(cvs.endDttm, '%Y-%m-%d %H:%i:%s'))))/60) AS duration
FROM conf_vs_siteused cvs
INNER JOIN conf c1 ON cvs.confId = c1.id
WHERE
c1.begin_Time >'", begintime, "'
AND c1.end_Time <'", endtime, "'
AND if(1= '", unitids, "',1=1, cvs.unitId IN (", unitids, "))
AND c1.conf_State = 4
GROUP BY cvs.siteId");
SET @v_str_sum := concat('select count(1) into @rowSum1 from (', @v_str, ') b');
PREPARE stmt FROM @v_str_sum;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET rowSum := @rowsum1;
SET @v_strsql := concat('select * from (', @v_str, ') c limit ', beginIndex, ',', endIndex);
PREPARE stmt1 FROM @v_strsql;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END
;;
各位大哥,请问是不是不能用这么多变量,这个字符串转换报错,用CAST也不行,求教。
把涉及到 数字转换字符串的字段都去一一排查一下。
大多数是某些字段存在非法的数字字符,导致字符串转换出错。