【问题标题】:Creating an oracle view with cast is giving an error in oracle sql developer使用 cast 创建 oracle 视图在 oracle sql developer 中出现错误
【发布时间】:2012-06-26 10:22:08
【问题描述】:

我正在使用以下查询在 oracle sql developer 中创建一个 oracle 视图,

    select * from (SELECT DATEENTER as PI_TIMESTAMP,PI_TAG as  PI_TAGNAME, 
case when LENGTH(TRIM(TRANSLATE(final, ' +-.0123456789', ' '))) is null then cast(final as number) else null end as PI_VALUE,
STATUS AS  PI_STATUS  
FROM T2) a
where PI_VALUE is not null

查询在查询窗口中工作正常,但它给了我错误 Error(s) parsing SQL: Unexpected token at 134 near )。 136 附近的意外标记是。 当我尝试将其创建为视图时

谢谢

【问题讨论】:

  • 我在查询中看不到任何错误。当您从 SQL*Plus 运行它时它是否有效?
  • 是的,它工作正常,只有在尝试从中创建视图时才会弹出错误
  • 如果您在尝试从 SQL*Plus 创建视图时遇到错误,请发布您的完整声明。我能够使用您的上述语句创建一个视图就好了。
  • 我使用相同的语句来创建视图,因为它与你工作得很好,然后我开始怀疑我的 sql 开发人员已损坏,真的很奇怪

标签: database oracle database-design view oracle-sqldeveloper


【解决方案1】:

SQL Developer 可能对列名“final”感到困惑。 "final" 在 Oracle PL/SQL 中用于防止从 Object 类型继承。

尝试在 SQL/Plus 中运行您的语句 - 应该可以正常工作。

顺便说一句,我建议使用 to_number(final) 而不是普通的演员表。

【讨论】:

  • 谢谢,但实际上最后一列是一个字符串,
  • 当然可以,但是您仍然告诉 Oracle “将 final 视为一个数字”而没有指定任何数字格式。如果您使用 to_number(),您可以提供数字格式 - 这将允许您正确处理特定于 NLS 的问题等。仅供参考:您也没有正确处理 translate() 中的科学数字('1E2')。
  • 感谢弗兰克指出这一点,其实我这次翻译的目的是使用oracle中的SQL函数IsNumeric,所以这是我唯一找到的,能比这更好吗?再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2021-02-04
相关资源
最近更新 更多