首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00933 SQL命令未正确结束

ORA-00933 SQL命令未正确结束
EN

Stack Overflow用户
提问于 2016-03-18 22:52:49
回答 2查看 679关注 0票数 0

我需要将MSSQL查询转换为Oracle,但最终使用的是SQL command not properly ended

下面是MSSQL查询

代码语言:javascript
复制
SELECT * FROM [dbo].[trade] AS [Extent1]
WHERE EXISTS (
    SELECT 1 AS [C1] FROM
    [dbo].[findetail] AS [Extent2]
    INNER JOIN [dbo].[transact] AS [Extent3] ON [Extent2].[transact] = [Extent3].[transact]
    WHERE [Extent1].[trade] = [Extent2].[trade]
    AND 'ACCR' = [Extent3].[subledger]
    AND [Extent3].[date] = '2016-03-18T00:00:00'
)

将其转换为Oracle SQL I将以此结束。

代码语言:javascript
复制
SELECT * FROM trade Extent1
WHERE EXISTS
  (SELECT 1 C1 FROM findetail Extent2
    JOIN transact Extent3
    ON Extent2.transact=Extent3.transact
    WHERE Extent1.trade=Extent2.trade 
    AND 'ACCR'=Extent3.subledger
    AND  Extent3.date='2016-03-18T00:00:00'
  );

并收到上面的错误。

EN

回答 2

Stack Overflow用户

发布于 2016-03-18 22:57:42

Oracle中的日期格式不同。可能是这样的:

代码语言:javascript
复制
SELECT *
FROM trade Extent1
WHERE EXISTS (SELECT 1 
              FROM findetail Extent2 JOIN
                   transact Extent3
                   ON Extent2.transact = Extent3.transact
              WHERE Extent1.trade = Extent2.trade AND
                    Extent3.subledger = 'ACCR' AND
                    Extent3."date" = DATE '2016-03-18'
             );
票数 0
EN

Stack Overflow用户

发布于 2016-03-18 23:02:26

DATE是一个保留字,所以需要用双引号括起来,我假设它是DATE数据类型,所以你可能需要转换字符串:

代码语言:javascript
复制
SELECT *
FROM   trade t
WHERE  EXISTS (
         SELECT 1
         FROM   findetail f
                JOIN transact r
                ON f.transact = r.transact
         WHERE  t.trade   = f.trade 
         AND    'ACCR'    = r.subledger
         AND     r."DATE" = TO_DATE( '2016-03-18T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS' )
      );

如果只在r."DATE" = '2016-03-18T00:00:00'中使用字符串,那么Oracle将使用TO_DATE()函数并将NLS_DATE_FORMAT会话参数作为格式掩码来隐式地尝试转换字符串文字。如果它们匹配,那么它将工作,但这是一个客户端变量,所以可以更改,然后查询将在代码没有更改的情况下中断(并且调试起来很痛苦)。简单的答案是,通过使用TO_DATE()并指定格式掩码(根据上面的查询)或使用ANSI日期文字DATE '2016-03-18' (独立于NLS设置)来确保比较日期值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36087482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档