By Morten Egan
currently working as: Solution Architect
i blog here: codemonth.dk
and i tweet from: @kidrac
npg the pl/sql package manager: plsql.ninja
source code stored at: github.com/morten-egan
-- required personal stuff: originally from ; currently living in ; father of three; --
... and pl/sql is not on the sexy list
but is that really fair? - I dont think so.
Is pl/sql missing that much? - Nah-ah.
or hidden behind a big database? - maybe.
first let us see what the cornerstones of other languages are.
what is it, that makes their world tick.
|Lodash||Language improvements. Easily work with arrays, numbers, objects, strings|
|Request||Simple and easy way to make http(s) requests.|
|Express||Fast, unopinionated, minimalist web framework.|
|debug||A tiny node.js debugging utility modelled after node core's debugging technique.|
|Bundler||Bundler manages an application's dependencies.|
|Rake||Tasks and dependencies.|
|JSON||This is a JSON implementation as a Ruby extension in C.|
|activesupport||Rich support for multibyte strings, internationalization, time zones, and testing.|
|Nokogiri||Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser.|
|Rack||Rack provides a minimal, modular, and adaptable interface for developing web applications in Ruby.|
|Passenger||an application server that allows you to securely operate web apps, microservices & APIs with outstanding reliability, performance and control.|
|DBI||Database independent interface for Perl.|
|JSON||This module converts Perl data structures to JSON and vice versa.|
|DateTime||DateTime is a class for the representation of date/time combinations.|
|Text::CSV||Text::CSV provides facilities for the composition and decomposition of comma-separated values.|
|Net::SMTP||This module implements a client interface to the SMTP and ESMTP protocol.|
|HTTP::Response||The HTTP::Response class encapsulates HTTP style responses.|
|simplejson||Simple, fast, extensible JSON encoder/decoder for Python.|
|setuptools||Download, build, install, upgrade, and uninstall Python packages.|
|requests||Python HTTP for Humans.|
|python-dateutil||Extensions to the standard python 3.0+ datetime module.|
|certifi||Mozilla's SSL Certs.|
What should make your world tick?
If we look at the helper utilities of others, they exist to make core functionality more easy to use. PL/SQL gives you DBMS_PARALLEL_EXECUTE or Parallel enabled pipelined function. Array manipulation is perhaps one area where PL/SQL is bit behind others, but it does provide basic operators and comparison methods.
For IO, there is UTL_FILE for standard file operations and DBMS_PIPE for inter-process communication. Queueing is no problem either with Advanced Queues. For smaller IO related tasks, you can even use global contexts or DBMS_ALERT. For scheduling there is DBMS_SCHEDULER, which even includes stuff like file watchers and advanced task dependencies.
We can parse text using the builtin regular expression functions, parse, work and manipulate XML using DBMS_XMLPARSER , DBMS_XMLDOM and DBMS_XSLPROCESSOR. Oracle's builtin date and timestamp functionality combined with the TO_CHAR formatting options, gives at least as much time/date functionality if not more. For JSON, 12c have just added JSON native capability inside the database. CSV is just as easy to deal with inside PL/SQL. We have the DBMS_UTILITY or SQLLDR or External tables.
Plenty of core protocol packages available such as DBMS_LDAP for ldap access , UTL_TCP for socket programming , UTL_HTTP for easy http access , UTL_SMTP for low level STMP programs , UTL_MAIL for high level email functionality. With these packages pl/sql can cover most of todays requirements for REST, point-to-point communication, web sockets and much much more.
There is already a large amount of packages that will enable you to do even more advanced stuff, then what the standard packages in the database can deliver. There is the Alexandria Library compiled by Morten Braaten, which includes PayPal, Amazon, Google, Excel, PDF integrations and much more.
And there is much much more out there. At the end of the presentation I will have a bigger list of projects that I know of, and their capabilities.
So let's take a look at where it started, and some of the stuff I've built.