Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.005 c
3-42360
grab
2001-12-11 14:13
2002.01.14
заполнение БД данными из текстового файла


1-42512
ZEE
2001-12-26 02:11
2002.01.14
Фиксированная ширина Label


7-42576
РУС
2001-09-25 22:14
2002.01.14
Информация


3-42376
Котелок
2001-12-13 08:22
2002.01.14
Вот такой вопрос по сортировке


7-42589
McSimm
2001-09-28 17:27
2002.01.14
Автоматическое определение настроек LAN для IE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский