Oracle: первый и последний день месяца

Намедни столкнулся с проблемой узнать первый и последний день месяца определенной даты.
Для того чтобы узнать последний день месяца есть встроенная в Oracle функция LAST_DAY().
Интереснее узнать первый день месяца.
Понравилось следующее решение:

1
add_months(last_day(to_date(:p_date_from,'dd-mm-yyyy'))+1,-1)

по сути мы к заданной дате применяем функцию LAST_DAY(), прибавляем один день и автоматически перешли на следующий месяц. Далее с помощью ADD_MONTHS() отнимаем один месяц от получившейся даты.

Ссылки по теме:
Статья о работе с датой
Форум Oracle

Oracle: to_date()

>Буквально пару дней назад потребовалось использоваться расширенные возможности функции TO_DATE(). В моем случае задача ставилась следующей:
Входным параметром является дата в формате день-месяц-год (dd-mm-yyyy)
Вернуть нужно в формате День недели, число Месяц год (Dy, dd Mon yyyy).
Дело в том, что название дня недели (напр. Sunday) Dy зависит от региональных настроек оракла. Соответственно полагаться на правильные установки не приходится. Вот здесь приходит на помощь доп параметры, так называемые NLS Params.
Для парсинга pubDate в RSS мне понребовался NLS_DATE_LANGUAGE равным ‘american’.

Результат:

1
to_date(:p_date,'Dy, dd Mon yyyy hh24:mi:ss', 'NLS_DATE_LANGUAGE = ''american'' ')

Примечательно, что третий параметр TO_DATE() заключается в кавычки, а если нужно указать кавычки в кавычках, то употребляют две одинарные кавычки.

Ссылки по теме:
Оракловый FAQ по NSL_LANG

Запуск sqlplus

После настройки sqldeveloper’а нужно было настроить sqlplus. Попытка запустить sqlplus из /client/bin закончилась ошибкой:
ORA-12162: TNS:net service name is incorrectly specified
На форумах говорят, что нужно определить переменные окружения: $ORACLE_HOME и $ORACLE_SID. Добавляем их в bash под рутом:

1
2
# export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
# export ORACLE_SID=XE

После этого при запуске sqlplus получаю следующее:
ORA-01034: ORACLE not available
ORA-27121: unable to determine size of shared memory segment
Linux Error: 13: Permission denied

Решение
:

1
2
# cd /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/
# chmod 6751 oracle

И вуаля! Заработало!

Установка Oracle XE

Установка сего чуда прошла без проблем: регистрация на оф. сайте, закачка, запуск rpm пакета, соглашение запускать при загрузке.
Тазик (коробка) работает под управлением Cent OS. Жалко было выбрасывать старое железо. Конфиг: Duron 1.2GHz/512MB/40GB HDD

Дальше в блоге:
Установка на рабочей машине SQLDeveloper’а, коннект к тазику, танцы с бубном.
Запуск на тазике sqlplus, который заставил хорошенько побить в него (в бубен).