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 преобразования числа в интервал (дней, часов, минут, секунд).
Перед примером ее использования отформатируем столбцы:
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 преобразует число(лет, месяцев) в интервал
Так как в параметрах функции вывод месяцев показан, как «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 строк обновлено.
!!! Теперь обязательно выполним команду отмены транзакции