SQL возвращает фиксированные данные как в SQL Server, так и в Oracle - PullRequest
2 голосов
/ 13 сентября 2011

Мне нужен общий оператор выбора, который возвращает фиксированное значение / строку без необходимости таблиц, который должен работать как с Oracle, так и с Sql Server.

Например, для Oracle я знаю, что могу использовать:

select 'O' AS INDICATOR from DUAL;

Но на Sql Server это не сработает.

Можно ли это сделать с одним и тем же SQL на Oracle и SQL Server?

Ответы [ 4 ]

2 голосов
/ 13 сентября 2011

Используйте общее табличное выражение (CTE) например

WITH D (INDICATOR)
     AS 
     (
      SELECT * 
        FROM (
              VALUES ('O')
             ) T (c1)
     )
SELECT INDICATOR 
  FROM D;

Или проще в строке:

SELECT *
 FROM (
       VALUES ('O')
      ) D (INDICATOR)
2 голосов
/ 13 сентября 2011

Вы не можете выбирать данные в Oracle без оператора from. Таким образом, вам нужно , чтобы иметь таблицу в Oracle (обычная практика - использовать стандартную таблицу - Dual). Лучшее решение, если вам действительно необходимо выполнить один и тот же запрос на обоих серверах баз данных, - это создать двойную таблицу с одной строкой в ​​MS SQL. Но на самом деле лучше использовать разные запросы для разных серверов (возможно, через какой-то уровень абстракции).

2 голосов
/ 13 сентября 2011

AFAIK, вам потребуются разные запросы, если только вы не можете найти таблицу, которая существует как на SQL Server, так и на сервере Oracle.

Oracle использует таблицу DUAL для фиктивных запросов, в то время как синтаксис простого выбора константы на сервере SQL немного проще:

select 'O' as Indicator

вернет набор записей из одной строки.

P.S. Если вы намереваетесь написать только стандартный SQL и заставить его работать как на SQL Server, так и на Oracle, обратите внимание, что есть много и много различий, даже если вы не используете код на стороне базы данных (хранимые процедуры и функции).

Вне моей головы, некоторые вещи, которые отличаются:

  • Синтаксис оператора Case
  • NVL против IsNull
  • Нулевая сортировка
  • Функции преобразования данных
  • Функции управления строками
  • и т. Д. И т. П.
0 голосов
/ 13 сентября 2011

Вы можете создать таблицу DUAL в SQL Server:

CREATE TABLE DUAL (DUMMY NVARCHAR(1) NOT NULL);

INSERT INTO DUAL VALUES ('X');

и затем использовать тот же запрос, что и в Oracle:

select 'O' AS INDICATOR from DUAL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...