[英]How to Convert/Migrate MS-SQL Server SELECT Query To Oracle & MySQL?
在我們的產品中,我們正在擴展對 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;
您可以使用相同的查詢刪除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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.