pl sql developer что это такое
На чем разрабатывать Oracle разработчику в 2019-м году (и после)
Некоторое время назад я в очередной раз сменил место работы. Новый работодатель был настолько любезен, что разрешил мне выбрать любую IDE, которая понравится, и оплатить лицензию (но в разумных пределах). Также (в кои-то веки) у меня были права администратора на рабочем компьютере, так что я мог ставить что угодно и пробовать сколько угодно. Я попробовал: Oracle SQL Developer, TOAD, Alt SQL Developer и (ВНЕЗАПНО!) IntelliJ IDEA (PL/SQL Developer не пробовал, но много работал раньше). Если вы регулярно пишете PL/SQL код, или хотя бы время от времени делаете запросы к Oracle Database, думаю, вам будет интересно почитать, к каким выводам я пришел.
Сразу хочу предупредить. Не могу сказать, что каждую из IDE изучил досконально, а PL/SQL Developer, кроме всего прочего, видел последний раз 5 лет назад. Поэтому всегда может оказаться, что когда я говорю «этого в IDE нет», на самом деле это там есть, просто я не нашел. А когда я говорю о PL/SQL Developer, я имею в виду версию, кажется, 8 (на которой писал 5 лет назад). Не исключено, что потом там многое изменилось, и не обязательно в лучшую сторону.
Участники соревнований
Итак, что у нас есть? В первую очередь, это то, что можно назвать большой тройкой Oracle-разработки: TOAD, PL/SQL Developer и Oracle SQL Developer. Эти продукты уже давно на рынке, их все знают, у каждого продукта есть своя армия фанатов. Я несколько раз сталкивался с мнением, что TOAD больше любят DBA, а PL/SQL Developer — разработчики. Про Oracle SQL Developer ничего такого не слышал, а армия его фанатов, судя по всему, состоит в основном из менеджеров, — и то только потому, что он бесплатный.
Кроме этого, я решил включить в обзор Alt SQL Developer (продукт, долгое время, а может быть, и до сих пор, разрабатываемый ОДНИМ человеком) и IntelliJ IDEA (он же Гоша, он же Гога, он же DataGrip).
Система там примерно такая: есть IntelliJ IDEA Community Edition — она бесплатная и для джавы. Есть несколько похожих платных продуктов (порядка пары сотен долларов/евро) — RubyMine для Ruby, DataGrip для баз данных, и так далее. И есть IntelliJ IDEA Ultimate Edition, которая дороже всего (примерно 650, кажется), но объединяет в себе функциональность всех продуктов JetBrains. Все эти продукты имеют идентичный интерфейс и очень сильно похожи, благодаря чему переходить с одного на другой проще простого — даже проще, чем с одной версии экселя на другую.
Поэтому далее по тексту мы говорим IDEA — подразумеваем DataGrip, мы говорим DataGrip — подразумеваем IDEA.
PL/SQL Developer
Я начал работать с ораклом в 2011-м году, и это была первая IDE, с которой я столкнулся. Так сложилось, что следующие три года везде, где я работал, использовался именно PL/SQL Developer. Я изучил его довольно неплохо, и он казался отличным инструментом. И хотя 2014-й год был последним годом, когда я запускал эту IDE, даже сейчас она кажется мне неплохим выбором. Главный минус — работает только под Windows.
Oracle SQL Developer
Бесплатная IDE, выпускаемая ораклом. Кроме бесплатности, имеет и другой плюс — кроссплатфоренность. Можно запускать и на линуксах, и на маках. Но, пожалуй, на этом плюсы и заканчиваются. Я ее впервые начал использовать году так в 2015-м. Работает сносно, но есть куча раздражающих мелочей. Дешево и сердито.
Я пробовал начать работать с TOAD несколько раз в свой карьере. Каждый раз я запускал его и тут же у меня возникал вопрос — и чё дальше? Куда нажимать, чтобы начать работать? Последний раз был несколько недель назад, и я наконец-то ее осилил! Разобрался, где какая кнопка, где какая закладка. Эта IDE довольно мощная, но как-то бестолково организованная, имхо. Куча окон и закладок, в которых легко запутаться. И тоже только под Windows.
Alt SQL Developer
Знакомство с этой IDE началось с топика на форуме. На форум пришел какой-то чувак и сказал, что пишет свой PL/SQL Developer с блекджеком и шлюхами. Я никогда не пользовался этой IDE всерьез, только пару недель назад поставил и попробовал поработать один день. Выглядит как PL/SQL Developer, из которого выкинули весь ненужный мусор. К сожалению, несмотря на семилетнюю историю, она до сих пор сыровата. Не помню уже, с чем именно я там столкнулся, но для работы на моем текущем проекте она не применима, к сожалению. И вообще, закрадывается мысль, что автор разработку забросил. А жаль, для продукта, разрабатываемого одним человеком, — это очень достойный результат. Респект, уважуха и лучи поддержки! Опять же, только Windows, но в данном случае не будем придираться.
Intellij IDEA
Вообще-то сначала я просто хотел немного поизучать джаву и писал в этой IDE. А потом для одного из хобби-проектов понадобилось сделать базу на PostgreSQL, и оказалось, что и с БД IDEA отлично справляется! На текущем проекте начал плотно работать с этой IDE и в целом доволен. Правда, без ложки дегтя не обошлось: наткнулся на багу, которая серьезно попортила кровь (IDE перестала показывать объекты одной из схем — на беду, одной из самых необходимых). Написал баг-репорт, воркэраунд посоветовали на форуме JetBrains через пару дней, а до этого пришлось помучиться.
В разговоре с коллегами я как-то упомянул, что некоторое время назад решил начать изучать java — ну так, чисто для себя в основном. Начал с Eclipse, просто потому что слышал про эту IDE раньше. А потом, через год или два, знакомый посоветовал IDEA, я попробовал — и это была любовь с первого взгляда. Казалось, эта IDE понимает меня и чуть ли не читает мысли. Тут один из коллег спросил:
— А чем она тебя так зацепила?
— Ну, даже хотя бы чисто эстетически — там есть темная тема оформления, например.
— Но в Eclipse тоже есть темная тема!
— Нет, ты не понимаешь. Я скачал «Идею», установил, и при первом запуске первое, что она показала — это две картинки рядом. Темная тема или светлая — выбирай.
В этот момент наш фронтэндщик поднял палец вверх и многозначительно изрек:
— ВОООООТ! Юзер экспириенс!
Цена вопроса
Цены взяты с официальных сайтов, из расчета на одного разработчика. Как правило, у всех есть пакеты для большого числа разработчиков, и тогда все еще дешевле.
PL/SQL Developer: 216 долларов + 60 годовая поддержка.
Oracle SQL Developer: бесплатно.
TOAD: 1054 евро (ЛОЛШТО. Может, я просто не туда посмотрел?)
Alt SQL Developer: 99 долларов
DataGrip: 199 евро первый год, 159 второй и по 119 последующие.
Разработка на PL/SQL в IDE
Пишем код
В первую очередь, процесс разработки состоит из чтения и написания кода. Ну, тут понятно: подсветка синтаксиса, автодополнение, навигация, всплывающие подсказки и все такое. Как справляются с этой задачей конкурсанты?
Если брать практическую сторону вопроса, то флагманы уверенно идут впереди. Автодополнение и навигация, имхо, лучше всего работали в PL/SQL Developer. В TOAD и IDEA чуть хуже, а вот Oracle SQL Developer мне так и не удалось заставить автодополнять удобным мне способом (а кроме того, у меня в нем постоянно слетают настройки — они почему-то вообще не сохраняются при выходе). Отдельно хочу отметить такой мелкий нюанс: если окно предложений для автодополнения уже закрылось по какой-то причине, то PL/SQL Developer умеет показывать его снова по Ctrl+Пробел. А еще всплывающие подсказки с названиями и типами агрументов функций. Остальные IDE не умеют, а если и умеют, то я не знаю, по какой клавише, и как эти опции называются в настройках, я тоже не знаю.
Также у PL/SQL Developer было еще несколько прикольных фишек, нужных именно для работы с SQL: сгенерировать в один клик перечень всех полей таблицы через запятую, поиск по коду в ALL_SOURCE, специальный режим отображения результатов селектов, когда поля идут в столбик, а в соседнем столбике одна строка данных. ОЧЕНЬ удобно, когда нужно посмотреть, какие поля и какие примерно данные есть в незнакомой таблице. Из всего этого у конкурентов я нашел только в IDEA поиск по коду и генерацию списка столбцов таблицы.
Настройки форматирования SQL и PL/SQL тоже есть у всех, более-менее одинаковые по мощности, и превью тоже есть. Разве что у TOAD они как-то слишком сложно сформулированы.
А вот с эстетической стороной вопроса флагманы справляются как-то не очень. Если в IDEA есть целая темная тема, то в остальных можно максимум сделать темный фон в редакторе кода. Фон в других окнах останется белым (в PL/SQL Developer, помнится, это частично тоже настраивается, но все в разных местах, чокнуться можно, у остальных вообще никак). Oracle SQL Developer единственный из оставшихся имеет несколько готовых наборов цветов для подсветки синтаксиса, включая набор с темным фоном. Остальные IDE по умолчанию имеют просто вырвиглазные высококонтрастные цветовые схемы и шрифт Courier new — имхо, самый уродливый моноширинный шрифт в этой части Вселенной. IDEA использует шрифт Consolas, он как-то поприятнее. Отдельно отличился TOAD (у меня версия 11.5): там есть баг, из-за которого символы %, &, * и ^ (а первые три очень часто используются в PL/SQL) не попадают ни в один набор символов в настройках, что приводит к невозможности задать им цвет шрифта. То есть они всегда остаются черными, и темная тема означает боль и страдания. И это продукт за штуку зелени? Это фиаско, братан.
Запросы, PL/SQL блоки и скрипты
Тут все на удивление ровно. Работа выглядит более-менее одинаково у всех, хотя без небольших сюрпризов не обходится. В Oracle SQL Developer очень неудобно включается вывод в консоль (нужно больше одного клика мышкой), а IDEA выводит таймстемпы, которые не отключаются — это мешает отлаживать процедуры, использующие динамический SQL.
Еще TOAD и IDEA умеют делать экспорт данных из таблицы в виде INSERT выражений.
PL/SQL Developer имел честный режим эмуляции SQL*Plus — отдельное окно, куда можно писать команды прямо как в самом SQL*Plus — с выводом прямо тут же. Остальные могут просто тупо выполнять скрипты, а output выплевывать в соседнее окно.
Еще стоит сказать об умении определять границы SQL-запросов. Oracle SQL Developer, PL/SQL Developer и Alt SQL Developer требуют обязательно отделять запросы точкой с запятой (а PL/SQL блоки — слэшем), а иначе они не понимают, где один запрос закончился, а другой начался. IDEA в этом плане немного умнее (и TOAD, кажется, тоже) — там можно написать два корректных запроса, не отделяя их друг от друга точкой с запятой, поставить курсор на один из них и выполнить его. Кроме того, IDEA перед запуском обводит распознанный запрос зеленой рамочкой, дополнительно позволяя убедиться, что выполнится именно то, что нужно.
Еще один важный пункт — это пошаговая отладка, но она, кажется, выглядит одинаково вообще у всех IDE, начиная чуть ли не с TurboPascal 7.0. И да, буквально неделю назад на форуме JetBrains написали, что пошаговая отладка PL/SQL в IDEA готова. Народ уже во всю тестирует.
Браузер объектов
Самые удобные браузеры объектов — у PL/SQL Developer и Alt SQL Developer. У них есть панелька слева с браузером, а справа можно писать код, а у PL/SQL Developer еще в добавок были возможности поиска и фильтрации объектов в той же панели. У Oracle SQL Developer почти так же хорошо, но мне нравится немного меньше. У TOAD мне не нравится то, что если смотришь браузер объектов, то в левой панели показаны собственно объекты, а справа, на остальной части экрана, отображаются их многочисленные свойства. А сделать так, чтобы слева были объекты, а справа — редактор кода, не получится. То есть информации TOAD дает может даже и побольше, но юзабилити — не его конек. У IDEA браузер объектов — самое слабое место, на троечку с минусом. С одной стороны, их можно понять, не ораклом единым, и даже не одними реляционными БД жив DataGrip, а с другой: назвался груздем — полезай в короб.
Зато IDEA умеет рисовать ER-диаграммы для уже существующих в БД таблиц, и вызывается эта функция из браузера объектов. За это ей жирный плюс.
Контроль версий
С контролем версий ситуация тяжелая. Так исторически сложилось (уж не знаю как, но это факт), что люди, работающие с Oracle, в основной своей массе довольно дремучи в вопросах организации процессов разработки в команде. Можете представить себе Senior Java (или С/С++/фронтенд) девелопера, который ни разу в жизни не работал ни с одной системой контроля версий? А вот Senior Oracle девелопера можно найти довольно легко — последнего такого я видел не далее как в прошлом году. Про тесты и говорить не приходится (на прошлой работе я показал нашему «лиду» APEX-разработки простенький тестик на Java + Selenium, а он мне в ответ — «Ни в коем случае! Никаких тестов! Это ж в два раза больше работы — и тесты, и код поддерживать!»), а за выражение «Continuous Integration», кажется, меня бы там убили на месте (поэтому я не выражался).
По этой причине мне не удалось толком протестировать возможности по работе с системами контроля версий PL/SQL Developer и Oracle SQL Developer.
Я работал в IDEA с git, и IDEA в этом плане идеальна. Мои коллеги используют SourceTree для работы с гитом (я использую и то, и то), и я могу сказать, что IDEA переигрывает SourceTree на его же поле — при том, что SourceTree вообще ничего другого не умеет.
У остальных IDE пункт в меню для работы с системами контроля версий номинально присутствует, но больше я ничего не знаю.
Выводы, которые я для себя сделал
По соотношению цена/качество с большим отрывом выигрывает Oracle SQL Developer: еще бы, если ноль поделить на какое-нибудь число, получится ноль 😉 А если отбросить шутки, то кросс-платформенность и бесплатность — практически единственные его плюсы. И чисто с идеологической точки зрения: если посмотреть на финансовые возможности разработчиков перечисленных IDE, то Oracle — самая богатая компания. Однако, если брать фактическую функциональность и удобство работы, их софтина — самая убогая.
Alt SQL Developer — тоже довольно простенькая программка, и, имхо, она не стоит даже тех 99 баксов, которые за нее просят. Но ёлки-палки: во-первых, она довольно качественно косплеит PL/SQL Developer, а во-вторых, написана одним человеком в свободное от работы время, а не корпорацией с многомиллиардной стоимостью. Упоминания в одном ряду с флагманами она точно заслужила.
PL/SQL Developer — был моим идеалом до появления IDEA. Перечитав эту статью, понял, что PL/SQL Developer даже пятилетней давности был лучше, чем большинство его конкурентов сейчас.
Какую IDE выбрал я?
Я на данный момент выбрал IntelliJ IDEA и хочу попробовать объяснить, почему. Казалось бы, некоторые вещи она умеет хуже, чем конкуренты (браузер объектов), а в остальном — плюс-минус то же самое. Но, тем не менее, IDEA имеет несколько киллер-фич, которые с лихвой перевешивают недостатки. О них чуть подробнее.
Live Template. Совершенно невозможно не упомянуть одну из киллер фич IDEA — Live Template. Что такое Code Template — знают более-менее все, и во всех оракловых IDE это есть. Вы пишете условное сокращение, а IDE заменяет его длинным. Например, вы можете сделать настройку, чтобы IDE заменяла «sft» на «select * from «. В IDEA пошли дальше, и эта функция называется Live Template. Вы можете внутрь шаблона вставить специальные выражения, обрамленные знаками «$», и IDEA не только сделает автозамену, но и по нажатию на Enter будет перемещать курсор по тем местам, где стояли эти выражения.
Refactoring. Просто автозамена текста есть у всех, даже в блокноте, наверное. А вот чего у «большой тройки» нет, так это чуть более интеллектуальной автозамены. Если у вас в пакете есть несколько функций, в которых используются переменные или параметры с одинаковым названием (и даже если просто такое сочетание символов используется где-то еще), то автозамена переименует их все. А если нужно переименовать именно переменную в одной из функций, то тут придется следить и делать автозамену в полуавтоматическом режиме. IDEA решила эту проблему — по Shift+F6 вы можете переименовать именно то, что вам нужно. И это только цветочки, рефакторинг — это немного более сложная штука.
В 2009-м году известный специалист по проектированию интерфейсов Алан Купер выпустил третье издание своей книги «Об интерфейсе». Там он, в частности, обратил внимание читателя на такой странный факт: любая прикладная программа для обработки хоть каких-то пользовательских данных (тут имеется в виду любая из реально существующих — ну там Word, Excel, notepad, Paint, и так далее) может создать файл, дать ему имя, писать в него данные и т. п., но ни одна (. ) не умеет переименовывать уже открытый этой же программой файл, хотя никаких ограничений со стороны ОС для этого нет. Для переименовывания файла закройте его, обратитесь к услугам ОС, потом откройте заново. Юзабилити, ага.
Это была присказка, сказка будет впереди. Таки IDEA эту функцию осилила. Не прошло и 10 лет, как говорится. Переименование файлов — это часть функциональности рефакторинга.
Ждем остальных.
Code Inspection Кто давно читает Хабр, тот наверняка видел регулярно появляющиеся статьи одной компании, разрабатывающей свой продукт для статического анализа, и наверняка успел проникнуться самой этой концепцией. Как внезапно оказалось, в IDEA есть некоторый набор правил и для анализа PL/SQL. Там, конечно, набор пока бедненький, и я уже собираюсь закинуть им Feature Request с несколькими новыми правилами, но даже то, что есть, способно принести немного пользы. Проверив всего один пакет наугад, я нашел одну неиспользуемую переменную и четыре… эээ… как это по-русски. unreachable statements. А потом оказалось, что эти unreachable statements образовались случайно, когда текст правили, и в итоге это были таки баги.
Запуск скриптов. IDEA умеет запускать bat/bash файлы, это настраивается прямо из IDE. Предельно просто: открываем соответствующий файл, IDEA предлагает поставить плагин для работы с этим типом файлов, соглашаемся, плагин сам ставится (за несколько секунд), конфигурируем запуск, работаем дальше. Очень удобно, если вы пользуетесь скриптами для запуска SQL*Plus. Также мы используем модульные тесты для PL/SQL, написанные на Ruby, и точно также они запускаются из той же IDE (но для Ruby вам уже придется ставить IDEA Ultimate Edition, DataGtip не подойдет).
Usability. В конце концов, IDEA — это просто удобно. У IDEA есть куча плагинов. Просто плагинами уже никого не удивишь, они есть вообще везде. Но IDEA может, например, сама определить, что у нее есть плагин, который может вам помочь. Типовой кейс — вы открываете какой-то файл, IDEA выводит сообщение «существует плагин для работы с этим типом файлов» и предлагает его скачать и сконфигурировать. И вообще, часто, когда случается какая-то непонятная фигня, IDEA показывает всплывающую менюшку со списком возможных действий по исправлению этой фигни. Очень приятная забота о пользователе.
У IDEA есть поиск по справке. Если вы знаете название какой-то фичи IDE, вам достаточно зайти в справку и набрать это название в поисковой строке, далее IDE вам сама стрелочкой покажет, где эта функция.
TL;DR IDEA — это айфон от PL/SQL разработки. Могу только пожелать разработчикам IDEA дальнейших успехов, а разработчикам остальных IDE хочу напомнить, что динозавры, которые не смогли эволюционировать — вымерли.
Что такое Oracle SQL Developer?
Oracle SQL Developer является бесплатным графическим инструментом, разработанным, чтобы улучшить Вашу производительность и упростить разработку каждодневных задач базы данных.
Только несколькими щелчками можно легко создать и отладить хранимые процедуры, протестировать SQL-операторы и просмотреть планы оптимизатора.
Oracle SQL Developer является графическим инструментом, который улучшает производительность и упрощает задачи разработки базы данных.
Можно соединиться с любой целевой схемой базы данных Oracle при использовании стандартной аутентификации базы данных Oracle.
SQL Developer, визуальный инструмент для разработки базы данных, упрощает следующие задачи:
Просмотр и управление объектами базы данных
Выполнение SQL-операторов и сценариев
Редактирование и отладка PL/SQL операторов
Можно соединиться с любой целевой схемой базы данных Oracle при использовании стандартной аутентификации базы данных Oracle. После подключения можно выполнять операции с объектами в базе данных.
SQL Developer выпуска 1.2 тесно интегрируется с Инструментальными средствами Миграции Разработчика, которые предоставляют пользователям единый интерфейс, чтобы просмотреть объекты базы данных и данные в сторонних базах данных и перейти от этих баз данных к Oracle. Можно также соединиться со схемами для выбранных, сторонних (не-Oracle) баз данных, таких как MySQL, Microsoft SQL Server и Microsoft Access, и можно просмотреть метаданные и данные в этих базах данных.
Дополнительно, SQL Developer включает поддержку Oracle Application Express 3.0.1 (Oracle APEX ).
Введение в язык программирования PL/SQL
PL/SQL — это сокращение от «Procedural Language extensions to the Structured Query Language», что в переводе с английского означает «процедурные языковые расширения для SQL». SQL — повсеместно распространенный язык для выборки и обновления информации (вопреки названию) в реляционных базах данных. Компания Oracle Corporation разработала PL/SQL для преодоления некоторых ограничений SQL, а также для того, чтобы предоставить более полное совершенное решение для разработчиков ответственных приложений баз данных Oracle. В этой статье вы познакомитесь с PL/SQL, его происхождением и разными версиями. В блоге приведена краткая сводка PL/SQL в последней версии Oracle, Oracle Database 12с. Ну а завершим ознакомление с языком списком дополнительных ресурсов для разработчиков PL/SQL и некоторыми рекомендациями.
Что такое PL/SQL?
Язык PL/SQL обладает следующими определяющими характеристиками, которые можно отнести к его несомненным достоинствам:
История PL/SQL
В отрасли программного обеспечения компания Oracle является лидером в использовании декларативного, непроцедурного подхода к проектированию баз данных и приложений. Технология Oracle Server считается одной из самых прогрессивных, мощных и надежных реляционных баз данных в мире. Средства разработки приложений от Oracle (такие, как Oracle Forms) обеспечивают высокую производительность за счет применения визуального проектирования — подхода, в котором многие характеристики программ и их элементов определяются по умолчанию, что избавляет программиста от огромного объема рутинной работы.
Истоки PL/SQL
Вначале Oracle-разработчиков в полной мере удовлетворял декларативный подход SQL в сочетании с новаторской реляционной технологией. Но с развитием отрасли возрастали и требования к средствам разработки. Все чаще разработчики желали «проникнуть вовнутрь» продуктов. Им нужно было встраивать в свои формы и сценарии достаточно сложные формулы, исключения и правила.
Выпущенная в 1988 году версия Oracle 6 стала важным шагом в развитии технологии баз данных Oracle. Ключевым компонентом новой версии стало так называемое «процедурное дополнение», или PL/SQL. Примерно в то же время появилось долгожданное обновление SQL*Forms версии 2.3. Сейчас этот продукт называется Oracle Forms или Forms Developer). В SQL*Forms 3.0 был впервые интегрирован язык PL/SQL, позволяющий разработчику просто и естественно программировать процедурную логику.
Возможности первой версии PL/SQL были весьма ограниченными. На стороне сервера этот язык использовался только для написания сценариев «пакетной обработки» данных, состоящих из процедурных команд и инструкций SQL. В то время еще нельзя было строить модульные приложения или сохранять бизнес-правила на сервере. Технология SQL*Forms 3.0 позволяла создавать процедуры и функции на стороне клиента, хотя поддержка этих функций еще не была документирована, и поэтому многие разработчики ими не пользовались. Кроме того, в этой версии PL/SQL не поддерживались массивы и отсутствовало взаимодействие с операционной системой (для ввода и вывода). Так что до полноценного языка программирования было еще очень далеко.
Однако, несмотря на все ограничения, PL/SQL был очень тепло и даже с энтузиазмом принят сообществом разработчиков. Уж очень остро стала ощущаться потребность хотя бы в таких элементарных средствах, как условная команда IF в SQL*Forms. Необходимость в пакетном выполнении последовательности команд SQL стала безотлагательной.
В то время лишь немногие разработчики понимали, что исходная мотивация и побудительные причины для развития PL/SQL выходили за пределы потребности программного управления в таких продуктах, как SQL *Forms. Еще на ранней стадии жизненного цикла базы данных Oracle и ее инструментария компания Oracle Corporation выявила две ключевые слабости своей архитектуры: плохую переносимость и проблемы с полномочиями выполнения.
Улучшение переносимости приложений
Тем, кто знаком с маркетинговой и технической стратегией Oracle Corporation, может показаться странным сама постановка вопроса. Ведь с начала 1980-х годов именно переносимость была одной из сильных сторон решений Oracle. На момент выхода PL/SQL реляционные базы данных на основе языка C работали во многих операционных системах и на множестве аппаратных платформ. SQL*Plus и SQL*Forms легко адаптировались к разнообразным терминальным конфигурациям. Однако для решения многих задач по-прежнему требовались более совершенные и точные средства управления таких языков, как COBOL, C и FORTRAN. И стоило разработчику выйти за рамки платформенно-нейтрального инструментария Oracle, приложение утрачивало переносимость.
Язык PL/SQL расширяет диапазон требований к приложениям, которые полностью реализуются программными средствами, независимыми от операционной системы. В настоящее время для создания таких универсальных приложений применяется Java и другие языки программирования. Тем не менее PL/SQL занимает особое место как один из пионеров в этой области и, конечно, продолжает применяться разработчиками для создания легко переносимого кода приложений баз данных.
Улучшенная защита приложений и защита целостности транзакций
Язык PL/SQL обеспечивает строгий контроль за выполнением логических транзакций. Одним из средств такого контроля является система полномочий на выполнение. Вместо того чтобы выдавать разрешения на обновление таблиц ролям или пользователям, вы выдаете разрешение только на выполнение процедуры, которая управляет и предоставляет доступ к необходимым структурам данных. Владельцем процедуры является другая схема базы данных Oracle («определитель»), которой, в свою очередь, предоставляются разрешения на обновление таблиц, участвующих в транзакции. Таким образом, процедура становится «привратником» транзакции. Программный код (будь то приложение Oracle Forms или исполняемый файл Pro*C) может выполняться только посредством вызова процедуры, и это гарантирует целостность транзакций приложения.
Скромное начало, постоянное усовершенствование
Язык SQL, каким бы мощным он ни был, не обладает гибкостью и мощью, необходимой для создания полноценных приложений. В то же время PL/SQL, оставаясь в пределах не зависимого от операционной системы окружения Oracle, позволяет разрабатывать высокоэффективные приложения, удовлетворяющие потребностям пользователей.
Со времени своего появления PL/SQL прошел очень длинный путь. Разработчики, которые пользовались его первой версией, слишком уж часто вынуждены были говорить: «В PL/SQL это сделать невозможно». Сейчас это утверждение из факта постепенно превращается в отговорку. Если вы сталкиваетесь с задачей, которую, как вам кажется, нельзя решить средствами PL/SQL, не пытайтесь убедить в этом свое начальство. Копайте глубже, исследуйте возможности самого языка и пакетов PL/SQL, и необходимые средства, скорее всего, найдутся.
За прошедшие годы компания Oracle Corporation продемонстрировала свою приверженность PL/SQL. С выходом каждой новой версии базы данных Oracle в PL/SQL вводились все новые фундаментальные усовершенствования. Было разработано множество внешних (и встроенных) пакетов, расширяющих функциональность PL/SQL. В частности, язык был дополнен объектно-ориентированными возможностями, разнообразными структурами данных, усовершенствованный компилятор оптимизировал код и выдавал предупреждения о возможных проблемах с качеством и быстродействием кода. В целом язык был заметно углублен и расширен.
В следующем разделе представлены примеры программ PL/SQL, которые познакомят читателя с основами программирования PL/SQL.
Основы языка PL/SQL
Если вы только приступаете к изучению программирования или еще не освоили ни PL/SQL, ни даже SQL, может показаться, что перед вами очень сложная задача. Но это не так. Она наверняка окажется намного проще, чем вы думаете.
Для оптимизма есть два основания:
Рассмотрим несколько примеров, демонстрирующих применение ключевых элементов структуры и функциональности PL/SQL.
Интеграция с SQL
Одним из важнейших аспектов PL/SQL является его тесная интеграция с SQL. Для выполнения SQL-инструкций в программах на PL/SQL не требуется никакой промежуточной программной «прослойки» вроде ODBC (Open Database Connectivity) или JDBC ( Java Database Connectivity). Инструкция UPDATE или SELECT просто вставляется в программный код, как в следующем примере.
Теперь посмотрим, что делает этот код. Его подробное описание дано в следующей таблице.
Строки | Описание |
1–3 | Объявление так называемого анонимного блока PL/SQL, в котором объявляется целочисленная переменная для хранения данных о количестве книг, автором или соавтором является Стивен Фейерштейн. |
4 | Ключевое слово BEGIN указывает на начало исполняемого раздела — кода, который будет выполнен при передаче этого блока в SQL*Plus |
5–8 | Запрос, определяющий общее количество книг, автором или соавтором которых является Стивен Фейерштейн. Особенно интересна строка 6: использованная в ней секция INTO на самом деле не является частью инструкции SQL, а связывает базу данных с локальными переменными PL/SQL |
10–13 | Для вывода количества книг используется встроенная процедура DBMS_OUTPUT.PUT_LINE (то есть процедура из пакета DBMS_OUTPUT, входящего в состав Oracle) |
15 | Однострочный комментарий, объясняющий назначение инструкции UPDATE |
16–18 | Чтобы изменить написание имени автора на Stephen, необходимо обновить таблицу books. Поиск всех вхождений слова STEVEN и замена их на STEPHEN осуществляется встроенной функцией REPLACE |
Управляющие конструкции и логические условия
Полный набор команд циклов и итеративных вычислений. К этой группе относятся команды FOR, WHILE и LOOP.
GOTO. Да, в PL/SQL есть даже GOTO — команда безусловной передачи управления из одной точки программы в другую. Впрочем, это не означает, что ей следует пользоваться.
Следующая процедура (многократно используемый блок кода, который можно вызывать по имени) демонстрирует работу отдельных команд:
Структура программного кода описана в следующей таблице.
Строки | Описание |
1–2 | Заголовок процедуры, уменьшающей баланс банковского счета с целью оплаты счетов. В строке 2 перечислен список параметров процедуры, состоящий из одного входного значения (идентификационного номера банковского счета) |
3–4 | Раздел объявлений процедуры. Обратите внимание: вместо ключевого слова DECLARE, как в предыдущем примере, я использую ключевое слово IS (или AS) для отделения заголовка от объявлений |
6–15 | Пример простого цикла LOOP. Команда EXIT (строка 11) определяет условие завершения цикла; в циклах FOR и WHILE условие завершения цикла определяется по-другому |
7 | Вызов функции account_balance, определяющей баланс счета. Это пример вызова одной многократно используемой программы из другой. Вызов процедуры из другой продемонстрирован в строке 13 |
9–14 | Команда IF, которую можно интерпретировать так: «Если баланс счета окажется меньше 1000 долларов, прекратить оплату счетов. В противном случае оплатить следующий счет» |
Обработка ошибок PL/SQL
Язык PL/SQL предоставляет разработчикам мощный механизм оповещения о возникающих ошибках и их обработки. Следующая процедура получает имя и баланс счета по идентификатору, после чего проверяет баланс. При слишком низком значении процедура явно инициирует исключение, которое прекращает выполнение программы:
Рассмотрим подробнее ту часть кода, которая связана с обработкой ошибок.
Строки | Описание |
5 | Объявление пользовательского исключения с именем l_balance_below_minimum. В Oracle имеется набор заранее определенных исключений, таких как DUP_VAL_ON_INDEX, но для данного приложения я хочу создать нечто более конкретное, поэтому определяю собственный тип исключения |
8–11 | Запрос для получения имени счета. Если счет с указанным идентификатором не существует, Oracle инициирует стандартное исключение NO_DATA_FOUND, что ведет к завершению программы |
19–22 | Если баланс слишком низок, процедура явно инициирует пользовательское исключение, поскольку это свидетельствует о наличии серьезных проблем со счетом |
24 | Ключевое слово EXCEPTION отмечает конец исполняемого раздела и начало раздела исключений, в котором обрабатываются ошибки |
25–28 | Блок обработки ошибок для ситуации, когда счет не найден. Если было инициировано исключение NO_DATA_FOUND, здесь оно перехватывается, а ошибка регистрируется в журнале процедурой log_error. Затем я заново инициирую то же самое исключение, чтобы внешний блок был в курсе того, что для идентификатора счета отсутствует совпадение |
30–33 | Блок обработки ошибок для ситуации, когда баланс счета оказался слишком низким (пользовательское исключение для данного приложения). Если было инициировано исключение l_balance_below_minimum, оно перехватывается и ошибка регистрируется в журнале. Затем я инициирую системное исключение VALUE_ERROR, чтобы оповестить внешний блок о проблеме |
Конечно, о PL/SQL еще можно сказать очень много — собственно, именно поэтому материал этой книги занимает не одну сотню страниц! Но эти примеры дают некоторое представление о коде PL/SQL, его важнейших синтаксических элементах и о той простоте, с которой пишется (и читается) код PL/SQL.
Версии PL/SQL
Каждая версия базы данных Oracle выходит с собственной версией PL/SQL, расширяющей функциональные возможности языка. Поэтому каждый программист должен прикладывать немало усилий, чтобы просто не отставать от эволюции PL/SQL. Необходимо постоянно осваивать новые возможности каждой версии, чтобы знать, как пользоваться ими в приложениях, и решать, оправдает ли их полезность модификацию уже существующих приложений.
В таблице 1 представлены основные средства всех версий PL/SQL — как старых, так и современных. (Учтите, что в ранних версиях Oracle номера версий PL/SQL отличались от версий базы данных, но начиная с Oracle8, версии совпадают.) В таблице приведен очень краткий обзор новых возможностей каждой версии. После таблицы следуют более подробные описания новых возможностей PL/SQL новейшей версии Oracle — Oracle Database 12c.
Каждый пакет Oracle Developer содержит собственную версию PL/SQL, которая обычно отстает от версии, доступной в самой СУБД. В этой статье основное внимание уделяется программированию PL/SQL на стороне сервера.
Версия Oracle | Характеристики |
6.0 | Исходная версия PL/SQL (1.0), использовавшаяся главным образом как сценарный язык в SQL*Plus (она еще не позволяла создавать именованные программы с возможностью многократного вызова) и как язык программирования в SQL*Forms3 |
7.0 | Обновление первой версии (2.0). Добавлена поддержка хранимых процедур, функций, пакетов, определяемых программистом записей, таблиц PL/SQL и многочисленных расширений |
7.1 | Версия PL/SQL (2.1) поддерживает определяемые программистом подтипы данных, возможность использования хранимых функций в SQL-инструкциях, динамический SQL (посредством пакета DBMS_SQL). С появлением версии PL/SQL 2.1 стало возможным выполнять инструкции DDL из программ PL/SQL |
7.3 | В этой версии PL/SQL (2.3) были расширены возможности коллекций, усовершенствовано удаленное управление связями между таблицами, добавлены средства файлового ввода/вывода (пакет UTF_FILE) и завершена реализация курсорных переменных |
8.0 | Новый номер версии (8.0) отражает стремление Oracle синхронизировать номера версий PL/SQL с соответствующими номерами версий СУБД. PL/SQL 8.0 поддерживает многие усовершенствования Oracle8, включая большие объекты (LOB), объектно-ориентированную структуру и принципы разработки, коллекции (VARRAY и вложенные таблицы), а также средство организации очередей Oracle/AQ (Oracle/Advanced Queuing) |
8.1 | Это первая из i-серий Oracle (базы данных для Интернета). В соответствующую версию PL/SQL включен впечатляющий набор новых средств и возможностей, в том числе новая версия динамического SQL, поддержка Java для доступа к базе данных, модель процедур с правами вызывающего, разрешения на выполнение, автономные транзакции, высокопроизводительный «пакетный» язык DML и запросы |
9.1 | Версия Oracle 9i Database Release 1 появилась вскоре после Oracle 8i. В ее первом выпуске была реализована поддержка наследования объектных типов, табличные функции и выражения с курсорами (позволяющие организовать параллельное выполнение функций PL/SQL), многоуровневые коллекции, конструкция CASE и выражения CASE |
9.2 | В Oracle 9i Database Release 2 главный акцент сделан на языке XML, но есть и другие усовершенствования для разработчиков PL/SQL: ассоциативные массивы (индексируемые не только целыми числами, но и строками VARCHAR2), язык DML на базе записей (позволяющий, например, выполнять вставку с использованием записи), а также многочисленные улучшения пакета UTL_FILE (который теперь позволяет выполнять чтение/запись файлов из программы PL/SQL) |
10.1 | Версия Oracle Database 10g Release 1 была выпущена в 2004 году. Основное внимание в ней уделялось решетчатой обработке данных, с улучшенным/автоматизированным управлением базой данных. С точки зрения PL/SQL, самые важные новые функции, оптимизированный компилятор и предупреждения на стадии компиляции, были введены абсолютно прозрачно для разработчиков |
10.2 | Версия Oracle Database 10g Release 2, выпущенная в 2005 году, содержала небольшое количество новых функций для разработчиков PL/SQL — прежде всего, препроцессор с возможностью условной компиляции фрагментов программного кода в зависимости от определяемых разработчиком логических условий |
11.1 | Версия Oracle Database 11g Release 1 появилась в 2007 году. Важнейшей новой функцией для разработчиков PL/SQL был кэш результатов функций, но появились и другие удобства: составные триггеры, команда CONTINUE и низкоуровневая компиляция, генерирующая машинный код |
11.2 | Версия Oracle Database 11g Release 2 вышла осенью 2009 года. Самым важным новшеством стала возможность оперативного переопределения, позволяющая администраторам изменять приложения на ходу, во время их выполнения пользователями |
12.1 | Версия Oracle Database 12c Release 1 вышла в июне 2013 года. Она предлагает ряд усовершенствований в области управления доступом и привилегиями программных модулей и представлений; обеспечивает дополнительную синхронизацию языков SQL и P, особенно в отношении максимальной длины VARCHAR2 и динамического связывания SQL; поддерживает определение простых функций в конструкциях SQL и добавляет пакет UTL_CALL_STACK для детализированного управления доступом к стеку вызовов, стеку ошибок и обратной трассировке |
Новые возможности PL/SQL в Oracle Database 12c
Oracle Database 12c предоставляет ряд новых возможностей, которые повышают производительность кода PL/SQL и делают его более удобным. Также были устранены некоторые недоработки в языке. Ниже приводится сводка важнейших изменений языка для разработчиков PL/SQL.
Проникновение новых типов данных PL/SQL через границу PL/SQL/SQL
До выхода версии 12.1 привязка типов данных, специфических для PL/SQL (например, ассоциативных массивов), в динамических командах SQL была невозможна. Теперь значения типов данных, поддерживаемых только в PL/SQL, могут привязываться в анонимных блоках, вызовах функций PL/SQL в запросах SQL, командах CALL и в операторе TABLE в запросах SQL.
Условие ACCESSIBLE_BY
Неявные результаты команд PL/SQL
Представления BEQUEATH CURRENT_USER
Предоставление ролей программным модулям
До выхода Oracle Database 12c модули с правами вызывающего всегда выполнялись с привилегиями вызывающей стороны. Если вызывающая сторона имела более высокие привилегии, чем владелец, то модуль с правами вызывающего мог выполнять операции, непредусмотренные владельцем (или запрещенные для него).
В версии 12.1 вы можете назначать роли отдельным пакетам PL/SQL и автономным подпрограммам. Вместо модуля с правами определяющего можно создать модуль с правами вызывающего и назначить ему нужные роли. В этом случае модуль с правами вызывающего выполняется с привилегиями вызывающего и ролями, но без дополнительных привилегий, присущих схеме определяющего.
Привилегия INHERIT PRIVILEGES предоставляется всем схемам при установке/обновлении.
Новые директивы условной компиляции
Оптимизация выполнения функций в SQL
Использование %ROWTYPE с невидимыми столбцами
Oracle Database 12c позволяет определять невидимые столбцы. В PL/SQL атрибут %ROWTYPE поддерживает такие столбцы и работу с ними.
FETCH FIRST и BULK COLLECT
Пакет UTL_CALL_STACK
До выхода версии 12.1 пакет DBMS_UTILIT Y предоставлял три функции ( FORMAT_CALL_STACK, FORMAT_ERROR_STACK и FORMAT_ERROR_BACKTRACE ) для получения информации о стеке вызовов, стеке ошибок и обратной трассировке соответственно. В версии 12.1 пакет UTL_CALL_STACK предоставляет ту же информацию, а также более точные средства управления доступом к содержимому этих отформатированных строк.
Ресурсы для разработчиков PL/SQL
Первое издание данной книги вышло в 1995 году. Тогда это событие произвело настоящую сенсацию — это была первая независимая (то есть не связанная с компанией Oracle) книга о PL/SQL, которую давно и с нетерпением ожидали разработчики во всем мире. С тех пор появилось множество PL/SQL-ресурсов, среди которых различного рода книги, среды разработки, утилиты и веб-сайты (но разумеется, эта книга остается самым важным и ценным из них!).
Многие из этих ресурсов кратко описаны в следующих разделах. Пользуясь этими ресурсами, многие из которых относительно недороги, а часть вообще предоставляется бесплатно, вы сможете значительно повысить свою квалификацию (и качество вашего кода).
Книги о PL/SQL от O’Reilly
За прошедшие годы серия книг о PL/SQL издательства O’Reilly & Associates представлена уже довольно внушительным списком. Более подробная информация об этих изданиях представлена на сайте издательства.
Oracle PL/SQL Programming (авторы Steven Feuerstein, Bill Pribyl). Книга в 1300 страниц, которую вы сейчас читаете. Это настольная книга для многих профессиональных программистов PL/SQL, в которой рассматриваются все возможности базового языка. В этой версии описана версия Oracle11g Release 2.
Learning Oracle PL/SQL (авторы Bill Pribyl, Steven Feuerstein). Упрощенное введение в язык PL/SQL для новичков в программировании и тех, кто переходит к PL/SQL с других языков.
Oracle PL/SQL Best Practices (автор Steven Feuerstein). Относительно небольшая книга с десятками полезных советов, рекомендаций и приемов, которые помогут читателю писать качественный код PL/SQL. Эта книга является чем-то вроде краткого конспекта по PL/SQL. Второе издание содержит полностью переработанный материал, который строится на истории группы разработчиков из вымышленной компании My Flimsy Excuse.
Oracle PL/SQL Developer’s Workbook (авторы Steven Feuerstein, Andrew Odewahn). Содержит серию вопросов и ответов, помогающих разработчику проверить и дополнить свои знания о языке. В книге рассматриваются возможности языка вплоть до версии Oracle8i, но, конечно, большинство примеров работает и в последующих версиях базы данных.
Oracle Built-in Packages (авторы Steven Feuerstein, Charles Dye, John Beresniewicz). Справочное руководство по всем стандартным пакетам, входящим в комплект поставки Oracle. Эти пакеты позволяют упростить трудную работу, а иногда даже сделать невозможное. Рассматриваются версии до Oracle8 включительно, но подробные объяснения и примеры будут чрезвычайно полезны и в последующих версиях базы данных.
Oracle PL/SQL for DBAs (авторы Arup Nanda, Steven Feuerstein). С выходом каждой новой версии Oracle язык PL/SQL играет все более важную роль в работе администраторов баз данных (БД). Это объясняется двумя основными причинами. Во-первых, многие административные функции доступны через интерфейс пакетов PL/SQL. Чтобы пользоваться ими, необходимо также писать и запускать программы PL/SQL. Во-вторых, практический опыт PL/SQL необходим администратору БД и для того, чтобы выявлять проблемы в чужом коде. Материал, представленный в книге, поможет администратору БД быстро освоить PL/SQL для повседневной работы.
Oracle PL/SQL Language Pocket Reference (Steven Feuerstein, Bill Pribyl, Chip Dawes). Маленький, но очень полезный справочник с описанием базовых элементов языка PL/ SQL вплоть до Oracle11g.
Oracle PL/SQL Built-ins Pocket Reference (авторы Steven Feuerstein, John Beresniewicz, Chip Dawes). Еще один лаконичный справочник с краткими описаниями всех функций и пакетов вплоть до Oracle8.
PL/SQL в Интернете
Программисты PL/SQL найдут в Сети много полезных ресурсов. В списке в основном представлены те ресурсы, для которых соавторы предоставляли свои материалы или помогали управлять контентом.
PL/SQL Obsession. Интернет-портал Стивена Фейерштейна содержит ссылки на различные ресурсы PL/SQL: презентации, примеры кода, бесплатные программы (некоторые из них упоминаются в следующем разделе), видеоролики и т. д.
PL/SQL Challenge. Сайт, основанный на концепции «активного изучения», — вместо того, чтобы читать книгу или веб-страницу, вы отвечаете на вопросы по PL/SQL, SQL, логике, проектированию баз данных и Oracle Application Express, проверяя свои познания в этих областях.
PL/SQL Channel. Библиотека видеоуроков (на 27 с лишним часов) по языку Oracle PL/ SQL, записанных Стивеном Фейерштейном.
Oracle Technology Network. Сайт OTN (Oracle Technology Network) «предоставляет сервисы и ресурсы, необходимые разработчикам для создания, тестирования и распространения приложений» на основе технологии Oracle. Он знаком миллионам разработчиков: здесь можно загрузить программное обеспечение, документацию и множество примеров кода. PL/SQL также имеет собственную страницу на сайте OTN.
Quest Error Manager. Инфраструктура для стандартизации обработки ошибок в приложениях на базе PL/SQL. При помощи QEM вы сможете организовать регистрацию и оповещение об ошибках через универсальный API с минимальными усилиями. Информация об ошибках сохраняется в таблицах экземпляров (общая информация об ошибке) и контекста (пары «имя-значение», смысл которых определяется конкретным приложением).
oracle-developer.net. Сайт поддерживается Эдрианом Биллингтоном. Он предоставляет разработчикам баз данных Oracle замечательную подборку статей, учебников и вспомогательных инструментов. Эдриан углубленно рассматривает новые возможности каждой версии Oracle Database, приводя многочисленные примеры, сценарии анализа производительности и т. д.
ORACLE-BASE. ORACLE-BASE — еще один превосходный ресурс для специалистов по технологиям Oracle, созданный и сопровождаемый экспертом по Oracle: Тимом Холлом. Тим является обладателем звания Oracle ACE Director, участником сети OakTable Network, а также обладателем премии Oracle Magazine Editor’s Choice Awards в номинации «ACE of the Year». Занимается администрированием, проектированием и разработкой баз данных Oracle с 1994 года. См. http://oracle-base.com.
Несколько советов
С 1995 года, когда вышло в свет первое издание настоящей книги, мне представилась возможность обучать десятки тысяч разработчиков PL/SQL, помогать им и сотрудничать с ними. За это время мы многому научились и у наших читателей, составили более полное представление об оптимальных методах работы с PL/SQL. Надеюсь, вы позволите нам поделиться с вами нашими представлениями о том, как эффективнее работать с таким мощным языком программирования.
Не торопитесь!
Мы почти всегда работаем в очень жестких временных рамках. Времени вечно не хватает, ведь нам за короткое время нужно написать огромное количество кода. Итак, нужно поскорее приступать к работе — не так ли?
Нет, не так. Если сразу же углубиться в написание программного кода, бездумно преобразуя постановку задачи в сотни, тысячи и даже десятки тысяч строк, получится просто «каша», которую не удастся ни отладить, ни снабдить достойным сопровождением. Но и в жесткий график вполне можно уложиться, если не поддаваться панике и тщательно все спланировать.
Мы настоятельно рекомендуем не поддаваться давлению времени. Тщательно подготовьтесь к написанию нового приложения или программы.
Это лишь некоторые важные аспекты, на которые следует обратить внимание, приступая к написанию программного кода. Помните, что спешка при разработке приводит к многочисленным ошибкам и огромным потерям времени.
Не бойтесь обращаться за помощью
Вы, профессиональный программист, наверняка очень умны, много учились, повышали свою квалификацию и теперь неплохо зарабатываете. Вам под силу решить практически любую задачу и вы этим гордитесь. Но к сожалению, успехи нередко делают нас самоуверенными, и мы не любим обращаться за помощью даже при возникновении серьезных затруднений. Такое отношение к делу опасно и деструктивно.
Программное обеспечение пишется людьми. И поэтому очень важно понимать, что огромную роль в его разработке играет психологический фактор. Приведу простой пример.
У Джо, руководителя группы из шести разработчиков, возникает проблема с его кодом. Он бьется над ней часами, все больше выходя из себя, но так и не может найти источник ошибки. Ему и в голову не приходит обратиться за помощью к коллегам, потому что он является самым опытным во всей группе. Наконец, Джо доходит «до точки» и сдается. Он со вздохом снимает телефонную трубку и набирает добавочный: «Сандра, ты можешь зайти и взглянуть на мою программу? У меня какая-то проблема, с которой я никак не могу разобраться». Сандра заходит и с первого взгляда на программу Джо указывает на то, что должно было быть очевидно несколько часов назад. Ура! Программа исправлена, Джо благодарит, но на самом деле он тайно переживает.
У него в голове проносятся мысли «Почему же я этого не заметил?» и «А если бы я потратил еще пять минут на отладку, то нашел бы сам». Все это понятно, но довольно глупо. Короче говоря, часто мы не можем найти свои проблемы, потому что находимся слишком близко к собственному коду. Иногда нужен просто свежий взгляд со стороны, и это не имеет ничего общего ни с опытом, ни с особыми знаниями.
Именно поэтому мы рекомендуем придерживаться следующих простых правил.
Поощряйте творческий (и даже радикальный) подход к разработке приложений PL/SQL
Мы склонны превращать в рутину практически все составляющие нашей жизни. Мы привыкаем писать код определенным образом, делаем определенные допущения о продукте, отвергаем возможные решения без серьезного анализа, потому что заранее знаем, что это сделать нельзя. Разработчики крайне необъективны в оценке своих программ и часто закрывают глаза на явные недостатки. Иногда можно услышать: «Этот код не будет работать быстрее», «Я не могу сделать то, что хочет пользователь; придется подождать следующей версии», «С продуктом X, Y или Z все было бы легко и быстро, а с такими средствами приходится буквально сражаться за каждую мелочь». Но на самом деле выполнение практически любого кода можно немного ускорить. И программа может работать именно так, как хочет пользователь. И хотя у каждого продукта имеются свои ограничения, сильные и слабые стороны, не нужно дожидаться выхода следующей версии. Лучше встретить проблему лицом к лицу и, не позволяя себе никаких отговорок, найти ее решение.
Как это сделать? Следует отказаться от некоторых представлений и посмотреть на мир свежим взглядом. Пересмотрите выработанные годами профессиональные привычки. Относитесь к задаче творчески — постарайтесь отступить от традиционных методов, от зачастую ограниченных и механистических подходов.
Не бойтесь экспериментировать, даже если ваши идеи покажутся радикальным отступлением от нормы. Вы будете удивлены тем, как многому можно научиться таким образом; вырастете как программист, способный к решению нестандартных задач. Многое становится возможным, когда вы перестаете говорить: «Это невозможно!», а, наоборот, спокойно киваете и бормочете: «А если попробовать так…»