powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / 4 вопроса...
20 сообщений из 20, страница 1 из 1
4 вопроса...
    #32056992
pvnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я тут потихоньку оракл пытаюсь изучать, вот какие вопросы у меня накопились:
1) что такое псевдо столбец ROWNUM?
2) какое время будет актуальным ретроспективный запрос к бд. Т.е. могу ли я потребовать с бд ее прошлогоднего состояния ?
3) Что такое таблица DUAL?
ну и
4) в чем разница между having & where...
...
Рейтинг: 0 / 0
4 вопроса...
    #32057013
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 вопрос: <...> Псевдостолбцы - это дополнительные функции, которые можно вызывать только из SQL-операторов. Синтаксицески они аналогичны столбцам таблиц, однако реально псевдостолбцы совсем не похожи на них. Их скорее можно назвать частью процесса выполнения SQL-операторов.<...>

<...>Псевдостолбец ROWNUM возвращает номер текущей строки. Он полезен для ограничения общего числа строк и используется в первую очередь в условиях WHERE запросов и командах SET операторов UPDATE. Значение, возвращаемое ROWNUM, имеет тип NUMBER. Например, следующий запрос возвращает только две первые строки таблицы students:

select * from students where rownum < 3;

ROWNUM первой строки равен 1, ROWNUM второй строки - 2 и т.д.

ВНИМАНИЕ: Значение ROWNUM присваеваются строке до сортировки строк.<...> (процетировано из книги Приграммирование на языке PL/SQL)

2 вопрос: не совсем понятен. Ибо данные в Оракуле модифицируются и после commit изменения принимают силу ... ну в общем-то без сохранения предыдущих значений. Хотя возможности аудита в Оракуле имеются

3 вопрос: есть такая таблица в схеме SYS
CREATE TABLE DUAL (
DUMMY VARCHAR2 (1) ) ;

GRANT SELECT ON DUAL TO PUBLIC WITH GRANT
OPTION;

Применяется например при выборке слудующего значения из последовательностей (SEQUENCES)

select my_sequence.nextval into v_my_var from dual;

4 вопрос: когда-то я задавал этот вопрос своему коллеге... но так и не понял, что это такое. А в чем разница между having & where ?
...
Рейтинг: 0 / 0
4 вопроса...
    #32057024
pvnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1)rownum - те факт-ки аналог select top N ... но сначала строки выбираются, потом сорт-ся и отобра-ся
2) в оркле 9-м ввели такое.
те 11-aug-01 05:08 в были некоторые данные, их поменяли, потом выполнили

execute dbms_flashback.enable_at_time('11-aug-01 05:08');

и при выборке получили данные на '11-aug-01 05:08'
вопрос собстно - на сколько можно отрутить..
кстати вопрос появился -
как вернуться к текущим данным ...
3) ясно
4) :)
...
Рейтинг: 0 / 0
4 вопроса...
    #32057028
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vopros 4:
w WHERE nel'zja ispol'zowat' agregatnie funktii (takie kak sum, avg i t.d), a HAVING kak raz dlja etogo i xorosch.
...
Рейтинг: 0 / 0
4 вопроса...
    #32057034
ora600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SAA_
Насчет 4-го - это шутка ? :-)
Можно, например, разными способами искать дубликаты значений колонки/набора . Интересно просто, кто каким способом пользуется (без group by ... having count(...) > 1) :-)
...
Рейтинг: 0 / 0
4 вопроса...
    #32057069
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет... насчет 4 это не шутка. Я дейсвительно никогда не использовал эту функциональность... сейчас буду пробовать
...
Рейтинг: 0 / 0
4 вопроса...
    #32057238
Vlad_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4) в предложении WHERE нельзя напрямую использовать агрегатные ф-ии, только если не применять подзапрос ес-но.
HAVING должно относиться ТОЛЬКО к агрегатам и полям, выбранным по GROUP BY

Best rgrds, M.Gruber
...
Рейтинг: 0 / 0
4 вопроса...
    #32057724
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SAA_: Вроде бы объяснял толково...

В общем, WHERE фильтрует записи до группировки. А HAVING это тот же самый WHERE, но для полученный групп.

То есть, ты используя HAVING ты можешь выбрать только те группы, которые удовлетворяют твоему условию, например
Код: plaintext
1.
2.
3.
4.
SELECT bank, group, count(*) from accounts
WHERE amount< 0  and ccy='USD'
GROUP BY bank, group
HAVING sum(amount)< 10000 

посчитает число должников по долларам по группам, а потом отберёт только те группы, в которых суммарный долг выползает за 100 баксов .
...
Рейтинг: 0 / 0
4 вопроса...
    #32057874
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моем конкретном случае не было дано вообще определение должников, а ты уже реализацию предлагаешь :) Между прочим, посидев и подумав мы дали весьма стройное определение должников :)
...
Рейтинг: 0 / 0
4 вопроса...
    #32058191
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SAA_: Пример был придуман "на скорую руку". Просто никакой другой идеи, как продемонстрировать использование HAVING мне на ум не пришло...

Кстати, интересно, сколько читателей поняли, почему в запросе стоит 10000, а речь идёт о 100 баксах?
...
Рейтинг: 0 / 0
4 вопроса...
    #32058485
DiMonstr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на счет having и where
ну а если совсем точно, то:
where - отбирает записи ДО того как готов запрос, т.е. это параметр первичного выбора строк. в то время как having активизируется ПОСЛЕ того как запрос уже готов, т.е. проводится сканирование результата, вследствие чего здесь уже вовсю можно юзать count(*)<1000, sum(pay_sum)...
в ранних версиях SQL, помоему, еще в interbase можно было юзать having вместо where, но это крайне не эффективно, ибо приходится делать полное сканирование таблицы, а только потом оставлять нужные строки. Современные DBMS вообще не позволяют использовать having, кроме случая group by.
...
Рейтинг: 0 / 0
4 вопроса...
    #32058733
Фотография hinotf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работа для DBA:
1) установить параметр UNDO_RETENTION = seconds (указывает, насколько далеко вы хотите откатывать свою базу)
2) выдать привелегии навроде FLASHBACK ANY TABLE, и EXECUTE на пакет DBMS_FLACHBACK
3) обеспечить необходимый размер табличного простарнства UNDO
всякую инофрмацию можно смотреть здесь:
V$UNDOSTAT
V$ROLLSTAT
V$TRANSACTION

Работа для программиста
DBMS_FLASHBACK.DISABLE возвращет вас к текущей версии данных (не удаляет старые данные!)
можно пользоваться и в подзапросе, вместе с текущими данными

SELECT MAX(salary) FROM
(
SELECT * FROM employees
MINUS
SELECT * FROM employees AS OF TIMESTAMP TRUNC(SYSDATE)
);

таким образом выберется макс. зарплата из всех добавленных сегодня сотрудников
...
Рейтинг: 0 / 0
4 вопроса...
    #32058768
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To vSkv: думаю один читатель и один автор все-таки поняли почему 10000, а не 100 :)
...
Рейтинг: 0 / 0
4 вопроса...
    #32058789
coursing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
10000 вместо 100 только для избежания округления, деления и прочих непр. гадостей.

(на самом деле 10000 - это кол-во центов)

Я прав?
...
Рейтинг: 0 / 0
4 вопроса...
    #32059100
ora600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а зачем в центах ? :-)
Попытка обмануть природу и накапливающуюся ошибку округления при суммировании денюжек? :-)
...
Рейтинг: 0 / 0
4 вопроса...
    #32059109
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это чтобы поняли только 2 человека из форума :-))
...
Рейтинг: 0 / 0
4 вопроса...
    #32059453
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле это действительно вынужденная мера: в соответствии с ISO8583 все суммы задаются в минимальных единицах валюты: в центах, сантимах, пфенингах. И даже в копейках.
...
Рейтинг: 0 / 0
4 вопроса...
    #32059626
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но требование по этому ISO 8583 вполне разумно! Ведь частенько на теретории бывшего союза происходили деноминации... что для системы было бы печально, если бы не волшебный показатель степени у валюты :)
...
Рейтинг: 0 / 0
4 вопроса...
    #32059933
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Месье SAA_, вы никогда не слышали страшную сказку про то, как белоруссы свои зайчики деноминировали???
В он-лайне, между прочим :)
...
Рейтинг: 0 / 0
4 вопроса...
    #32059973
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To vSkv: слышал, но это булижник в вашу контору, которая игнорила показатель степени и использовала amount / 100 во многих местах
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / 4 вопроса...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]