Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.14;
Скачать: CL | DM;

Вниз

В 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.016 c
1-42425
Kevin
2001-12-26 15:38
2002.01.14
Очень срочно надо


1-42503
DerZky
2001-12-25 20:25
2002.01.14
Как на BitBtn переносить текст?


4-42636
Xeon
2001-11-10 19:57
2002.01.14
Программа и ОЗУ


6-42523
Smart
2001-10-10 11:27
2002.01.14
Remote Logoff needed. EXTREMELY URGENT


4-42612
sandman
2001-11-10 20:34
2002.01.14
Отсылка сообщения через OLE