русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

II.3.3. Некоторые функции преобразования


Дата добавления: 2015-07-09; просмотров: 910; Нарушение авторских прав


 

??

Q3_11 Символьное представление столбца ROWID переводится в формат ROWID с помощью функции CHARTOROWID

 

demo@10g> SELECT last_name FROM employee

WHERE ROWID = CHARTOROWID('AAAM6cAAEAAAAIGAAd');

 

LAST_NAME

---------------

JAMES

 

Зачем нужна эта функция. Запрос SELECT last_name FROM employee

WHERE ROWID ='AAAM6cAAEAAAAIGAAd' дает т от же результат

Аналогично для rowidtochar. Попытка использовать dbms_rowid с тем, чтобы перевести расширенный формат rowid (такой сейчас и есть) в restricted

demo@10g> select dbms_rowid.rowid_to_restricted(rowid,0) from employee;

 

DBMS_ROWID.ROWID_T

------------------

00000206.0013.0004

……………………..

 

Тоже ни к чему не привела

demo@10g> select rowidtochar('00000206.0013.0004') from dual;

 

ROWIDTOCHAR('00000

------------------

00000206.0013.0004

 

demo@10g> select chartorowid('00000206.0013.0004') from dual;

 

CHARTOROWID('00000

------------------

00000206.0013.0004

??

 

В Oracle для таблиц предметной области создается дополнительный столбец с именем ROWID, значения которого определяют место хранения строки таблицы с этим значением ROWID (номер файла, номер блока в этом файле, номер записи в этом блоке).

Символьное значение в скобках предварительно было получено запросом:

Select rowid from employee where first_name=’ JAMES’;

 

 

Q3_12 Функция NUMTODSINTERVAL преобразования числа в интервал (дней, часов, минут, секунд).

Перед примером ее использования отформатируем столбцы:

demo@10g> col число_дней_в_дни format a20

demo@10g> col число_часов_в_дни format a20

demo@10g> col число_минут_в_дни format a20

demo@10g> col число_секунд_в_дни format a20

 

demo@10g> select employee_id,



(NUMTODSINTERVAL(employee_id,'day')) "ЧИСЛО_дней_в_дни",

(NUMTODSINTERVAL(employee_id,'hour')) "число_часов_в_дни",

(NUMTODSINTERVAL(employee_id,'minute')) "Число_минут_в_дни",

(NUMTODSINTERVAL(employee_id,'second')) "Число_секунд_в_дни"

from employee

where department_id=10;

 

Q3_13 Эту функцию можно использовать и для преобразования числа, получаемого из даты в интервал (дней, часов, минут, секунд)

demo@10g> demo@10g> select employee_id, hire_date, NUMTODSINTERVAL(to_char(hire_date,'dd'),'day')

from employee

where department_id=10;

 

 

Q3_14 Можно вычитать и складывать значения, возвращаемые функцией NUMTODSINTERVAL.

 

select NUMTODSINTERVAL(to_char(ship_date, 'dd'),'day') - NUMTODSINTERVAL(to_char(order_date, 'dd'),'day') from sales_order

where to_char(order_date, 'yy')=89;

 

??Зачем такая точность секунд? Как отформатировать такой тип данных, чтобы доли секунды не выводились? Что это за тип данных «INTERVAL DAY(9) TO SECOND»

 

 

??

Не забыть привести из документации (file:///D:/Ora10.2_.doc/server.102/b14200/functions104.htm#i89943) пример использования в аналитической функции функции преобразования NUMTODSINTERVAL

В соответсвующем разделе

 

 

demo@10g>

SELECT manager_id, last_name, hire_date,

COUNT(*) OVER (PARTITION BY manager_id ORDER BY hire_date

RANGE NUMTODSINTERVAL(100, 'day') preceding) AS t_count

FROM employee

where manager_id is not null;

 

??

Q3_15 Функция NUMTOYMINTERVAL преобразует число(лет, месяцев) в интервал

demo@10g>select employee_id, NUMTOYMINTERVAL(employee_id,'year')

from employee

where department_id=10;

 

 

demo@10g>select employee_id, NUMTOYMINTERVAL(employee_id,'month')

from employee

where department_id=10;

Q3_16 Функция SCN_TO_TIMESTAMP(ORA_ROWSCN) преобразует псевдостолбец

ORA_ROWSCN (содержащий номер последней транзакции с таблицей) во временную метку – время выполнения транзакции.

demo@10g> update employee

set salary=3000

where employee_id=7369;

demo@10g> commit;

demo@10g> SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM employee

WHERE employee_id = 7369;

 

SCN_TO_TIMESTAMP(ORA_ROWSCN);

----------------------------------

05.08.08 19:56:02,000000000

Через несколько минут:

demo@10g> update employee

set salary=800

where employee_id=7369;

demo@10g> commit;

demo@10g> SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM employee

WHERE employee_id = 7369;

 

SCN_TO_TIMESTAMP(ORA_ROWSCN)

----------------------------------

05.08.08 19:59:17,000000000

 

Q3_17 Использование функции to_char(date).

Вывести дату и точное время оформления заказов, на покупки сделанные в ноябре 1989г.

demo@10g> select to_char(ship_date,'DD-MON-YYYY HH24:MI:SS')

from sales_order

where to_char(ship_date,'yyyy')=1989 and

to_char(ship_date,'mm')=11;

 

Так как в параметрах функции вывод месяцев показан, как «MON», месяц выводится символами «НОЯ» вне зависимости от формата даты в сеансе:

 

demo@10g> select sysdate from dual;

 

SYSDATE

--------

06.08.08

 

Q3_18 Использование функции to_date(строка символов).

Изменить дату оформления некоторых заказов.

demo@10g> update sales_order

set ship_date=to_date('30.11.89')

where to_char(ship_date,'yyyy')=1989 and

to_char(ship_date,'mm')=11;

 

5 строк обновлено.

 

Измененение даты представлено символьной строкой '30.11.89', формат которой совпадает с форматом сеанса. Если такого совпадения нет, в функции to_date надо указывать дополнительные параметры.

 

demo@10g> update sales_order

set ship_date=to_date('30-nov-89','dd-mon-yy','nls_date_language=american')

where to_char(ship_date,'yyyy')=1989 and

to_char(ship_date,'mm')=11;

5 строк обновлено.

 

!!! Теперь обязательно выполним команду отмены транзакции

demo@10g>rollback;

Откат завершен

 



<== предыдущая лекция | следующая лекция ==>
II.3.2. Некоторые функции даты и времени | II.3.4. Функции DECODE, CASE, DUMP, ORA_HASH, VSIZE


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.204 сек.