ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 CHAR\nORA-06512
strsql:='create table result as SELECT a.OrgCode,a.OrgName, a.NumberOfPeople, a.MedNum, a.CurrOccupationRatio
, CASE
WHEN a.CurrOccupationRatio - a.LastOccupationRatio < 0 THEN '||'-'||' CAST(a.LastOccupationRatio - a.CurrOccupationRatio AS varchar(100))
WHEN a.CurrOccupationRatio - a.LastOccupationRatio = 0 THEN 0.00
ELSE '||'+'||' CAST(a.CurrOccupationRatio - a.LastOccupationRatio AS varchar(100))
END AS YearIncrease
, CASE
WHEN a.CurrOccupationRatio - a.qgOccupationRatio < 0 THEN '||'-'||' CAST(a.qgOccupationRatio - a.CurrOccupationRatio AS varchar(100))
WHEN a.CurrOccupationRatio - a.qgOccupationRatio = 0 THEN 0.00
ELSE '||'+'||' CAST(a.CurrOccupationRatio - a.qgOccupationRatio AS varchar(100))
END AS QgIncrease
FROM (
SELECT a.OrgCode,a.OrgName, a.NumberOfPeople
, (
SELECT COUNT(1)
FROM temp b
WHERE a.orgName=b.orgName
) AS MedNum
, CASE
WHEN nvl(a.numberofpeople, CAST(0 AS number)) = 0 THEN CAST(0 AS decimal(18, 2))
ELSE CAST((
SELECT COUNT(1)
FROM temp b
WHERE a.orgName=b.orgName
) / (CAST(a.numberofpeople AS decimal) / 1000) * 100 AS decimal(18, 2))
END AS CurrOccupationRatio
, CASE
WHEN nvl(a.numberofpeople, CAST(0 AS number)) = 0 THEN CAST(0 AS decimal(18, 2))
ELSE CAST((
SELECT COUNT(1)
FROM temp1 b
WHERE a.orgName=b.orgName
) / (CAST(a.numberofpeople AS decimal) / 1000) * 100 AS decimal(18, 2))
END AS LastOccupationRatio, CAST((
SELECT COUNT(1)
FROM jg_info b
WHERE isfz = 1
AND to_char(b.passdate,''yyyy'')='||yearr||'
) / (CAST((
SELECT SUM(numberofpeople)
FROM KgOrgs where LV=1
) AS decimal) / 1000) * 100 AS decimal(18, 2)) AS qgOccupationRatio
FROM tempOrgs a
) a ';
execute immediate strsql;