lekc.sloweb.ru


Выражения в Oracle SQL

"Выражения в Oracle SQL"
Сортировать: по оценкам | по дате



16.12.18 неправильно [0] правильно
Выражения в Oracle SQL

Готовые приложения, как правило, работают с данными уже существующих таблиц. Основная группа предложений SQL, используемых в работающих приложениях, — это SELECT для выборки и операторы DML для изменения данных таблиц. При всем их синтаксическом различии операторы этой группы роднит использование выражений, составляемых по одним и тем же одинаковым правилам.
В общем случае выражение строится на основе более простых выражений с помощью операторов, функций и прочих конструкций. Началом же для построения любого выражения служат "элементарные", исходные значения, далее не раскрываемые, указанные напрямую тем или иным способом.
Для явно обозначенных величин (values) в русской литературе часто используется калька с американского английского: "литералы". Оригинальное слово literal представляет собой возникшее со временем в североамериканской литературе жаргонное сокращение от literal value, что дословно означает напрямую ("буквально") указанную в тексте величину (средневековое английское значение слова literal не имеет никакого отношения к компьютерному).
Нелишне помнить, что одни и те же величины часто могут быть обозначены по-разному, например, 1 и +1 и так далее (в известном "треугольнике Фреге" предмет — обозначение — смысл literal value скорее "обозначение"). Для разных видов данных в выражениях предусмотрены разные способы обозначения.
Отделение целой части от дробной осуществляется с помощью десятичной точки или же запятой, в зависимости от установок местности ("языковых"). Русский формат записи чисел (в Oracle устанавливается параметром сеанса NLS_NUMERIC_CHARACTERS как ', ') унаследовал исторически французскую традицию употребления в качестве разделителя запятую в отличие от английской точки, унаследованной Северной Америкой как местом разработки СУБД Oracle.
SELECT 123f, DUMP ( 123f ), DUMP ( 123d ) FROM dual; 123F DUMP(123F) DUMP(123D) ---------- -------------------------- 1.23E+002 Typ=100 Len=4: 194,246,0,0 Typ=101 Len=8: 192,94,192,0,0,0,0,0
'Collins', '''tis' (кавычки в кавычках), '!?-@ ', '', '''', '1234' n'Многобайтовая кодировка; по правилам ANSI можно писать и N, и n', n'Тоже многобайтовая кодировка' q'[Строка без 'искажений'. Возможно начиная с версии 10]', q'|ограничивающий символ может быть практически любой|' u'строка в Unicode начиная с версии 10'
Начиная с версии 9 в Oracle поддерживается система указаний моментов и интервалов времени, принятая для SQL комитетами ANSI/ISO по стандартизации SQL. Использованный в примерах ниже формат указания самого значения жестко регламентирован ANSI/ISO. Это касается и типа DATE, для которого Oracle принимает формулировку из стандарта, но по-своему раскрывает ее содержание.
DATE '2003-04-14' (14 апреля 2003 00:00:00; имеет тип DATE, а временная компонента обнулена) TIME '12:30:45' (12.30.45.000000000 пополудни; тип не играет самостоятельной роли в БД и может использоваться только в выражении) TIMESTAMP '2003-04-14 15:16:17' (14 апреля 2003 15:16:17.000000000; этот и следующий пример имеет тип TIMESTAMP ( 9 ) ) TIMESTAMP '2003-04-14 15:16:17.88' (14 апреля 2003 15:16:17.880000000) TIMESTAMP '1997-01-31 09:26:56.66 +02:00' (31 января 1997 09:26:56.
http://www.intuit.ru/studies/cours
источник

16.12.18 неправильно [0] правильно
Выражения в Oracle SQL

ADD_MONTHS ( BDATE, 2 ) 5 ноября 1999 года, 13:30:05 ( ADD_MONTHS ( TRUNC ( SYSDATE, 'year' ), 12 ) - 1 ) - TRUNC ( SYSDATE ) число суток до ближайшего Нового года (типа NUMBER)
Можно заметить, что Oracle, как и стандарт SQL, непоследователен в своем синтаксисе. Сравните указание компоненты момента времени в виде строки текста ('year' в функции TRUNC, а также ROUND) и с помощью ключевого слова (DAY, HOUR в функции EXTRACT).
ADD_MONTHS ( DATE '2009-01-28', 1 ) ADD_MONTHS ( DATE '2009-01-29', 1 ) ADD_MONTHS ( DATE '2008-01-29', 1 ) ADD_MONTHS ( DATE '2009-01-30', 1 )
Функция Логический эквивалент NVL (E1, E2) IF E1 IS NULL THEN E2 ELSE E1 NVL2 (E1, E2, E3) IF E1 IS NULL THEN E3 ELSE E2 NANVL (E1, E2)(IEEE 754) IF E1 IS NAN THEN E2 ELSE E1 COALESCE (E1, E2, E3, …[9-) первое по списку Ei со значением не NULL DECODE ( E1, E2, E3, …[, EN]) IF E1 = E2 THEN E3 [ ELSE IF E1 = E4 THEN E5 […] ] [ELSE EN]
Это не самое хорошее решение, так как иногда приходится повторять сложное выражение вторично, что чревато ошибками и лишними вычислениями. Кроме того, методически оправданно держать правила преобразования в БД, а не в тексте запроса (если только эти правила имеют прикладное значение). На практике же нахождение таблицы преобразования в БД резко замедлит вычисление.
Агрегатные функции иначе называют "стандартными агрегатными" функциями и "агрерирующими" функциями. До версии 8.1.6 они (сокращенным количеством) назывались "статистическими". Они дают скалярный результат, но аргументом им служит столбец значений, чем они конструктивно отличаются от большинства других встроенных функций. Это же сообщает им обобщающий характер.
Начиная с версии 10 Oracle позволяет производить более "серьезные" статистические обобщения данных столбца таблицы, но уже не средствами SQL, а программно, с помощью процедур из встроенного пакета DBMS_STAT_FUNCS. Они позволяют определить соответствие указанного значения тому или иному виду статистического распределения, а также обобщать данные столбца всеми способами стандартных агрегатных функций, но вдобавок со значительным количеством дополнительной обобщающей информации.
Аналитические функции идут дальше агрегатных, не только имея столбцовые аргументы, но и возвращая в виде столбца результат. Они не только позволяют обобщить данные, как агрегатные, но способны делать это без потери детализации.
В лекции № 7 "Введение в Oracle SQL" в подразделе "Несамостоятельность группировки с обобщениями ROLLUP, CUBE и GROUPING SETS"  представленная таблица сравнения содержит ошибки - окончания запросов пропущены. Видимо, ошибки вызваны некорректным переносом материала лекции.
Телефон: +7 (499) 253-9312, факс: +7 (499) 253-9310, e-mail: info@intuit.ru, ICQ: Intuit.ru (632-332-736), Skype: Intuit.ru

источник

16.12.18 неправильно [0] правильно
Выражения в Oracle SQL

В качестве альтернативы функции DECODE (отсутствующее в стандарте решение Oracle, оформленное в виде функции) и других функций условной подстановки значений NVL, NVL2, NANVL и COALESCE начиная с версии 8.1.6 можно пользоваться "поисковым" CASE-выражением, а с версии 9 — "простым" CASE-выражением (оба входят в стандарт SQL-92).
Проверки происходят сверху вниз, пока первое по порядку условное-выражениеI не станет TRUE. Тогда проверки прекратятся, и результатом CASE будет значение выражения-результатаI.
Проверки происходят сверху вниз, пока значение первого по порядку выраженияI не станет равным значению выражения0. Тогда проверки прекратятся, и результатом CASE будет значение выражения-результатаI.
Заметьте, что по нашим данным в результате служащий KING будет помечен как "высокооплачиваемый". Если в операторе CASE проверку зарплаты и местонахождения отдела поменять местами, KING окажется помечен как "работающий в Нью-Йорке".
"Поисковая" разновидность CASE носит более общий характер, нежели "простая", так как допускает условные выражения, которые получены операторами сравнения, отличными от = (равенства).
Из-за того, что конструкция CASE оформлена в виде оператора языка, а не функции, как DECODE, NVL, NVL2, NANVL и COALESCE, она становится не только их более общим заменителем, но к тому же и быстрее их вычислимой, хотя бы и ненамного в каждом отдельном случае. Это создает стимул к применению в программировании именно ее, а не перечисленных функций условной подстановки значений. В то же время, в тексте запроса она обычно занимает больше места.
Еще одна конструкция для формирования выражений существует с версии Oracle 9. Если запрос одностолбцовый и возвращает не более одной строки, его можно указать в круглых скобках в составе выражения на правах значения.
Добавление нуля в выражении выше сделано, чтобы убедить читателя в отсутствии значения у приведенного скалярного выражения. Иначе подошло бы использование функции NVL.
В лекции № 7 "Введение в Oracle SQL" в подразделе "Несамостоятельность группировки с обобщениями ROLLUP, CUBE и GROUPING SETS"  представленная таблица сравнения содержит ошибки - окончания запросов пропущены. Видимо, ошибки вызваны некорректным переносом материала лекции.
Телефон: +7 (499) 253-9312, факс: +7 (499) 253-9310, e-mail: info@intuit.ru, ICQ: Intuit.ru (632-332-736), Skype: Intuit.ru

источник

16.12.18 неправильно [0] правильно
Выражения в Oracle SQL

Самую большую категорию из них составляют скалярные функции, то есть такие, которые принимают скалярные входные значения и вычисляют скалярный ответ. (Скалярность подразумевается здесь в исконном смысле, как признак одиночности величины, в противовес вектору величин. Однако с появлением в Oracle объектных возможностей скалярная величина не обязана быть атомарной, и если эта величина — объект, то она будет иметь известную СУБД структуру).
SELECT LPAD ( ename, 7, '*' ), RTRIM ( ename, 'ITH' ) FROM emp; LPAD(EN RTRIM(ENAM ------- ---------- **SMITH SM **ALLEN ALLEN ***WARD WARD ...
TO_CHAR TO_CLOB TO_NUMBER TO_BINARY_FLOAT/DOUBLE TO_DATE TO_TIMESTAMP TO_YMINTERVAL, TO_DSINTERVAL NUMTOYMINTERVAL, NUMTODSINTERVAL других.
Большинство из них имеет имена, начинающиеся с 'TO_', однако Oracle не пунктуальна в соблюдении этого неформального правила.
SELECT TO_TIMESTAMP ( '10-APR-56' ) FROM dual; SELECT TO_TIMESTAMP ( '10-Апрель-56' , 'DD-MONTH-RR' , 'NLS_DATE_LANGUAGE=RUSSIAN' ) FROM dual; SELECT TO_CHAR ( SYSDATE, 'Day HH24:MI:SS' ) FROM dual;
COLUMN "Неделя в США" FORMAT A13 COLUMN "Неделя по ISO" FORMAT A13 COLUMN "Название дня" FORMAT A13 SELECT TO_CHAR ( DATE '2010-1-1', 'ww' ) "Неделя в США" , TO_CHAR ( DATE '2010-1-1', 'iw' ) "Неделя по ISO" , TO_CHAR ( DATE '2010-1-1', 'day' ) "Название дня" FROM dual ; SELECT TO_CHAR ( DATE '2010-1-4', 'ww' ) "Неделя в США" , TO_CHAR ( DATE '2010-1-4', 'iw' ) "Неделя по ISO" , TO_CHAR ( DATE '2010-1-5', 'day' ) "Название дня" FROM dual ;
Использование других масок преобразования, приведенных в документации по Oracle, помогает справиться с другими неоднозначностями, возникающими при работе со временем.
В лекции № 7 "Введение в Oracle SQL" в подразделе "Несамостоятельность группировки с обобщениями ROLLUP, CUBE и GROUPING SETS"  представленная таблица сравнения содержит ошибки - окончания запросов пропущены. Видимо, ошибки вызваны некорректным переносом материала лекции.
Телефон: +7 (499) 253-9312, факс: +7 (499) 253-9310, e-mail: info@intuit.ru, ICQ: Intuit.ru (632-332-736), Skype: Intuit.ru

источник