В большинстве продуктов СУБД возможности базы данных можно расширить с помощью хранимых процедур. Возможности программирования расширяются с помощью дополнений к SQL в виде операторов, позволяющих управлять ходом выполнения и условной логикой, такой как T-SQL у СУБД SQL Server и PL/SQL у СУБД Oracle.
На текущий момент в СУБД MySQL не предусмотрена поддержка обработки хранимых процедур, но одним из самых больших преимуществ этой реляционной СУБД является ее расширяемость. Поддерживая традиции движения "open source", СУБД MySQL как часть своего дистрибутива имеет исходные тексты всех программ, что позволяет разработчикам добавлять свои функции и возможности, которые компилируются в процессор MySQL в качестве части исходного продукта. СУБД MySQL также позволяет производить загрузку отдельных библиотек C и C++ в том же пространстве памяти, что и процессор при запуске MySQL.
Любой из этих методов позволит взаимодействовать с вашими функциями так же, как и с любой уже встроенной функцией, предусмотренной в MySQL, например функцией SUM() или AVG(), потому что эти функции работают в том же пространстве памяти, что и MySQL. А поскольку они выполняются на том же самом сервере, где располагается MySQL, их использование минимизирует сетевой трафик между вызывающей программой и сервером, что в свою очередь способствует росту производительности.
Добавлять функции в MySQL можно и воспользовавшись интерфейсом пользовательских функций. Функции этого вида первоначально были разработаны как специальные библиотеки C/C++, а потом были добавлены и удалены динамически с помощью операторов CREATE FUNCTION и DROP FUNCTION. Пользовательские функции добавляют нагрузку, которая заключается в установке всех ваших библиотек при каждой установке MySQL; однако при этом запуск самого MySQL будет происходить быстрее, т.к. эти функции можно разместить в двоичном дистрибутиве, а не производить повторную компиляцию для того, чтобы подключить новые функции. Кроме того, есть отличный шанс, что ваши библиотеки могут работать в неизменном виде даже с новыми версиями MySQL.
Можно добавить функции в виде естественных (встроенных) функций MySQL. Естественные функции скомпилированы вместе с самим сервером MySQL и стали постоянной частью самой инсталляции MySQL. Это значительно упрощает инсталляцию по сравнению с использованием библиотек, т.к. определив один раз дистрибутив можно быть полностью уверенным в том, что все последующие инсталляции будут содержать все добавленные вами функции. С другой стороны, необходимо повторно компилировать и создавать свой дистрибутив для каждой новой версии MySQL.
Применение творческого подхода
Сымитировать инкапсуляцию и централизацию хранимых процедур в MySQL можно путем сохранения кода в таблице с последующей выборкой этого кода для выполнения вызывающей программой. Например, программа, написанная на Perl, может работать с таблицей, в которой содержится код Perl. Клиентская программа может осуществить поиск нужного программного блока и обработать этот код во время выполнения.
Этот метод позволяет размещать программы на сервере, и при этом не требуется, чтобы клиентские программы ничего "не знали" об изменениях кода. Из-за многочисленных передач на сервер и приемов с сервера и ввиду того, что этот подход работает только с интерпретируемыми языками, это не является полноценной заменой всех возможностей, которые представляют хранимые процедуры в других реляционных СУБД...