【问题标题】:How to Convert/Migrate MS-SQL Server SELECT Query To Oracle & MySQL?如何将 MS-SQL Server SELECT 查询转换/迁移到 Oracle 和 MySQL?
【发布时间】:2020-04-13 12:14:27
【问题描述】:

在我们的产品中,我们正在扩展对 Oracle 和 MySQL 的支持,所以任何人都可以帮助迁移以下示例 SQL 查询,该查询可以在 MS-SQL Server 上正常工作,我已经尝试过,但不知何故它不适用于 Oracle /MySQL,非常感谢您的帮助,并将自行转换其余查询,谢谢。

SELECT  A.SERVERID,A.DATAID 
                ,A.CREATETIMESTAMP AS 'Date Time'
                ,A.OBJECTINSTNAME
                ,A.PROJECTNAME 
                ,TEMP_IND_1.TEMP_ROW_NUM FROM DATALOG AS A WITH (NOLOCK) INNER JOIN
                ( 
                    SELECT      DATAID,ROW_NUMBER() OVER(ORDER BY CREATETIMESTAMP DESC) AS TEMP_ROW_NUM FROM    DATALOG WITH (NOLOCK)

            WHERE PROJECTNAME='ProjectA'
            ) AS TEMP_IND_1 ON A.DATAID = TEMP_IND_1.DATAID

         WHERE TEMP_IND_1.TEMP_ROW_NUM BETWEEN 1 AND 50;

【问题讨论】:

  • 请包括您尝试过的内容以及您遇到的错误消息或意外行为,因为就您的问题而言,它基本上是这样写的:请免费为我工作。我知道这不是你的意图,但它仍然是这样读的。顺便说一句,我认为您无需在此查询中进行太多修改即可使其适用于 oracle 和 mysql v8。
  • @Shadow 绝对不是,这取决于您的想法以及在决定意图之前如何看待它,我相信,不过感谢您的评论。

标签: mysql sql sql-server oracle


【解决方案1】:

您可以使用相同的查询来删除WITH (NOLOCK) 部分。因为它们在 oracle 中无效,并且您在 oracle 中不需要它们。并且在没有as 关键字的情况下给出了列别名,并且列别名必须是双引号。所以你的查询变成了这样:

SELECT  A.SERVERID,A.DATAID 
                ,A.CREATETIMESTAMP  "Date Time"
                ,A.OBJECTINSTNAME
                ,A.PROJECTNAME 
                ,TEMP_IND_1.TEMP_ROW_NUM FROM DATALOG A INNER JOIN
                ( 
                    SELECT DATAID,
                           ROW_NUMBER() OVER(ORDER BY CREATETIMESTAMP DESC) TEMP_ROW_NUM 
                           FROM    DATALOG 
            WHERE PROJECTNAME='ProjectA'
            ) TEMP_IND_1 ON A.DATAID = TEMP_IND_1.DATAID
         WHERE TEMP_IND_1.TEMP_ROW_NUM BETWEEN 1 AND 50;

编辑:

对于 mysql,您只需要更改会话以在不使用 with (no lock) 表达式的情况下执行原始查询之前将隔离级别设置为 read uncommited

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
 -- your query without no lock expressions
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ; -- set back to original isolation level

【讨论】:

  • 感谢您的快速更新,非常感谢,它很有见地。
  • 您想为 MySQL 语法添加任何 cmets,谢谢。
猜你喜欢
  • 2010-09-18
  • 2022-08-18
  • 2013-10-02
  • 2014-01-10
  • 2019-12-07
  • 2012-11-15
  • 2019-03-01
  • 2014-03-31
  • 2018-11-26
相关资源
最近更新 更多