Выбрать из ничего в Oracle без ссылки на двойную таблицу? - PullRequest
0 голосов
/ 14 февраля 2019

выбор из ничего в Oracle SQL происходит при обращении к двойной таблице, например

SELECT sysdate FROM dual;

Теперь я хотел бы получить запрос, который также работает для PostgreSQL, но выбрать из двойного там невозможно,Я знаю, что могу отбросить всю часть FROM, но тогда она не сработает в Oracle.

Я также пробовал такие вещи, как SELECT CURRENT_TIMESTAMP FROM VALUES(1)) V(C);, но Oracle тоже не может этого сделать.

Так есть ли способ выбора из ниоткуда без использования таблицы dual в Oracle SQL?

Ответы [ 4 ]

0 голосов
/ 23 февраля 2019

Приведенный ниже код генерирует поддельную строку в Oracle и Postgres (10+) с использованием функции XMLTABLE.Этот код довольно странный, но он не требует никаких пользовательских объектов.

--Generate a fake row in either Oracle or Postgres.
select *
from xmltable
(
    --The expression syntax is different for Oracle and Postgres.
    --Oracle can use a literal, Postgres must reference the XML.
    --The string '' is null in Oracle but not null in Postgres.
    case when '' is null then '1' else '/a' end passing '<a>1</a>'
    columns test int path '.'
);

test
----
   1
0 голосов
/ 14 февраля 2019

sysdate в Oracle является встроенной функцией, то есть не столбцом таблицы базы данных.Вы можете использовать любую таблицу, если запрос возвращает только одну строку, например,

select sysdate from EMP where rownum < 2
0 голосов
/ 14 февраля 2019

Если у вас небольшая таблица TABLE_B хотя бы с одной строкой, вы можете попробовать выбрать из нее одну строку.

select sysdate from TABLE_B where rownum < 2;

Содержимое таблицы не имеет значения, потому что вы выиграли 'не выбирать ни один из его столбцов.

0 голосов
/ 14 февраля 2019

Либо создайте таблицу с именем dual в Postgres, состоящую из 1 строки и 1 столбца

create table dual as (select 1);

, и вы можете использовать ее в Postgres так же, как в Oracle

select 'whatever' from dual;
 ?column?
-----------
 whatever
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...