Форум: "Базы";
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];
ВнизВ Oracle есть dual, а что есть в InterBase e? Найти похожие ветки
← →
csf (2001-12-10 16:28) [0]Добрый день!
Слышал, что есть и в IB что-то подобное dual, из разряда широко не документированных возможностей. Кто может просветить?
С уважением, CSF.
← →
Mick (2001-12-10 16:35) [1]"Dual" в Оракле нужен только потому, что у него все select"ы требуют FROM"а.
Зачем нужен аналог Dual"а в IB непонятно.
← →
csf (2001-12-10 17:40) [2]Хорошо,
как в IB сделать то что в Oracle делается так
select "AAA", "BBB", "CCC" from dual;
← →
Mick (2001-12-10 17:54) [3]Если не в SP то можно так
select "AAA", "BBB", "CCC" from <Любая_существующая_таблица>
← →
csf (2001-12-10 18:11) [4]2Mick
...и что будет?
В результирующей выборке будет столько записей, сколько содержит эта любая таблица. А надо городить distinct или еще что-то.
В Oracle dual не дергает никакие таблицы. Можно получить значение сиквенса/генератора запросом
Oracle
select myseq.curvalue as A from dual
IB
select gen_id(my_gen, 0) as A from ????
Вопрос, к сожалению, остался...
← →
Mick (2001-12-10 18:15) [5]Я же сказал, что если не в SP то вот так криво.
А в SP все достаточно прямолинейно и dual просто не нужен.
← →
csf (2001-12-10 18:28) [6]В Оракле ХП тоже есть...:)
← →
Mick (2001-12-10 18:32) [7]Попробую еще раз.
Dual в оракле живет патамучта его SQL диалект всегда требует присутсвия клаузы "FROM" если юзер сказал "SELECT".
В IB этого требования нет. Потому в нем и DUAL"а нет.
← →
Yuvich (2001-12-10 18:47) [8]>csf
"В результирующей выборке будет столько записей, сколько содержит эта любая таблица." - это точно, кто-нибудь проверял?
В Informix то же нет таблицы dual, но выборка возвращает столько записей, сколько возвратит функция, поэтому делаешь from из любой системной таблицы.
← →
csf (2001-12-10 18:52) [9]Ну туповат я малость.
Растолкуй мне как написать синтаксически правильное SQL-предложение на IB-диалекте, выдающее в качестве результата текущее значение генератора My_Gen. И без FROM. И без SP. Сможешь?
Да и странно смотрится
select F1, F2, F3
не так ли?
← →
paul_shmakov (2001-12-10 18:56) [10]interbase:
select gen_id(my_gen, 1) from rdb$database
← →
Mick (2001-12-10 19:02) [11]
CREATE TRIGGER TR_NEW_ITEM FOR MY_ITEMS BEFORE INSERT POSITION 0 AS
BEGIN
New.MI_ID = Gen_ID(GenItems,1);
END
← →
csf (2001-12-10 19:15) [12]2 paul_shmakov ©
Спасибо!
Уточните еще, pls,
rdb$database содержит всегда одну и только одну запись?
← →
evgeg (2001-12-10 22:31) [13]> Mick
> Dual в оракле живет патамучта его SQL диалект всегда требует присутсвия клаузы "FROM" если юзер сказал "SELECT".
В IB этого требования нет. Потому в нем и DUAL"а нет.
Приведи, пожалуйста, пример select-а без from.
← →
panov (2001-12-10 23:44) [14]Для примера:
получить имя пользователя в текущем сеансе: SELECT USER FROM dual
получить текущее время в системе на сервере: SELECT systime FROM dual
получить текущую дату в системе на сервере: SELECT sysdate FROM dual
Это в ORACLE.
Как то же самое получить в IB?
Без написания процедур?
Есть ли такая возможность?
← →
paul_shmakov (2001-12-11 01:38) [15]2 csf:
да, select ... from rdb$database выдает одну запись.
2 mick:
тригер не всегда удобен, а скорее наоборот. причина в том, что идентификатор записи обычно нужен уже до того, как эта запись будет записана в базу. особенно остро это стоит в midas приложениях. поэтому и приходится писать функции на сервере приложений типаследующей:
function TRemoteDataModule.GenID(const TriggerName: string): Integer;
begin
with ibqGen do
begin
Active := false;
SQL.Text := "select gen_id(" + TriggerName + ", 1) as id from rdb$database";
Active := true;
Result := ibqGenID.asInteger;
Active := false;
end;
end;
2 panov:
не во всех версиях interbase это будет работать (только начиная с 6)
SELECT USER FROM dual == select user from rdb$database
SELECT systime FROM dual == select cast("now" as time) from rdb$database
SELECT sysdate FROM dual == select cast("today" as date) from rdb$database
← →
evgeg (2001-12-11 07:47) [16]Никто не мешает самому создать таблицу с одной записью.
А как же все таки с select без from??
← →
Mick (2001-12-11 09:15) [17]Триггер приведен мной только в качестве примера SQL кода. Я и не утверждал что это самый удобный вариант.
В нем делается аналог ораклового селекта сикванса из дуала.
Если внимательно присмотреться, то видно что нет ни "Select" ни "From" ни "Dual".
← →
Bill (2001-12-11 10:09) [18]Удобная возможность: создаеш таблицу dual например
create table dual(DUMMY VARCHAR(1));
инсертиш туда строку, например Х, далее пользуешься также, как в Oracle.
Меньше мороки и переносимость кода высокая.
← →
csf (2001-12-11 10:29) [19]Спасибо все откликнувшимся, особенно paul_shmakov ©.
И за совет от Bill.
← →
Bachin (2001-12-12 18:46) [20]IMHO создавать свою таблицу не слишком хорошо. Можно воспользоваться практикой Informix: select ... from systables where tabid = 1 (это и есть сама systables которая всегда есть :)
← →
evgeg (2001-12-12 20:47) [21]> Mick
Сравни:
> Dual в оракле живет патамучта его SQL диалект всегда требует присутсвия
> клаузы "FROM" если юзер сказал "SELECT".
> В IB этого требования нет. Потому в нем и DUAL"а нет.
> Триггер приведен мной только в качестве примера SQL кода. Я и не
> утверждал что это самый удобный вариант.
> В нем делается аналог ораклового селекта сикванса из дуала.
> Если внимательно присмотреться, то видно что нет ни "Select" ни "From" ни
> "Dual".
← →
Jey (2001-12-12 22:26) [22]>>csf © (10.12.01 18:52)
>>Ну туповат я малость.
>>Растолкуй мне как написать синтаксически правильное SQL-предложение на >>IB-диалекте, выдающее в качестве результата текущее значение генератора >>My_Gen. И без FROM. И без SP. Сможешь?
А так разве не получится ?
gen_id(mygen,0)
← →
Fay (2001-12-12 23:03) [23]Информация о генераторах лежит в rdb@generators
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c