分析SQL时出错:意外标记靠近**

分析SQL时出错:意外标记靠近**,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,这是我尝试创建视图时遇到的错误…但它作为select语句成功运行 代码如下: 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(BUCKETSTAR

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

代码如下:

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(

我可以使用SQL Developer的“新建视图”对话框复制此内容:

从SQL工作表中以脚本形式运行时不会出现问题:

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
这似乎是一个特定于对话框的解析器错误,它没有处理ANSI
NUMERIC
类型;如果使用Oracle
NUMBER
类型,则可以:

我在您使用的版本3.0.04以及3.1.07和3.2.20中发现了语法错误;但在4.0.0中没有,所以在那个主要版本中似乎已经修复了。作为进一步检查,在当前的早期采用者版本4.1.0.17中,它与您的原始声明一致:


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

从CAST中删除“!”部分(总和(单位)为*!*数字(9))。您使用的是哪个版本的SQL Developer,使用一个本身运行良好的查询来创建一个视图,就像一个select一样,您会得到这样的结果吗?显示您正在执行的语句可能会有所帮助,可能需要使用DDL表;或者更好地将其最小化为可能出现此错误的最小代码。这听起来像是一个非常旧的版本中的错误,所以也许升级到版本4,看看你是否仍然看到问题。Alex..谢谢你的回复。。是的,代码作为select语句成功运行..但是当我试图编译它以创建视图..它抛出了这个特定错误Oracle SQL Developer 3.0版(3.0.04.34)是我正在使用的..但是它在其他所有方面都能完美地工作..我最好的猜测是代码中有一些错误。。。
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.