解析错误 SQL:*!* 附近出现意外标记

Error(s) parsing SQL: Unexpected token near *!*

Error(s) parsing SQL:
Unexpected token near *!* in the following:
SELECT RESOURCEID AS RESOURCEID, MAX(ROWKEY) ROWKEY, MIN(PRODUCTIONDATE) PRODUCTIONDATE, CAST(SUM(UNITS) AS *!*NUMERIC (9)) UNITS, MAX(BUCKETSTART) BUCKETSTART FROM(
Unexpected token near *!* in the following:
SELECT RESOURCEID AS RESOURCEID, MAX(ROWKEY) ROWKEY, MIN(PRODUCTIONDATE) PRODUCTIONDATE, CAST(SUM(UNITS) AS NUMERIC *!*(9)) UNITS, MAX(BUCKETSTART) BUCKETSTART FROM(
Expecting identifier near *!* in the following:
SELECT RESOURCEID AS RESOURCEID, MAX(ROWKEY) ROWKEY, MIN(PRODUCTIONDATE) PRODUCTIONDATE, CAST(SUM(UNITS) AS NUMERIC (*!*9)) UNITS, MAX(BUCKETSTART) BUCKETSTART FROM(

这是我在尝试创建视图时遇到的错误...但它作为 select 语句成功运行。

代码如下:

SELECT RESOURCEID, MAX(ROWKEY) ROWKEY, MIN(PRODUCTIONDATE) PRODUCTIONDATE, CAST(SUM(UNITS) AS NUMERIC(9)) UNITS, MAX(BUCKETSTART) BUCKETSTART FROM(
    SELECT RESOURCEID, ROWKEY, PRODUCTIONDATE, UNITS, BUCKETSTART , SUM(BUCKETSTART)
        OVER(PARTITION BY RESOURCEID ORDER BY RESOURCEID,PRODUCTIONDATE) BUCKET FROM(
        SELECT RESOURCEID, MAX(PRODUCTIONDAY.ROWKEY) ROWKEY, PRODUCTIONDAY.PRODUCTIONDATE, CAST(SUM(PRODUCTIONDAY.UNITS) AS NUMERIC(9)) UNITS,
            MAX(PRODUCTIONDAY.BUCKETSTART) BUCKETSTART FROM m1si_wsl.PRODUCTIONDAY GROUP BY PRODUCTIONDAY.PRODUCTIONDATE, RESOURCEID)
)GROUP BY BUCKET, RESOURCEID

我可以使用 SQL 开发人员 'new view' 对话框重现此内容:

当 运行 作为来自 SQL 工作表的脚本时这不是问题:

select CAST(SUM(1) AS NUMERIC (9)) units from dual;

UNITS                  
---------------------- 
1                      

create view v42 as
select CAST(SUM(1) AS NUMERIC (9)) units from dual;

view V42 created.

这似乎是对话框特有的解析器错误,它不处理 ANSI NUMERIC 类型;如果您改用 equivalent Oracle NUMBER 类型就没问题:

我在您使用的版本 3.0.04 以及 3.1.07 和 3.2.20 中遇到语法错误;但不是在 4.0.0 中,因此它似乎已在该主要版本中得到修复。作为进一步检查,在当前的早期采用者版本 4.1.0.17 中,您的原始声明是可以的:

因此您的选择似乎是使用普通的 Oracle 数据类型,或者如果您设置为使用 ANSI 类型,则从工作表创建视图或升级到 SQL Developer 的当前版本。