Информация

Последние записи

Теги


Блоги


Записи из всех блогов на Sql.ru


Конструкция With и Function

Блог: Oracle SQL
Учебный тренинг. SQL от новичка до профессионала.
Бесплатные авторские видеокурсы SQL, PLSQL, JAVA

В SQL диалекте Oracle 12C есть возможность определить функцию или процедуру на языке PL/SQL с помощью оператора WITH, используя обычный SQL


Синаксис
WITH
 PROCEDURE <NAME_PROCEDURE> 
 BEGIN
 ... 
 END;

 FUNCTION <NAME_FUNCTION>
 BEGIN
   ...
 END;
SELECT <NAME_FUNCTION>
FROM <TABLE>;


Примеры
Вывести на экран тип объекта Перевернуть слова означающие типы объектов в ALL_OBJECTS, ограничить выборку 100 строками
WITH
  FUNCTION reversive_fnc(p_name VARCHAR2) RETURN VARCHAR2
  is i NUMBER; v VARCHAR2(50);
  begin
    FOR i IN 1..LENGTH(p_name) LOOP
      v := v || SUBSTR(p_name, LENGTH(p_name)-i+1, 1);
    END LOOP; 
    return v; 
  end;
SELECT DISTINCT reversive_fnc(object_type) as rname, object_type FROM all_objects WHERE rownum < 101;


Добавить к идентификатору объекта заданное кол нулей , преобразовать к числу, ограничить выборку 100 строками
WITH
  FUNCTION incid_fnc(p_id NUMBER, p_count NUMBER) RETURN NUMBER
  is
  begin     
    return TO_NUMBER(rpad(p_id , p_count, '0')); 
  end;
SELECT object_id, incid_fnc(object_id, 10) fn FROM all_objects WHERE rownum < 101
автор: Myp3_u_K добавлено: 02 май 18 просмотры: 1494, комментарии: 1



Обновление MS SQL Server Reporting Services 2014 до 2017



Имеем сервер отчетов на основе MS SQL Server2014, более 100 отчетов, столько же DataSet-ов, 10-к каталогов отчетов с разделенными правами, плюс два десятка строк подключений, где прописаны строки подключения с паролями. База данных Reporting Services так же хранится локально на MS SQL Server2014. Время идет и текущий сервер необходимо обновлять до версии 2017. В данной статье опишу шаги, которые позволяют обновить SQL Reporting Services.


Итак, первое самое главное при начале любых работ по изменению конфигураций, это наличие резервных копий, в нашем случае это баз данных Reporting Services, по умолчанию базы данных
[ReportServer]
[ReportServerTempDB]
и ключ шифрования. Создать резервную копию ключа шифрования можно в разделе «Encryption Keys» приложения «Reporting Services Configuration Manager»

При создании, укажите пароль, который понадобится при восстановлении.

После этого нам необходимо, обновить СУБД SQL Server и службу Reporting Services, либо мы можем все удалить и поставить чистый экземпляр SQL Server и Reporting Services. Для уменьшения простоя недоступности, мы обновим SQL Server поверх, выбрав в установщике MS SQL Server2017 обновлений MS SQL Server до версии 2017. Во время выбора параметров, установщик вам сообщит, что для обновления MS SQL Reporting Services текущий экземпляр нужно удалить, а для установки версии 2017 Reporting Services нужно отдельно скачать и установить данное приложение:



Так и делаем, обновляем SQL Server и удаляем службу MS SQL Reporting Services. ...
читать дальше...
автор: dbasimple добавлено: 01 май 18 просмотры: 1303, комментарии: 0



WPF:Размер окна в зависимости от текущего монитора

Блог: gpu blog
Дано
WPF-Приложение и комп с 2-мя мониторами с разным разрешением (e.g. 2560х1440) и (1920х1080).

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

К сожалению получение информации о подключенных мониторах доступно для Windows Forms и не доступно для WPF.
При невозможности использования Windows Forms можно использовать p-invoke для доступа к системным функциям User32.dll.

Решение на VB.Net
Определяем необxодимые нам структуры (RectStructure, MonitorInfo)
<StructLayout(LayoutKind.Sequential)>
Public Structure RectStructure
    Public Left As Integer
    Public Top As Integer
    Public Right As Integer
    Public Bottom As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)>
Public Structure MonitorInfo
    Public Size As Integer
    Public Monitor As RectStructure
    Public WorkArea As RectStructure
    Public Flags As UInteger
End Structure

И внешние методы>
<DllImport("user32.dll")>
Private Shared Function GetWindowRect(ByVal windowHandle As IntPtr, ByRef rectangle As RectStructure) As Boolean
End Function

<DllImport("user32.dll")>
Private Shared Function MonitorFromRect(<[In]> ByRef rectPointer As RectStructure, ByVal flags As UInteger) As IntPtr
End Function
<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Private Shared Function GetMonitorInfo(ByVal hmon As IntPtr, ByRef mi As MonitorInfo) As Boolean
End Function

Пишем вспомогательный метод для получения хендл монитора из хендла окна>
Private Const MONITOR_DEFAULTTONEAREST As UInteger = 2
Private Shared Function GetMonitorHandleByWindow(ByVal windowHandle As IntPtr) As IntPtr
    Dim rect As New RectStructure()
    GetWindowRect(windowHandle, rect)
    Dim monitorHandle = MonitorFromRect(rect, MONITOR_DEFAULTTONEAREST)
    Return monitorHandle
End Function

И собственно функцию которая будет нами использована в приложении для установки размера и положения окна>
Public Shared Function SetWindowDimensions(window As Window) As Boolean
    Dim ret As Boolean = False
    If window.IsActive Then
        Dim wih As New WindowInteropHelper(window)
        Dim winHandle As IntPtr = wih.Handle
        If winHandle <> IntPtr.Zero Then
            Dim monitorHandle As IntPtr = GetMonitorHandleByWindow(winHandle)
            Dim mi = New MonitorInfo()
            mi.Size = CUInt(Marshal.SizeOf(mi))
            GetMonitorInfo(monitorHandle, mi)
            window.Height = mi.WorkArea.bottom - mi.WorkArea.Top
            window.Width = mi.WorkArea.Right - mi.WorkArea.Left
            window.Left = mi.WorkArea.Left
            window.Top = mi.WorkArea.Top
            ret = True
        End If
    End If
    Return ret
End Function

Как мы видим размер и положение окна будет производиться только при условии что окно активировано и возможно получить хендла окна из обькта window.
Опытным путем было выяснено что очень важно вызвать SetWindowDimensions в правильном месте в правильное время. В зависимости от настроек системы и того
на каком монитире мы стартуем наше приложение , мы можем получить не тот монитор на котором приложение окончательно будет отображено.
Например, мы стартуем приложение на втором мониторе и второй монитор будет корректно возвращаться нам как текущий монитор при>
- Инициализации проложения (Application_Startup)
- Главное окно приложения загружено (Loaded)
- Главное окно приложения активировано (OnActivated)

Но после этого при дальнейшей инициализации (загрузка подконтролов) внезапно получим первый монитор как текущий вместо ожидаемого второго.
Так что выбор места для вызова SetWindowDimensions очень важен, по крайней мере в моем случае ето было именно так.
Возможно ето не всегда так и SetWindowDimensions спокойно можно вызывать скажем когда главное окно приложения активировано.
автор: gpu добавлено: 25 апр 18 просмотры: 1184, комментарии: 3



DevOps or not DevOps

Драгоценные вы мои коллеги! Много в последние дни стали говорить о неких новых вершинах роста развития разработчика и админа. Всё чаще и громче звучит хор разного уровня менеджеров – блогеров (вот последний попавшийся мне на глаза пример: 5 challenges to scaling DevOps at enterprise level) о том, что сферу IT технологий должны наполнить «супер герои», и таким может стать каждый. С чей-то «лёгкой руки» скрестили два (а то и три, если считать управленцев) ортогональных направления IT-проекта, разработку и администрирование. Почему это сделали – понятно. Так проще загонять работы в неверно установленные рамки (тассочки вовремя закрывать, а то премию не дадут). А что бы «старпёры» (такие, как ваш покорный слуга) не «воняли», придумали слоган, что только таким путём можно вовремя реагировать на ставшее почему-то быстрым преобразование бизнеса в эпоху информационных технологий.
И вот перед нами предстаёт он – DevOps, великий и могучий. Давайте рассмотрим его под «лупой». Первое, что бросается в глаза, это то «море» экспертизы, которым пышет это «создание». Основная область – это конечно же разработка. Тут каждый должен знать все последние модные языки и технологии «впаривания» на них кода в продакшен. Причём, чем таких средств больше и чем они новее – тем круче! Вторая область, в которой разработчик всегда чувствовал себя увереннее любого недоразвитого админа – это поддержка и администрирование своего детища. Ведь проще это не хитрое дело делать самому, чем плодить тонны документации и внушать этим «тупым» и «упрямым» айтишникам, как заставить работать столь великолепный в исполнении и гениальный по задумке продукт (который так необъятен, что тестеры ещё долго будут ломать об него свои жалкие копья). Ну и что бы не стало никаких препятствий к заветным бонусам, нужно добавить ещё в этот «винегрет» обязанности продакт-менеджера, который вечно норовит всё перепутать и разрушить стройную модель доведения продукта до пользователя (или хотя бы до тестера). Итого, перед нами предстаёт величественная фигура полубога, который может всё и вся. Это кумир, идол и обитатель не земных высот! У него золотая голова, стальные мышцы и нестираемые метало-керамические колодки вместо подошв (автор не пытается тут напомнить вам сон Навуходоносора, совсем нет).
Теперь давайте кинем в него «камень». Что же случилось, почему эта величественная «скульптура» рассыпалась в прах!? Да всё просто, жизни не хватит, чтобы собрать даже в «золотой» голове всё ту экспертизу, которая будет покупаться и/или аутсортситься бизнесом. Раньше таких горе специалистов принято было называть просто – ламер. Но ламера не продать, поэтому то и нарядили его в «новые одежды». Чистой воды маркетинг. Дерево познаётся по плодам, и когда мы увидим и насладимся плодами девопсов, маркетологи придумают что-нибудь новое.
Второе, что бросается в глаза – это попытка совместить в одном лице две сущности, у которых очень разные цели, хотя задачи и могут иногда пересекаться. Цель разработчика – сдать к сроку работу и получить за это бонус. Цель админа, заставить эту работу работать и за это получить бонус. Цели ортогональны! Что получится в результате – работы будут всегда сданы в срок и работать будут всегда (под неусыпным присмотром девопса, который только один будет знать, как этого добиться). Кажется, где-то мы уже такое видели….
Кто же это придумал? Да уши же торчат прямо из самого названия – уж не от Devil ли сокращение первой части… От чего сокращение второй части, предлагаю обсудить в комментариях к этому посту ;)
автор: Александр Гладченко добавлено: 19 апр 18 просмотры: 1829, комментарии: 4



Создание своей CMS - очередной велосипед? Или шаг в карьере?

Блог: maple4
Каждый человек должен построить дом, вырастить сына, посадить дерево. Веб-программист - должен создать свою CMS.

Я не говорю, на чем она будет создаваться (PHP, ASP,...), это не имеет никакого значения.
Я не говорю, стоит ли это делать вообще, ведь многое уже создано ранее да еще и распространяется бесплатно.
Я не касаюсь аутентификации, авторизации, регистрации и прочего - всего, что связано с правами и возможностями пользователя. Как это все будет реализовано - отдельная тема (например - с помощью тегов). Для простоты понимания - в дальнейшем будет обсуждаться ТОЛЬКО пользователь с возможностью изменения структуры сайта и заметок к нему. Для остальных такая возможность закрыта.

Поэтому, сразу к сути (вариант проекта своей собственной CMS).

1. Сайт строится на основе некой структуры (ВНЕЗАПНО!), группе страниц, организованных в виде дерева .
Но, общее количество таких страниц не означает, что только они и будут. Структура - только основание.

2. Заметка - мельчайшая частица информации для построения сайта. Лист для дерева :)
Зайдя на сайт без заметок, можно будет перемещаться между страницами (вся навигация строится автоматически на основе структуры, но это НЕ ЕДИНСТВЕННЫЙ способ организации навигации, о чем будет рассказано чуть ниже), и - как бы и всё.

3. ЛЮБАЯ страница строится на основе шаблона.
Шаблон - обычная HTML-страница с размещением в необходимых местах специальных меток (поля редактирования).
Наличие метки означает, что в этом месте будет организован вывод единичных заметок ИЛИ группы заметок, отобранных по какому-либо критерию (например, последние десять новостей сайта).
Кроме того, существуют шаблоны для вывода отдельной заметки, просто группы заметок, или группы заметок, организованных по фильтру или иному принципу (ниже).

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

4. ЛЮБАЯ заметка может иметь тег или несколько тегов, которые виртуально "группируют" заметки.
Одна и та же заметка может входить в разные группы, например "Россия" "Новости" "Спорт" "Олимпиада".
Когда, в какой момент времени будет формироваться страница для вывода таких групп? Ведь в структуре этого НЕТ?
ВОТ. И это самое интересное. Опять же, ниже.

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

На одной странице может быть несколько полей редактирования - Заголовок, Подвал, Основное поле ввода, Левая часть, Правая часть, ЧТО-ТО ЕЩЕ.

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

Допустим, необходимо внести какой-то текст, к примеру "Hello, World!" в основном поле редактирования.

И тут оказывается, что внести просто текст НЕЛЬЗЯ.

Зато можно добавить заметку с любым заголовком (вывод заголовка настраивается - нужно это или нет, датой/временем - аналогично, и прочее) и собственно с текстом "Hello, World!" с нужным форматированием и рисунками к нему.
Сохраняем заметку - и она уже появляется на самой странице.

Почему так сложно? Можно же было все реализовать и без этих заметок?

Такой способ только кажется сложным. А в дальнейшем появляется куча преимуществ:


  • Любую заметку можно использовать многократно. Заметка - часть общего фонда.
  • Заметки можно добавлять на страницу в виде ленты заметок - отобранных по фильтру (по тегу/тегам/сложному правилу и/или по времени).
  • Добавленные заметки/ленты заметок могут выводиться с заданным порядком - новые сверху или наоборот (соответствующая настройка).
  • Если заметок в поле редактирования много - автоматически строится навигация к ТОЙ ЖЕ странице структуры проекта (но с другими параметрами в адресной строке) для отображения следующего списка заметок/группы заметок (настройка по максимальному количеству на странице).
  • Заметка может выводиться полностью или частично (клик по "Далее" приведет к открытию полной версии заметки), причем открытие страницы в новом/том же окне - уже с навигацией по своей группе заметок (например по "Новостям") - опять же с настройкой.
  • Заметка может иметь один/несколько тегов. Их отображение настраивается. Клик по тегу ведет к открытию заметки или всех заметок по выбранному тегу (настраивается тип открытия и максимальное количество на странице) с навигацией.
  • Так как сами теги ТАКЖЕ МОЖНО группировать в виде деревьев - может отображаться одно из деревьев тегов (настраивается). Клик по любой ветке дерева тегов приведет к отбору/отображению (настройка) сразу по группе тегов - опять же со всей сопутствующей навигацией.
  • Заметка, так же как и страница структуры, может иметь свой особый шаблон (настройка).


5. Более подробно
Поле редактирования - признак того, что здесь может быть что-то расположено.
Но, в случае изменения настроек отображения поля редактирования или добавления чего-либо - в поле редактирования появляется лента объектов.
Заметка, группа заметок (выбранных по критериям и отсортированные в определенном порядке), меню, система комментирования, отдельные фотографии или группы фотографий (галереи фотографий - фото, отобранные по определенному признаку), еще что-то - это все объекты.

Поле редактирования может НЕ ИМЕТЬ ленты объектов, если параметры отображения, выставленные "по умолчанию", устраивают пользователя.
К примеру, поле редактирования Header по умолчанию выводит в самом начале при помощи объекта MainMenu основное меню для навигации по основной структуре сайта.
Если не отменять вывод этого меню - ленты как таковой и не понадобится. В ином случае - т.е. необходимо отключить генерацию меню - появится лента, в которой и можно задать параметры отображения.

Еще пример - поле редактирования GroupColumn - по умолчанию в самом начале, при помощи объекта GroupMenu формирует меню для навигации в группе страниц (к которой принадлежит отображаемая страница) по основной структуре.
Если же понадобится перед меню добавить что-то свое - появится лента объектов с уже включенным в нее этим объектом. А уже в самой ленте - можно с объектами что угодно: перемещать, разрешать/запрещать вывод (в том числе по правилам) или эти объекты удалять. Само поле редактирования GroupColumn может располагаться в шаблоне страницы в зависимости от дизайна в левой или правой ее части.

Еще пример - поле редактирования Footer. Располагается обычно в самом низу страницы. По умолчанию, при помощи спецобъекта ImportantPages выводятся, ссылки на определенные важные страницы - Начальную, Контакты, Поиск. Кроме того - после ссылок - выводятся Счетчики объектом Counters.
Если же нужно задать свой определенный текст (внести заметку), поменять параметры вывода или порядок отображения (какой выводится в первую очередь) - появится лента объектов с объектами ImportantPages и Counters.

Еще, как замечание - все манипуляции с объектами ведутся НЕПОСРЕДСТВЕННО на самой странице. Поменял-сохранил-тут же на этой странице увидел изменения. Да-да, Drupal-оподобный способ редактирования :) (ну, или как это реализовано в широко обсуждаемой теме).



Минусы:

  • Похожее уже реализовано (причем МНОГОКРАТНО. Забавно, да? Че это они велосипеды создают, а?).
  • Шаблонная система - как-то не профессионально (честно, я видел и такой аргумент).
  • Своя реализация прав по редактированию - и проблемы с администрированием.
  • Автоматическое формирование меню (у меня с этим проблем особых, кстати, не возникло).


Плюсы:

  • Простота создания шаблонов - на основе предлагаемых в том числе бесплатно или создаваемых лично. Достаточно в нужных местах разместить метки с полями редактирования. Кроме того - это повышает общую безопасность (вероятность взлома меньше, так как в других местах, кроме как в шаблонах, размещение полей редактирования ни к чему не ведет).
  • Своя реализация прав по редактированию.
  • Полный контроль над СВОИМ проектом - я время от времени вижу появление сообщений об очередном взломе/критической ошибке различных CMS. И это при том, что многие проекты распространяются бесплатно и в открытом коде.
  • В любом случае - создание своего - отличная практика.


Чем не личный Drupal, Joomla! или Wordpress?

ГРАЖДАНЕ!
Призываю всех не использовать данную тему для рекламы своих профессиональных качеств или переливанию из пустого в порожнее!
СПАСИБО!
автор: maple4 добавлено: 12 мар 18 просмотры: 2049, комментарии: 1



CMS для сайта на чистом HTML

Блог: maple4
«Что, опять?»
Прогресс движется вперед семимильными шагами, но некоторые компании продолжают предоставлять хостинг без поддержки PHP.
Если отказываетесь от PHP, экономия, например, на nic.ru — сразу в полтора раза (сравнение минимального тарифа с ценой тарифа уже с поддержкой PHP).

Спрашивается, стоит ли экономить? И когда это вообще допустимо?

Представьте, что у Вас есть некий опросник. Если :


  • Сайт нужно создать БЫСТРО
  • Сайт будет (в ближайшее время — точно) представлять из себя сайт-визитку, с контактами, образцами продукции или оказываемых услуг, схемой проезда и временем работы
  • Нет времени (именно сейчас) заниматься настройкой и администрированием
  • Нет навыков при работе с HTML или PHP
  • Не хочется переплачивать за хостинг


… и выбрано хотя-бы два пункта — хостинг без PHP Вам подходит.
Да, WordPress или Joomla теперь не установишь.

Но я же и не призываю создавать сайт в блокноте (даже если Вы знаток HTML), зачем кидаться из крайности в крайность?

Сразу хочу указать на несколько нюансов, если все-таки попытаетесь это сделать (у меня есть знакомый, который утверждает о необходимости прохождения через «этот ад»):

  • Создание структуры сайта — любое ее изменение ведет к полному изменению внутренних связей между страницами.
  • Добавление раздела — смерти подобно.
  • Формирование меню с ссылками на страницы — та еще тема… Что должно попадать туда, как организовать простой доступ к дочерним подразделам, какова будет навигация в пределах одного раздела?
  • Наполнение контентом — добавление и редактирование, в том числе — работа с картинками. Мягко говоря — не очень просто, если вы не знаток языка разметки.
  • Обновление сайта на хостинге — кажется, что это не самая большая проблема. До тех пор, пока количество всех файлов не превысит пятидесяти штук. И наиболее простым решением окажется копирование ВСЕХ файлов проекта.


Да, я являюсь разработчиком бесплатной программы для создания/редактирования/публикации сайта, и сайт программы http://maple4.ru/ написан на ней.
Попытался в свое время реализовать навыки программирования на Visual FoxPro (кстати, внешний вид интерфейса для знакомых с FoxPro точно удивит), и уверен, что программа как минимум этим должна заинтересовать.


Ну а максимум… (для тех, кто с FoxPro не знаком)

Что реализовано:

  • Сайт строится на основе структуры. В любой момент можно добавить раздел сайта или необходимый уровень подраздела.
  • Все ссылки между страницами, меню (меню — в зависимости от стиля) и ссылки на дочерние разделы автоматически формируются в момент открытия страницы или при переходе по страницам внутри проекта.
  • Редактирование ведется в WYSIWYG-редакторе, при сохранении изменений — сразу же и с отображением на экране.
  • Редактирование HTML-кода никуда не делось (для знатоков), причем для удобства добавлен специальный объект, «защищающий» этот код от оптимизации редактором.
  • Есть специальный объект — NEWS — при использовании которого автоматически формируются не входящие в структуру проекта страницы (что значительно снижает объем обновлений) с новостями или обновлениями.
  • На локальном компьютере не нужно заниматься установкой/настройкой IIS, для запуска программы достаточно распаковать zip-архив в каталог с именем без пробелов внутри и запустить exe-шник maple4_ru.exe
  • Встроенный FTP-Connection опубликует сформированные статичные страницы на хостинге, причем сделает это интеллектуально — обновится только то, что добавилось или изменилось. Алгоритм обновления прост до безобразия (используется кэш для проверки), но эффект от этого очень значителен. К примеру, в контенте была допущена грамматическая ошибка. Исправляете/формируете и обновляется ТОЛЬКО та страница, где было исправление.
  • Программа оптимизирует состав файлов-рисунков таким образом, что не допускается их дублирование (т.е. рисунки с различными именами, но идентичные по составу — будут автоматически заменены одним файлом).
  • Не требуется знаний языков программирования, но для программистов на FoxPro есть бонус — можно использовать код языка для, допустим, обращения к базам данных с автоматическим формированием таблиц на их основе. Еще раз повторюсь, для работы с программой знать язык FoxPro обычному пользователю не обязательно.
  • Смена стиля в один клик. Есть возможность загрузки/установки стиля (доступно более 100 штук) прямо из навигатора программы. Изменение стиля не влияет на контент, так содержимое физически от стиля отделено. НО, обязательно требуется проверка окончательного результата, т.к. то, что отлично выглядело в одном стиле может выглядеть нелепо в другом.
  • Возможность редактирования файлов стиля — по сути, это обычные HTML-страницы с внедренными спец.объектами.
  • Ведение мета-тегов и статистика страницы по используемым словам.
  • Автоматическое создание sitemap.xml и robots.txt для более быстрой индексации сайта в поисковых системах.
  • Возможность публикации сразу на нескольких ресурсах.
  • Возможность автоматического формирования и публикации на хостинге — удобно, если при формировании используются базы данных и требуется обновление с некоторой периодичностью
  • Вишенка на торт — так как сайт использует чистый HTML, для опробования результата, сформированный проект без потери функциональности можно разместить даже на бесплатных хостингах


Ну и теперь самое главное — почему программа распространяется бесплатно http://www.maple4.ru/a_downloads_for_maple4_ru/maple4_ru.zip?
Поменялись жизненные приоритеты (можно не верить) ну и поменялась конъюнктура рынка - дорогие проекты все-таки строятся на PHP/ASP
автор: maple4 добавлено: 12 мар 18 просмотры: 1782, комментарии: 0



mini GItHub на ORACLE

Блог: Oracle SQL
Учебный тренинг. SQL от новичка до профессионала.
Бесплатные авторские видеокурсы SQL, PLSQL, JAVA

Название интересное, но это не важно...
на самом это деле небольшая система аудита для заданной схемы на БД.
для начала создадим таблицу для аудита

create table a_code(
  username varchar2(50)
, os_user  varchar2(50)
, date_changed date
, object_type varchar2(50)
, object_name varchar2(50)
, user_source clob
); 


добавим функционал для поддержки версионности

create or replace trigger A_CODE_trigger
  before create on schema
declare
  l_date  date := sysdate;
  l_ver   number;
  l_user  varchar2(20);
  l_cl    clob;
begin
  if (ora_dict_obj_type in
            ( 'PACKAGE'
             ,'PACKAGE BODY'
             ,'PROCEDURE'
             ,'FUNCTION' ) )
  then
    select sys_context( 'userenv', 'os_user' ) into l_user from dual;
    l_cl := '';
    for i in (
    SELECT * FROM user_source
     where name = ora_dict_obj_name
       and type = ora_dict_obj_type order by user_source.LINE
       )  loop   
        l_cl := l_cl||i.text;
       end loop;
    insert into a_code(username , os_user  , date_changed, object_type, object_name, user_source) 
    values (user, l_user , sysdate, ora_dict_obj_name, ora_dict_obj_type, l_cl);
  end if;
end;
/

мы знаем когда и кто менял код, а так же сохраняем разные версии данного кода
автор: Myp3_u_K добавлено: 21 дек 17 просмотры: 3671, комментарии: 2



WITH в ORACLESQL

Блог: Oracle SQL
Учебный тренинг. SQL от новичка до профессионала.
Бесплатные авторские видеокурсы SQL, PLSQL, JAVA
Оператор WITH позволяет заранее формировать внутренний подзапрос , позволяет обращаться к данному подзапросу по синониму в основном запросе.
Синтаксис
WITH 
T1 as (SELECT field_list FROM T list join WHERE cond group by ...) , 
T2 as (SELECT field_list FROM T list join WHERE cond2 group by ..) , tn as ....
SELECT * FROM T1, T2 where t1.cond= t2.cond

и для того чтобы было совсем понятно - пара примеров :)

WITH T AS (SELECT * FROM ALL_OBJECTS) , T2 AS 
(SELECT * FROM ALL_tables A , T WHERE T.OBJECT_NAME = A.TABLE_NAME ) 
SELECT TABLE_NAME FROM T2 
 
-- сложное обращение 

WITH T AS (SELECT * FROM ALL_OBJECTS) , 
T2 AS (SELECT * FROM ALL_tables) 
SELECT * FROM T, T2 WHERE T.OBJECT_NAME = T2.TABLE_NAME;
 
-- последовательно используем t1,t2

>Splash
>А если перед основным запросом два из WITH, притом что у второго используется первый, а потом они все вместе идут в основной?
with 
t1 as (select object_type, created lstcrdt  , object_name from all_objects),
t2 as (select object_type, count(object_name) cnttype from t1 group by object_type)
select * from t1 inner join t2 on t1.object_type = t2.object_type
автор: Myp3_u_K добавлено: 21 ноя 17 просмотры: 4701, комментарии: 2



Отсутствующие индексы в MS-SQL или оптимизация «по-быстрому»

Блог: SQL Server
При выполнении запроса, как мы знаем, оптимизатор SQL Server исходя из существующих индексов и имеющейся свежей статистики пытается за разумное время найти лучший план запроса, конечно если этот план уже не «сидит» в кэше сервера, и запрос выполняется по этому плану и план сохраняется в кэш сервера. Если план уже построен для этого запроса ранее, то запрос выполняется по существующему плану.
Нам в этой теме интересен следующий момент: Во время компиляции плана запроса, при переборе возможных индексов, если лучшего индекса не нашлось (по мнению сервера), то в плане запроса помечается этот не найденный индекс, и сервер ведет статистику по таким индексам – сколько раз сервер бы воспользовался этим индексом и сколько стоил этот запрос. Эти отсутствующие индексы – missing indexes мы сейчас и разберем, что с ними делать и как с ними работать.читать дальше...
автор: Алексей Куренков добавлено: 10 ноя 17 просмотры: 4108, комментарии: 1



Управление большими объемами требований в BI-проектах. Часть 1.

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

Как правило, BI[1]-системы создаются с использованием ряда промышленных инструментов, как для обработки данных, так и представления их конечному пользователю. Такие инструменты, как например, SAP Business Objects Edge BI, IBM Cognos BI, MicroStrategy обеспечивают наличие в созданной системе развитого и стабильного пользовательского интерфейса с фиксированным набором функциональных возможностей и технических параметров, которые не требуют дополнительной проработки в ходе проекта. Это означает, что функциональные требования к системе будут сосредоточены на соста...

читать дальше...
автор: Дмитрий Зиновьев добавлено: 30 окт 17 просмотры: 3728, комментарии: 1


предыдущие записи