为了使报告正常运行,我必须在工作的Oracle SQL查询中使用报告字符串转换日期参数。尽管这听起来很奇怪-毕竟是日期,但要在我们的托管数据库中运行报表,必须使用字符串。该报表可以在带有日期参数的Crystal Reports中很好地运行,并建议大括号{}是Crystal Reports定义参数的方式。
挑战在于将当前语法转换为基于字符的语法。这是较大查询的摘录; {?01_START_DT}是格式为MM / DD / YYYY的日期参数(例如07/31/2020):
SELECT U."UnitNumber" AS UNIT_NO
, U."UsingDepartment" AS USE_DEPT
, U."UnitStatus" AS STATUS
, (
SELECT H.USAGE
FROM UNIT_HIST H
WHERE U."UNITID" = H.UNIT_ID
AND H.COMPANY = 'OKS'
AND FISC_PD = CASE WHEN EXTRACT(MONTH FROM {?01_START_DT}) >= 7
THEN TO_CHAR(ADD_MONTHS({?01_START_DT}, 12), 'YYYY') || TO_CHAR(ADD_MONTHS({?01_START_DT}, -6), 'MM')
ELSE TO_CHAR({?01_START_DT}, 'YYYY') || TO_CHAR(ADD_MONTHS({?01_START_DT}, 6), 'MM')
END
FROM VIEW_ALL_UNITS U
直接将参数替换为格式为MM / DD / YYYY的字符串{?START_DT}(例如,“ 07/31/2020”,不带引号),如下所示:
SELECT U."UnitNumber" AS UNIT_NO
, U."UsingDepartment" AS USE_DEPT
, U."UnitStatus" AS STATUS
, (
SELECT H.USAGE
FROM UNIT_HIST H
WHERE U."UNITID" = H.UNIT_ID
AND H.COMPANY = 'OKS'
AND FISC_PD = CASE
WHEN EXTRACT(MONTH FROM TO_DATE({?START_DT}, 'MM/DD/YYYY') >= 7
THEN TO_CHAR(ADD_MONTHS(TO_DATE({?START_DT}, 'MM/DD/YYYY'), 12), 'YYYY') || TO_CHAR(ADD_MONTHS(TO_DATE({?START_DT}, 'MM/DD/YYYY'), -6), 'MM')
ELSE TO_CHAR(TO_DATE({?START_DT}, 'MM/DD/YYYY'), 'YYYY') || TO_CHAR(ADD_MONTHS(TO_DATE({?START_DT}, 'MM/DD/YYYY'), 6), 'MM')
END
FROM VIEW_ALL_UNITS U
否则会产生ORA-01858“非数字字符”错误!
我尝试了很多事情而没有成功:
FISC_PD = CASE WHEN TO_DATE({?START_DT}, 'MM/DD/YYYY') = TO_DATE('07/01/2020', 'MM/DD/YYYY') THEN
不用说,不管我尝试什么,该错误仍然存在。
正如我之前提到的那样,这查询了我没有物理或电子访问权限的托管系统上的数据库。这些查询针对报告数据库。该错误没有提供行号或任何其他有助于故障排除的信息。
有什么想法可能导致此问题?