Преобразование запроса SQL Server в Oracle - конкретные случаи здесь - PullRequest
1 голос
/ 24 января 2012

Я преобразовываю запрос SQL Server на 300 строк в Oracle, некоторые утверждения застряли, любая помощь здесь была бы фантастической:

1. SELECT L_SPLIT_DATE = NULLIF(SPLIT_DATE, CONVERT(DATETIME, '20000101', 112)) + 1
    FROM OGEN.GEN_P_ARCHIVE

 ----- Not sure about NULLIF and CONVERT. Datetime i think has to become DATE.

2. IF @@ROWCOUNT = 0  

   ---- 2 "@' signs, do I just remove them both?

3. SET @L_EDT = DATEDIFF(dd, 0, DATEADD(dd, 0, @P_EDT)) + (@L_EDT - DATEDIFF(dd, 0, DATEADD(dd, 0, @L_EDT))) + CASE WHEN @L_SDT > @L_EDT THEN 1 ELSE 0 END;

DATEDIFF, DATEADD, они одинаковы в Oracle?

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Что касается SELECT

SELECT NVL(SPLIT_DATE, TO_DATE ('20000101', 'YYYYMMDD')) + 1 AS L_SPLIT_DATE FROM OGEN.GEN_P_ARCHIVE

Что касается ROWCOUNT, то это немного сложнее - без контекста, на который сложно ответить.

Что касается DATEDIFF иDATEADD - в Oracle вы можете просто работать с - и +, Oracle интерпретирует операнды как DATE и «количество дней» (может быть с плавающей запятой) соответственно.

0 голосов
/ 24 января 2012

Это запрос?Я не знаю много о SQL Server, но вам может понадобиться блок PL / SQL ...

в любом случае для запроса SELECT должен выглядеть следующим образом, обратите внимание на псевдоним L_SPLIT_DATE (не присваивание):

SELECT (NVL(SPLIT_DATE, TO_DATE('20000101', 'YYYYMMDD')) + 1) L_SPLIT_DATE FROM OGEN.GEN_P_ARCHIVE

для ROWCOUNT вы должны выполнить счет как независимый запрос, если только последний оператор не является обновлением или удалением DML, но, к сожалению, не для выбора.

Дело в том, ЕСЛИ у вас есть, в качестве процедурной инструкции вы должны знать, как обращаться с оракулом, если вы не можете сделать это в PL / SQL, вам придется выяснить это с помощью проверки EXISTS или подзапроса.было бы полезно, если бы вы показали нам, что после IF.

для DATEDIFF, DATEADD Я цитирую @ Yahia.

Что касается DATEDIFF и DATEADD - в Oracle вы можетепросто работайте с - и +, Oracle интерпретирует операнды как DATE и «количество дней» (может быть с плавающей запятой) соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...