Joomla 3.1 Templates by FatCow Coupon

Подсчитать сколько воскресений , понедельников , суббот и тд в заданном году

Категория: Блог
Опубликовано 24.05.2017
Подсчитать количество дней недели в заданном году 
то есть сколько было в указанном году понедельников вторников воскресений ...
можно следующим образом :
   select count(1) dwcount,
          to_char(to_date('01/01/1940', 'DD/MM/YYYY') + level - 1, 'DAY') daywe -- 1940 это год , который нам нужен
     from dual
   connect by level <
              to_number(to_char(Trunc(To_Date('1940' + 1, 'YYYY'), 'YYYY') - 1, -- 1940 это год , который нам нужен
                                'ddd')) -- считаем колч дней 
    group by to_char(to_date('01/01/1940', 'DD/MM/YYYY') + level - 1, 'DAY'); -- группируем запрос по дням
 

индекс на вторичном ключе, зачем он нужен? секретные материалы архитектора СУБД

Категория: Блог
Опубликовано 24.05.2017

проще всего разобраться в этом на примерах
создадим две таблицы

create table tsp(n number primary key); 
-- заполним таблицу данными
insert into tsp
select level from dual connect by level < 100001;


-- создадим вторую таблицу

Подробнее...

Обновление данных WHERE CURRENT OF

Категория: Блог
Опубликовано 24.05.2017

Если вы используете для обновления или удаления данных курсор select for update, то использование WHERE CURRENT OF
в этом случае наиболее удобно.
Выражение CURRENT как показано используется после конструкции WHERE и имеет следующий синтаксис

UPDATE имя таблицы
  SET обновляемые поля и значения
  WHERE CURRENT OF имя курсора;


для обновления данных

Рассмотрим несколько примеров:
подготовим тестовые данные

create table tab11 as select * from all_objects where rownum < 25;



обновление данных с использованием WHERE CURRNT OF

declare 
    cursor C is
    select *
      from tab11 t
     FOR UPDATE OF object_name, owner; 
begin
  FOR i in C loop
   update tab11 set object_name = 'update1' , owner = 'OW'  
   where current of C;
  end loop; 
  commit;  
end;



таким образом, мы, обновляем каждую запись нашего курсора заданным значением.

простой и элегантный способ вставки записей в таблицу без перечисления полей

Категория: Блог
Опубликовано 24.05.2017

для демонстрации создадим некоторую таблицу на основе all_objects

 create table s_obj as select * from all_objects where rownum < 5


в данном случае таблица содержит 4 записи
с помощью инструкции PL SQL заполним данную таблицу следующим образом

Подробнее...

как размножить строки... cross join и connect by

Категория: Блог
Опубликовано 24.05.2017

итак , нам необходимо размножить строки в некоторой таблице, на основе заданного запроса 
пусть это будет следующий запрос

select object_name from all_objects where object_type = 'CLUSTER'


этот запрос вернет нам 10 строк , по условиям задачи необходимо повторить эти 10 строк по 10 раз

создадим таблицу с размноженными строками , здесь на поможет конструкция cross join и оператор иерархии connect by

Подробнее...

Использование типа Timestamp в oracle

Категория: Блог
Опубликовано 24.05.2017

TIMESTAMP – специальный тип данных в oracle расширяющий возможности типа данных date

Представлен в трех вариантах:
timestamp
Год, месяц, часы , минуты , секунды 

timestamp with local time zone
то же что и предыдущий тип данных, но дополнительно включает еще и следующие значения временных зон 
time_zone_hour и time_zone_minute или же time_zone_region

Подробнее...

Использование GUID в ORACLE

Категория: Блог
Опубликовано 24.05.2017

GUID некоторая уникальная последовательность символов, в некоторых случаях, может использоваться в качестве первичного ключа. 
Рассмотрим основные работы с GUID в ORACLE.

Получить GUID в ORACLE можно, воспользовавшись функцией 
sys_guid()
запрос в этом случае будет выглядеть следующим образом

Подробнее...

Загружаем дамп с Oracle Enterprise на OracleXE

Категория: Блог
Опубликовано 24.05.2017

в данном материале упоминается дамп для одной схемы, но, для нескольких схем, или для БД дамп заливается аналогично

1. Cнимаем дамп на источнике

#>expdp schemas=USER1 dumpfile=dampfiledat.dmp


(пользователь sys as sysdba пароль /)

Подробнее...

Анализ отчетов AWR

Категория: Блог
Опубликовано 24.05.2017

1.Что такое AWR отчеты 
2. Для чего используются AWR отчеты 
3. Построение AWR отчетов 
4. Системные представления AWR репозитория отчетов 
5. AWR отчет в формате HTML 
6. Основные параметры отчетов AWR 
7. На что еще следует обратить внимание! 

1. Что такое AWR отчеты 

Automatic Workload Repository представляет из себя набор внутренних таблиц словаря данных БД Oracle и специальный фоновый процесс MMON, который появился в версии Oracle10g. 
Периодически AWR создает статистическую копию (снимок) и сохраняет информацию в таблицах расположенных в табличном пространстве SYSAUX. По умолчанию регулярный период сбора установлен на 60 минут. Это значение может быть уменьшено до 10 минут при желании. Механизм сбора статистической копии (awr snapshot) установлен в базе данных 10G по умолчанию и в отличии от пакета statspack установки на автоматический сбор информации не требуется. 

Подробнее...

Поиск известного значения в неизвестной базе...

Категория: Блог
Опубликовано 24.05.2017

Иногда, в процессе работы ,приходится сталкиваться с задачами, 
когда знаешь некоторое значение в базе , например уникальный идентификационный номер,
и необходимо определить в каких таблицах, и каких столбцах базы данное значение расположено

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

Подробнее...

Использование DBMS_METADATA

Категория: Блог
Опубликовано 24.05.2017

Часто в работе возникают ситуации , когда необходимо посмотреть исходный код DLL обьекта , а специальных графических средств нет под рукой
в этом нам поможет пакет DBMS_METADATA и метод GET_DDL
DBMS_METADATA.GET_DDL -- входные параметры
object_type - Тип обьекта (TABLESPACE, CONSTRAINT , CONSTRAINT, Index)
name - Наименование обьекта например : USERS
schema - схема , по умолчанию схема сессии пользователя или SYS 
приведем некоторые примеры 

-- извлечь исходный код для табличного пространства USERS

select DBMS_METADATA.GET_DDL('TABLESPACE','USERS') from dual
/*
  CREATE TABLESPACE "USERS" DATAFILE 
  '/path/users01.dbf' SIZE 52000
  AUTOEXTEND ON NEXT 130000 MAXSIZE 32007M
  LOGGING ONLINE PERMANENT BLOCKSIZE 8192
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO
   ALTER DATABASE DATAFILE 
  '/path/users01.dbf' RESIZE 917504000
  */

Подробнее...

Model. SQL - высший пилотаж , имитация Excel

Категория: Блог
Опубликовано 24.05.2017

Оператор sql Model позволяет рассматривать результат запроса как многомерный массив
при этом в SQL задаем оси измерения этого массива (идентифицируем данные по осям)

использование Model, так же позволит нам подводить промежуточные и общие итоги, с применением агрегатных функции 

SELECT *
FROM table1 -- таблица или запрос
MODEL DIMENSION BY (field1 , field2, ..)--оси, определение осей измерений по которым мы строим массив (поля для поиска уникальной ячейки)
    MEASURES (field3) -- определяющее поле 
    RULES (    cnt['res1', 'res2'] = res3 -- результат который вносится массив
            )  ORDER BY field1; -- сортировка по полю 

 

Подробнее...

Создание табличной (pipelined) функции с помощью динамического SQL запроса в ORACLE

Категория: Блог
Опубликовано 24.05.2017

Иногда возникает необходимость вернуть результат некоторой функции с на основе запроса сформированного динамически, во время выполнения функции. 
Продемонстрируем как это сделать.
Подготовим тестовый запрос - пусть это будет запрос из таблицы all_objects

select o.OBJECT_NAME, o.OBJECT_TYPE from all_objects o
 where upper(object_name) like upper('t%') and rownum < 35

 


Определим типы возвращаемых данных

Подробнее...

Конструкция MERGE, вставка - обновление

Категория: Блог
Опубликовано 24.05.2017

Назначение
Позволяет дополнять и обновлять данные одной таблицы - данными другой таблицы. При слиянии таблиц проверяется условие, и если оно истинно, то выполняется Update, а если нет - Insert. Причем нельзя изменять поля таблицы в секции Update, по которым идет связывание двух таблиц.

Является командой DML!

Синтаксис

MERGE INTO TABLE_NAME 
USING table_reference ON (condition) WHEN MATCHED 
THEN UPDATE SET column1 = value1 [, column2 = value2 ...] WHEN NOT MATCHED 
THEN INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...) ;

Подробнее...

Аналитический SQL Oracle за 20 минут

Категория: Блог
Опубликовано 24.05.2017

Применяется в основном для отчетности , для следующих типов задач
1. Запросы рейтингов, первых N
2. Запросы с накопительным итогом
3. Запросы с конструкцией окна
4. Может применяться и для оптимизации запросов

Какие бывают функции в аналитическом, разберём основные
ROW_NUMBER() – номер строки в группе
LAG(f, n,m) –f имя поля, n предыдущее значение в группе, m – знач по умолчанию
LEAD(f, n,m) -f имя поля, n последующее значение в группе, m – знач по умолчанию
FIRST_VALUE(f) – f имя поля, первое значение в группе ,

 

Подробнее...

INSERT ALL - Множественная вставка

Категория: Блог
Опубликовано 24.05.2017

Как было бы хорошо с помощью одной команды Insert добавлять много записей сразу в разные таблицы :) 
И такая возможность существует. Для этого используется команда INSERT ALL 

INSERT ALL  Синтаксис
INSERT ALL INTO <table_name1> VALUES <value_list)
INTO <table_name2> VALUES <value_list>)
...<SELECT Statement>;
Где table_name1, table_name1 таблицы ,  
...<SELECT Statement> - запрос  для вставки данных


Приведем пример 
Создадим две таблицы tab1,tab2

 

Подробнее...

Множественный UPDATE

Категория: Блог
Опубликовано 24.05.2017

Итак, небольшая заметка по операторы UPDATE
предположим что нам необходимо заменить значения в таблице 1 , данными из таблицы 2
можно конечно написать что то вроде 

update t1 set t1.f1=select t2.f1 from t2 where t2.key1 = t1.key


но у нас есть более легкий способ произвести подобную операцию

Подробнее...

Фрагментация, секционирование – partition. О фрагментации таблиц. Часть первая

Категория: Блог
Опубликовано 24.05.2017

Фрагментация (секционирование) это

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

Кому и зачем это нужно? Вопрос с секционированием таблиц, тесно связан с другим важным вопросом , вопросом масштабируемости проекта.

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

Оставить для работы , для оптимального доступа к данным, только лишь необходимые нам в сейчас секции таблицы.
Так же очень часто возникает необходимость быстрого построения индекса по заданному фрагменту , а не по всей таблице , для решения данных задач в Oracle используется фрагментация.

Подробнее...

SQL и биржевой график. (Бонус. Торговая система, которая принесла ее создателю миллиард долларов)

Категория: Блог
Опубликовано 24.05.2017
Публикация восьмая. Бонус
Торговая система, которая принесла ее создателю миллиард долларов
 
Уже давно, в прошлом веке, жил величайший биржевой спекулянт , человек легенда , неповторимый финансовый гений.
Личное этого человека состояние в переводе на современные деньги составляло приблизительно миллиард долларов. Ему принадлежали яхты, лимузины, множество особняков по всему миру.

Этого человека звали Джерси Ливермор, и его торговая стратегия опубликована в открытых источниках.
Может показаться немного странным , но он сам описал ее в книге - "Как торговать акциями".

Я не знаю, будет ли торговая стратегия описанная Ливермором столь же эффективна сегодня , рынки изменились с тех пор, но, думаю, что будет интересно запрограммировать и проверить основные показатели этой стратегии!

Так же некоторые идеи от торговли величайшего финансового гуру , но правда в общем виде, можно найти в произведениях – “Воспоминания биржевого спекулянта” - Лефевра и “Жизнь и смерь величайшего биржевого спекулянта” - Ричарда Смиттена


От себя скажу вкратце , что Ливермор, был один из первых активных инверторов, торгующих импульс , использующих для входа стратегию прорыва волатильноти актива.

Но давайте перейдем к непосредственно к системе торговли Ливермора.
За основу я взял его книгу - "Как торговать акциями".
Как не странно, методология его торговли описана достаточно подробно. Обладая математическим мышлением Ливермор строил свою систему торгов на необычной классификации ценовых движений, для акций, ликвидных в его время. 

Подробнее...

SQL и биржевой график. (Оптимизация торговой системы + Управление капиталом = 41% годовых)

Категория: Блог
Опубликовано 24.05.2017

Публикация седьмая
Оптимизация торговой системы. Управление капиталом

В прошлых публикациях описан механизм для создания торговой стратегии, а так же механизм оценки ее эффективности.
Попробуем создать прибыльную торговую стратегию и оптимизировать ее параметры , для получения максимальной прибыли , при наименьших рисках.

В любой торговой стратегии , наиболее важный на мой взгляд компонент - это система управления рисками и капиталом.
Если таковая отсутствует, то торговая стратегия, просто не будет работать.
Хорошая система управления капиталом позволит вам минимизировать риски и добиться наиболее высоких прибылей.

Система управления капиталом указывает. на какую сумму от инвестиционного капитала необходимо делать покупки, а так же какие именно активы необходимо приобретать. Какой суммой мы можем рискнуть…

Подробнее...

SQL и биржевой график (Анализ эффективности торговой стратегии)

Категория: Блог
Опубликовано 24.05.2017

Публикация шестая
Анализ эффективности торговой стратегии

Исходные тексты, архив

В предыдущей статье , я рассказал о создании торговой системы.
Собственно была создана инфраструктура (пакет , набор функций и таблиц) , с помощью которой появилась возможность разрабатывать множество новых торговых стратегий, прописывать разные правила для открытия , закрытия сделок, программировать сложные модели управления капиталом.

Итак, перечислим элементы созданной инфраструктуры

Подробнее...

SQL и биржевой график (Создание торговой системы)

Категория: Блог
Опубликовано 24.05.2017

Публикация пятая
Создание торговой системы

Подготовим необходимую инфраструктуру для разработки и отладки торговых стратегий

Создадим таблицы
Это таблица балансов, где будут сохраняться сведения о общем и накопительном итогах наших торговых операций, таблица позиций , для просмотра текущих позиций и непосредственно таблица торговых операций - сделок.

 

Подробнее...

SQL и биржевой график (Основные показатели фондового рынка)

Категория: Блог
Опубликовано 24.05.2017

Основные показатели рынка, рыночные свойства
публикация третья


Исходные тексты, архив

Итак, у нас имеются история цен, по самым ликвидным акциям,
(где взять историю цен как, как заполнить таблицу истории из сервиса РБК я рассказал в предыдущей статье)
У финансовых рынков существует несколько очень интересных технических свойств , неэффективностей, которые позволяют инвестору рассчитывать на финансовый выигрыш.

Трендовость.
Первое о чем хотелось бы рассказать это трендовость, то есть акции склонны находится в направленном движении в течении длительного времени.
Вызван эффект трендовости активов по моему манию следующими закономерностями

Дело в том, что в экономике многие вещи взаимосвязаны между собой. И сбой в одной отрасти, циклически приводит с бою в других отраслях, и наоборот улучшение показателе одной отрасли экономики бумерангом отражается и на показателях других отраслей экономики.

Приведу пример.

Недостаток ликвидности приводит росту ставок по кредитам в финансово кредитных учреждениях
Предприятия вынуждены брать деньги под более высокие ставки, что приводит к недофинансированию структурных преобразований в компаний, и к снижению выпуска 

Подробнее...

SQL и биржевой график (Зачем нужна СИСТЕМА)

Категория: Блог
Опубликовано 24.05.2017


Исходные тексты, архив

Как ни парадоксально финансовый рынок это вовсе не то место , где многие зарабатывают деньги.
Более того, печальная статистика гласит, что примерно 80% всех мелких и средних инверторов потеряют большую часть средств, предназначенных для инвертирования.

Рынок устроен таким образом, чтобы большинство теряло свои сбережения, отдавая их более опытным и крупным участникам торгов.

Практически единственный способ сохранить и приумножить на финансовом рынке свой капитал , это использование четкой стратегии инвестирования.
Системы, где прописывается, какие акции покупать, когда покупать, по какой цене, какой суммой от депозита совершать покупку акций, а так же при каких условия продавать акции , которые вы купили ранее.

Подробнее...

SQL и биржевой график (Получение истории котировок с сервиса РБК)

Категория: Блог
Опубликовано 24.05.2017

Публикация первая
Получение истории котировок с сервиса РБК


Исходные тексты, архив

Я являюсь специалистом по российскому рынку ценных бумаг (лицензия ЦБ на осуществление дилерской и 
брокерской деятельности)
Самостоятельно занимаюсь инвестированием в российский рынок уже более 5 лет
Интервью со мной на тему инвестирования в российский рынок акций можно почитать например на сайте Николая Степенко интервью с инвестором
Меня всегда интересовало взаимодействие различных сфер знания, симбиоз разных, казалось бы трудно совместимых направлений интеллектуальной деятельности.

Подробнее...

Форматирование чисел , раскрываем секреты to_char

Категория: Блог
Опубликовано 24.05.2017

столкнулся с задачей , что необходимо вывести в отчет число с разделением разрядов 
то есть вот так 
исходное число 1234567689.23
вывод числа 123`456`768`9.23
для этого воспользовался функцией преобразование to_char
итак

 
select to_char(1234325234234.55,'999G999G999G999G999' ) nn from dual
--  1 234 325 234 235



число разделено на разряды но это не совсем то, что нам нужно

Подробнее...

Обзор инcтрументов разработки для разных СУБД

Категория: Блог
Опубликовано 24.05.2017

Данный блог посвящен ORACLE , но многие ORACLE специалисты ,в своей работе сталкиваются с задачами связанными с прочими СУБД
и поэтому, представляю вашему вниманию
Краткий обзор лучших с моей точки зрения инструментов для работы с различными СУБД

На исключительную полноту данный пост не претендует , но самые интересные утилиты я постараюсь разобрать

Подробнее...

Динамический SQL в ORACLE (часть 3 - Фишки, секреты и типичные ошибки)

Категория: Блог
Опубликовано 24.05.2017
В этом разделе показано, как в использовать динамический SQL и избежать некоторых распространенных ошибок.
Повышение производительности

В приведенном ниже примере, Oracle открывает различные курсоры для каждого отдельного значения emp_id . Это может привести к конфликту ресурсов и резкой потере производительности.

Подробнее...

Динамический SQL в Oracle - легко и понятно (часть вторая - курсоры FETCH , Close , Open FOR )

Категория: Блог
Опубликовано 24.05.2017
Использование курсоров в динамическом SQL, команды FETCH и CLOSE
Для работы с динамическим запросом который возвращает несколько строк используются курсоры . Работа с курсорами - это всего три команды: OPEN-FOR , FETCH и CLOSE . 

Подробнее...

Использование динамического SQL - легко и понятно (часть первая EXECUTE IMMEDIATE)

Категория: Блог
Опубликовано 24.05.2017

Динамический SQL. Часть первая
В некоторых задачах требуется использование динамических запросов. Это случается , когда мы заранее не знаем какой нам нужен SQL запрос, какие обьекты будут использоваться для получения данных.

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

Так же динамический SQL незаменим в случаях ,когда требуется назначить или изменить для определённого пользователя права или привилегии, или роли, или для изменения параметров сессии 

Ключевое отличие динамического sql от статического , в том, что команда динамического SQL строится непосредственно во время выполнения процедуры или функции PL/SQL.

Таким образом, команда динамического SQL - это , построенная во время выполнения программы строка SQL запроса , так же такая строка может быть использована во время выполнения анонимного PLSQL блока.

Для выполнения динамических SQL команд , которые возвращают одну строчку рациональнее всего использовать конструкцию EXECUTE IMMEDIATE , так же EXECUTE IMMEDIATE применяется для выполнения динамических команд обновления и изменения данных UPDATE, DELETE, и для выполнения DDL команд.

Подробнее...

DB LINK работа с LOB полями и ORA-22992

Категория: Блог
Опубликовано 24.05.2017

DB LINK - специальный механизм СУБД ORACLE который позволяет взаимодействовать с другими базами данных
примечательно что DB LINK могут использоваться не только для взаимодействия с базами данных ORACLE 
но и с другими СУБД , такими как MS SQL или MY SQL
для создания DB link пользователь должен иметь соответсвующую системную привилегию
create database link
рассмотрим несколько примеров создания db_link

Подробнее...