{"id":261,"date":"2020-04-29T22:29:03","date_gmt":"2020-04-29T22:29:03","guid":{"rendered":"http:\/\/oracle-internals.com\/blog\/?p=261"},"modified":"2020-07-03T20:30:08","modified_gmt":"2020-07-03T20:30:08","slug":"a-not-so-brief-but-very-accurate-history-of-pl-sql","status":"publish","type":"post","link":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/","title":{"rendered":"A (Not So) Brief But (Very) Accurate History of PL\/SQL"},"content":{"rendered":"\n<p><strong>Preface<\/strong><\/p>\n\n\n\n<p>PL\/SQL is one of the&nbsp;<a target=\"_blank\" href=\"https:\/\/www.tiobe.com\/tiobe-index\/\" rel=\"noreferrer noopener\">top twenty programming languages<\/a>&nbsp;in the world. While I&#8217;m no&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Matthew_Symonds\" rel=\"noreferrer noopener\">Matthew Symonds<\/a>, and this is no&nbsp;<a target=\"_blank\" href=\"https:\/\/www.amazon.com\/Softwar-Intimate-Portrait-Ellison-Oracle\/dp\/0743225058\/ref=tmm_pap_swatch_0?_encoding=UTF8&amp;qid=&amp;sr=\" rel=\"noreferrer noopener\">Softwar<\/a>, the history of PL\/SQL deserves a helluva lot more than, &#8220;Oracle 7 had an advanced architecture and, like Sybase, was fully programmable via its elegant new PL\/SQL programming language.&#8221; That&#8217;s why, during the process working on my OOW\/OCO session and related blog series, &#8220;<a target=\"_blank\" href=\"http:\/\/oracle-internals.com\/blog\/2020\/04\/21\/demystifying-pl-sql-the-life-of-a-compilation-unit\/\" rel=\"noreferrer noopener\">Demystifying PL\/SQL: The Life of a Compilation Unit<\/a>,&#8221; I wanted to include some of that history.<\/p>\n\n\n\n<p>When I first began writing this history, I figured it would be a few paragraphs at most. In fact, the original title was <em>A Brief But Accurate History of PL\/SQL<\/em>. The deeper I dug and the more people I spoke with, however, the more fascinating the story became. At one point, I decided there was no way I could leave all of this impressive history on the cutting-room floor.<\/p>\n\n\n\n<p>As this is the longest post I&#8217;ve written&#8211;and I have even more content available&#8211;I&#8217;m working with Aaron Lazenby at Oracle to (hopefully) extend this into a collaborative multi-part set of articles for&nbsp;<a target=\"_blank\" href=\"https:\/\/www.oracle.com\/news\/\" rel=\"noreferrer noopener\">Oracle Connect<\/a>. For that reason, this entry covers only a subset of the origins of PL\/SQL. While much of the original underlying code still exists, this post does not cover the history of the&nbsp;<a target=\"_blank\" href=\"https:\/\/community.oracle.com\/docs\/DOC-993152\" rel=\"noreferrer noopener\">optimizing compiler improvements<\/a>.<\/p>\n\n\n\n<p>Now, without any further ado whatsoever, I present the origins of PL\/SQL.<\/p>\n\n\n\n<p><strong>Creating a Language (PL\/SQL V1)<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"564\" src=\"http:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg\" alt=\"\" class=\"wp-image-269\" srcset=\"https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg 800w, https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare-300x212.jpg 300w, https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare-768x541.jpg 768w, https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare-624x440.jpg 624w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Working on PL\/SQL (Peter Clare with daughter Tara)<\/figcaption><\/figure>\n\n\n\n<p>Peter Clare&#8217;s career began in 1972 at&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Control_Data_Corporation\">Control Data Corporation<\/a>&nbsp;(CDC). Although CDC no longer exists, throughout the 1960s and 1970s, it was one of the top mainframe and supercomputer companies in the United States. In terms of software, CDC&#8217;s Compiler Products Division created the first commercial&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Pascal_(programming_language)\">Pascal<\/a>&nbsp;compiler. Peter&#8217;s role in this division consisted of language and compiler development focused on building the world&#8217;s fastest computer language processors. During his six-year tenure there, Peter not only improved CDC&#8217;s compilers but also learned a great deal about overall language development and, more importantly, the practical issues related to it. With this knowledge, Peter left CDC and became a consultant.<\/p>\n\n\n\n<p>Years later, in 1984, Peter thumbed through one of the local bay area tech publications looking for additional consulting-related work. Contained inside that publication was an advertisement from&nbsp;<a target=\"_blank\" href=\"https:\/\/www.oracle.com\/index.html\" rel=\"noreferrer noopener\">Oracle<\/a>. Through the grapevine, Peter had heard Oracle was in the process of porting the database to many different platforms, one of which he knew rather well. Thinking it may be an excellent opportunity for some contract work, Peter gave Oracle a call. A few days later, Peter met with&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob_Miner\" rel=\"noreferrer noopener\">Bob Miner<\/a>&nbsp;and Bill Friend for an interview.<\/p>\n\n\n\n<p>Initially, the trio reviewed Peter&#8217;s porting-related experience. As Oracle was also working on&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/SQL\" rel=\"noreferrer noopener\">SQL<\/a>&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Embedded_SQL#Oracle_Database\" rel=\"noreferrer noopener\">precompilers<\/a>&nbsp;and a&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Oracle_Forms#Forms_2.x\" rel=\"noreferrer noopener\">forms-based interface<\/a>&nbsp;to the&nbsp;<a target=\"_blank\" href=\"https:\/\/www.oracle.com\/database\/\" rel=\"noreferrer noopener\">database<\/a>, the group additionally discussed Peter&#8217;s background in language and compiler development. By the end of that meeting, Bob and Bill convinced Peter to accept a full-time job; Peter became the thirteenth developer at Oracle.<\/p>\n\n\n\n<p>Peter wasn&#8217;t your stereotypical Oracle developer. Described by his teammates as a friendly, easy-going, competent, and highly-capable architect, Peter was not only known for being smart, but also for his love of the water and&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Windsurfing\" rel=\"noreferrer noopener\">windsurfing<\/a>, which he did almost every day. Peter took the old, &#8220;work hard, play hard&#8221; motto to heart, striving to achieve a fulfilling work-life balance &#8211; one he honed to perfection throughout his career.<\/p>\n\n\n\n<p>In his first six months at Oracle, Peter&#8217;s responsibilities were more project management related than technical. Bob wanted to focus on development and relied on Peter to manage day-to-day project tasks. Although Peter enjoyed the work, communication became increasingly challenging. &#8220;By that time, Bob and Larry had been working together for quite a while,&#8221; Peter remembered, &#8220;it was natural for them to communicate directly with each other and, as the man-in-the-middle, it didn&#8217;t take long for everyone to realize I was the third wheel.&#8221; To reduce this friction, everyone agreed it would be better for Peter to focus on technical work.<\/p>\n\n\n\n<p>Given his background in programming languages, Peter began working on Oracle&#8217;s precompilers. It wasn&#8217;t long until another issue arose: competition.<\/p>\n\n\n\n<p>In those days, a couple of database vendors had simple&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Database_trigger\">triggers<\/a>. Similarly, the only way for the database to execute a procedural function was to write it in another language, compile it, and write an interface. Ken Rudin, PL\/SQL&#8217;s initial product manager, recalls, &#8220;as these approaches were somewhat limiting, rather than implement comparable functionality, Oracle wanted to leapfrog the competition and offer a complete procedural programming capability that lived inside the database. Thankfully, Oracle had realized early on that a consistent procedural language would be beneficial across multiple tools.&#8221; That language was PL\/SQL, and the best person to invent it was Peter Clare.<\/p>\n\n\n\n<p>To create PL\/SQL, Peter worked closely with Kendall Jensen, the first official developer of PL\/SQL. &#8220;Kendall was the key person,&#8221; mentions Peter, &#8220;he really understood building modern compilers and knew all the latest tools.&#8221; To begin, Peter asked Kendall to find everything he could on the&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Ada_(programming_language)\" rel=\"noreferrer noopener\">Ada programming language<\/a>.<\/p>\n\n\n\n<p>Immediately, Kendall went straight to the Stanford Library to search for whatever Ada research material was available. Kendall grabbed a copy of everything he could, returned to the Oracle office, and began reading. One of the books he picked-up was a publication titled, &#8220;<a target=\"_blank\" href=\"https:\/\/searchworks.stanford.edu\/view\/318996\" rel=\"noreferrer noopener\">DIANA: An Intermediate Language for Ada<\/a>,&#8221; by Gerhard Goos, William A. Wulf, Arthur Evans Jr., and Kenneth J. Butler. This publication, written as a reference manual, contained not only the Ada language&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Formal_grammar\" rel=\"noreferrer noopener\">grammar<\/a>&nbsp;but also the&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Interface_description_language\" rel=\"noreferrer noopener\">Interface Definition Language<\/a>&nbsp;(IDL) specification of the Descriptive Intermediate Attributed Notation for Ada &#8211; the predominant Ada&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\" rel=\"noreferrer noopener\">intermediate representation<\/a>&nbsp;of the time. With this information at hand, in January of 1987, the first line of PL\/SQL&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Compiler\" rel=\"noreferrer noopener\">compiler<\/a>&nbsp;code was written.<\/p>\n\n\n\n<p>The PL\/SQL compiler began as a verbatim copy of the specification. Kendall wrote the original&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Yacc\" rel=\"noreferrer noopener\">YACC<\/a>-based parser using the manual&#8217;s Ada grammar and generated a&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/DIANA_(intermediate_language)\" rel=\"noreferrer noopener\">DIANA<\/a>&nbsp;tree directly from the syntactic rule actions. Unlike compilers for other languages, which often generate an&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Abstract_syntax_tree\" rel=\"noreferrer noopener\">abstract syntax tree<\/a>&nbsp;and then translate that tree to the intermediate language, this direct approach worked well for an Ada-like language &#8211; particularly as the reference manual represented the IDL and grammar in an interlaced fashion. Why were PL\/SQL&#8217;s syntax and feature-set modeled after Ada?<\/p>\n\n\n\n<p>Considered the successor to Pascal, in the 1980s, Ada was an up-and-coming programming language that was particularly popular within the United States government. It is because of this, and Oracle&#8217;s well-known working relationship with the government at that time, that many believe Ada was selected. While that aspect added a degree of credibility to the language, it was more of a tangential benefit than an intentional design decision. In reality, the development team wanted PL\/SQL to be a&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Strong_and_weak_typing\" rel=\"noreferrer noopener\">strongly typed language<\/a>. In those days, most programming languages were strongly typed, and Oracle didn&#8217;t want to offer reduced capabilities within the database. Although the developers made concessions for&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Type_conversion\" rel=\"noreferrer noopener\">type conversion<\/a>&nbsp;between the database and PL\/SQL engines, which some regretted later, Ada was known to be a simple, safe, and modular language. Likewise,&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/PL\/I\" rel=\"noreferrer noopener\">PL\/I<\/a>&nbsp;was the basis of both SQL and Ada, which meant they shared many similarities and made Ada ideal for modeling Oracle&#8217;s procedural language after.<\/p>\n\n\n\n<p>Eventually, there were more tasks than Peter and Kendall could accomplish on their own. As such, additional developers joined the team. While Kendall continued to own the parser and overall&nbsp;<a target=\"_blank\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/20\/lnpls\/index.html\" rel=\"noreferrer noopener\">PL\/SQL syntax<\/a>, which he enjoyed, each new developer specialized in a specific component. The first, Laurence Hughes, performed some cleanup work, picked up various bits-and-pieces, started building toward some semblance of&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Object-oriented_programming\" rel=\"noreferrer noopener\">object-orientedness<\/a>, and landed on overseeing&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Code_generation_(compiler)\" rel=\"noreferrer noopener\">code generation<\/a>&nbsp;and&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Execution_(computing)\" rel=\"noreferrer noopener\">execution<\/a>. Pierre Dufour joined soon after, making a few improvements to the parser before focusing on the&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Semantic_analysis_(compilers)\" rel=\"noreferrer noopener\">semantic layer<\/a>&nbsp;and improving the DIANA tree annotations. Last to join was Gray Clossman.<\/p>\n\n\n\n<p>&#8220;By the time I came to Oracle, the group had already implemented a compiler and&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Interpreter_(computing)\" rel=\"noreferrer noopener\">interpreter<\/a>&nbsp;for its&nbsp;<a target=\"_blank\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/20\/lnpls\/plsql-control-statements.html#GUID-18777904-23F6-4F6D-8B41-46BABF00BA03\" rel=\"noreferrer noopener\">flow-of-control commands<\/a>&nbsp;and&nbsp;<a target=\"_blank\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/20\/lnpls\/plsql-data-types.html#GUID-391C58FD-16AF-486C-AF28-173E309CDBA5\" rel=\"noreferrer noopener\">scalar data types<\/a>.&#8221;, recalls Gray. &#8220;The development of PL\/SQL came at an exciting time because many programming-language concepts had been explored in academia, but were not yet available in&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Scripting_language\" rel=\"noreferrer noopener\">scripting languages<\/a>&nbsp;for commercial products.&#8221; Gray worked on several aspects of the language, such as improving&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Memory_management\" rel=\"noreferrer noopener\">memory management<\/a>&nbsp;and taking over Laurence&#8217;s initial work on object-oriented support. &#8220;Gray understood languages like no one else I&#8217;ve ever known.&#8221;, Peter recalls, &#8220;he had a lot of experience in functional programming and had a clear understanding of all the issues related to it.&#8221; While multiple developers worked&nbsp;<em>on<\/em>&nbsp;PL\/SQL, one worked&nbsp;<em>with<\/em>&nbsp;it: James Mallory.<\/p>\n\n\n\n<p>James began his first stint at Oracle during his summer break from Stanford in 1987. As the &#8220;first PL\/SQL programmer&#8221; not developing the language itself, he wrote the canonical &#8220;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/%22Hello,_World!%22_program\" rel=\"noreferrer noopener\">Hello World<\/a>&#8221; as well as a quality assurance&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Test_suite\" rel=\"noreferrer noopener\">test suite<\/a>&nbsp;for PL\/SQL V1. &#8220;We had been working on the language for a while,&#8221; Peter recalls, &#8220;and when you test a language yourself, you know to avoid certain things the compiler can&#8217;t handle. It&#8217;s good to have a fresh set of eyes play with the language every once in a while.&#8221;<\/p>\n\n\n\n<p>Over time, Kendall&#8217;s foresight&#8211;to implement the entire specification upfront, rather than only the subset required to support PL\/SQL V1&#8211;resulted in an increased ability to add additional functionality later in development. As an example, while PL\/SQL V1 only supported simple procedures, the addition of packages in PL\/SQL V2 primarily required additions to the code generator and interpreter &#8211; the majority of parser and DIANA support was already present. Gray remembers, &#8220;Kendall always maintained a clear overview of the project; he never got lost in the weeds, always saw the priorities calmly, and was available to help work through a knotty problem.&#8221;<\/p>\n\n\n\n<p>The next knotty problem: integrating PL\/SQL into Oracle Database.<\/p>\n\n\n\n<p><strong>Integrating with Oracle 7 (PL\/SQL V2)<\/strong><\/p>\n\n\n\n<p>It all began during a series of discussions that took place at Bob Miner&#8217;s Pacific Heights home office. There, Bob, Peter, and Roger Bamford met to exchange ideas concerning how to provide non-Oracle developers with the ability to extend core server functionality easily. &#8220;Getting together face-to-face with Roger was always beneficial,&#8221; Peter remembers, &#8220;he&#8217;s an incredibly intelligent guy &#8211; I always learned a lot about the database from him, and he learned a lot about PL\/SQL from me.&#8221;<\/p>\n\n\n\n<p>The architecture of the PL\/SQL engine, as an&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Component-based_software_engineering\" rel=\"noreferrer noopener\">embeddable component<\/a>&nbsp;for Oracle products, afforded Oracle several advantages. First, the engine could execute server-side from within the database itself. Second, the engine could operate client-side, integrated into other Oracle products (e.g., SQL*Forms.) Lastly, the engine could execute in a similar client-side fashion, but more independently, as it does to provide PL\/SQL support in&nbsp;<a target=\"_blank\" href=\"https:\/\/www.oracle.com\/database\/technologies\/related\/timesten.html\" rel=\"noreferrer noopener\">TimesTen<\/a>.<\/p>\n\n\n\n<p>While server-side PL\/SQL is the form most people are familiar with, it took a significant amount of time and effort to get working. &#8220;Getting PL\/SQL to run server-side was a nightmare,&#8221; Pierre recalled, &#8220;initially, it fit into the database about as well as round pegs fit into trapezoids.&#8221; Peter also remembers, &#8220;getting PL\/SQL into the V7 database was a bit of a hack job, but a necessary hack job.&#8221; &#8220;The first cut was beneficial,&#8221; Peter continues, &#8220;because the database team learned a lot from us, and we learned a lot from them. It was the first time each team saw the problems the other team faced.&#8221;<\/p>\n\n\n\n<p>From a client-side perspective, the PL\/SQL engine was not only available in Forms, but also several custom vertical tools. Gray recalls, &#8220;We had stressful meetings with designers of Oracle&#8217;s client-side products where we tried to show how they could model the semantics of their applications in PL\/SQL by using scoping rather than namespaces.&#8221;<\/p>\n\n\n\n<p>Although the PL\/SQL engine is dependent on a substantial amount of underlying platform support and memory management code shared with the Oracle Database, the PL\/SQL engine sports an&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Abstraction_(computer_science)\" rel=\"noreferrer noopener\">abstract<\/a>&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cursor_(databases)\" rel=\"noreferrer noopener\">cursor<\/a>&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Interface-based_programming\" rel=\"noreferrer noopener\">interface<\/a>&nbsp;to the underlying database. &#8220;The cursor interface we came up with to separate the database from PL\/SQL was one of the neatest parts,&#8221; recalls Kendall. In Oracle, the PL\/SQL cursor interface is mapped to the database kernel query layer while, in TimesTen, it&#8217;s an&nbsp;<a target=\"_blank\" href=\"https:\/\/docs.oracle.com\/cd\/E11882_01\/timesten.112\/e21639\/intro.htm#TTPLS357\" rel=\"noreferrer noopener\">independent connection<\/a>&nbsp;to the TimesTen engine.<\/p>\n\n\n\n<p>In late 1989 or early 1990, Oracle had grown considerably. As a result, the consolidation of multiple development teams into larger groups occurred. The PL\/SQL team was no exception, and several other members of the precompiler team joined PL\/SQL development. Given the similarity in developer skillsets, this restructuring worked to Oracle&#8217;s advantage and resulted in several immediate improvements to PL\/SQL. Notable immediate improvements were the fruit born from the work of Terry and Jeffrey Olkin; brothers referred to fondly as &#8220;The Wondertwins.&#8221;<\/p>\n\n\n\n<p>&#8220;Terry was super to have around,&#8221; recalled Pierre, &#8220;he owned our YACC technology that underlay PL\/SQL and precompilers.&#8221; Terry has always had a passion for programming languages. &#8220;Building a programming language that allows a user to specify what the computer should do, at a high level, and transforming that desire into something the computer understands and can execute has always seemed somewhat magical to me,&#8221; Terry says. That&#8217;s why, before joining PL\/SQL development, he spent several years improving Oracle&#8217;s precompilers. During that time, in addition to many other things, Terry made significant improvements to&nbsp;<a target=\"_blank\" href=\"https:\/\/docs.oracle.com\/database\/121\/LNPCC\/pc_01int.htm#LNPCC3043\" rel=\"noreferrer noopener\">SQLLIB<\/a>, the underlying shared library all Oracle precompilers generated code for, and created SLAX, the&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Compiler-compiler\" rel=\"noreferrer noopener\">parser generator<\/a>&nbsp;PL\/SQL relies on to this day. SLAX, however, was not created for PL\/SQL.<\/p>\n\n\n\n<p>In the 1980s, Oracle supported SQL precompilers for the&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Ada_(programming_language)\" rel=\"noreferrer noopener\">Ada<\/a>,&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/C_(programming_language)\" rel=\"noreferrer noopener\">C<\/a>\/<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/C%2B%2B\" rel=\"noreferrer noopener\">C++<\/a>,&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/COBOL\" rel=\"noreferrer noopener\">COBOL<\/a>,&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Fortran\" rel=\"noreferrer noopener\">FORTRAN<\/a>,&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Pascal_(programming_language)\" rel=\"noreferrer noopener\">Pascal<\/a>, and&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/PL\/I\" rel=\"noreferrer noopener\">PL\/I<\/a>&nbsp;host programming languages. At the time, each precompiler used a hand-written parser \u2013 this made it difficult to track which features each supported. Alternatively, by using a parser generator, the developers could more easily specify the grammar of the host language and generate the code to parse it. Unfortunately, while this made it easy to define the grammar of the embedded SQL supported by the precompiler (via EXEC SQL) and the host language, parsing both at the same time was problematic.<\/p>\n\n\n\n<p>In language&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Parsing\" rel=\"noreferrer noopener\">parsing<\/a>, an&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Island_grammar\" rel=\"noreferrer noopener\">island grammar<\/a>&nbsp;is a grammar of one programming language contained within that of another programming language. Embedded SQL, stored within a host language (C, COBOL, etc.), is considered the island grammar. YACC, the preeminent parser generator of the time, did not (and still does not) truly support island grammars. Getting YACC to parse an island grammar is painful.<\/p>\n\n\n\n<p>From a technical standpoint, for YACC to switch between multiple grammars in the same parser, a specific&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Symbol_(formal)\" rel=\"noreferrer noopener\">symbol<\/a>, invisible to the user, must be specified. The parser and&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Lexical_analysis#Scanner\" rel=\"noreferrer noopener\">lexer<\/a>&nbsp;must then communicate with each other around which language to tokenize and which to parse. When the lexer identifies the island grammar, it switches states and must inject this specific symbol so YACC can select the proper island grammar rule (rather than the host language rule). Likewise, when YACC believes it has parsed the island grammar, it must inform the lexer that it should switch its state back to the host language. Although there are other ways to do this with YACC, all are equally painful. As the precompiler group needed to be able to integrate the same embedded SQL parser within multiple host languages, they needed a tool that would allow them to do that easily. Enter SLAX.<\/p>\n\n\n\n<p>SLAX, pronounced as slack, is an internal mostly-YACC-compatible parser generator. While it may look like an acronym, it isn&#8217;t. SLAX stands for Segmented Language YACC. That&#8217;s right, the proper pronunciation of the X in SLAX is as a K. While SLAX shared no code with YACC, when he named it, Terry decided to give a respectful tip of the hat to YACC. Like most tools, it did its job well. After a while, however, SLAX needed to be modified and was eventually rewritten. John Ciminski performed the rewrite in what Terry referred to as &#8220;The Right Way.&#8221; Already a proven tool, SLAX was a natural replacement for the PL\/SQL parser&#8217;s use of YACC. Terry transitioned PL\/SQL from YACC to SLAX when he began working on PL\/SQL sometime in 1990, before improving the underlying parser itself.<\/p>\n\n\n\n<p>During this time, Terry brought his brother, Jeffrey, on board. Unlike Terry, who enjoyed frontend compiler work, Jeffrey preferred the backend: specifically, code generation and execution. &#8220;Jeffrey was phenomenal,&#8221; remarked Peter.<\/p>\n\n\n\n<p>Initially, the focus on PL\/SQL development was the language itself, and performance wasn&#8217;t a critical aspect. But, as more and more customers began to use PL\/SQL, performance became an issue. The primary performance bottleneck was the first version of the PL\/SQL&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Virtual_machine\" rel=\"noreferrer noopener\">virtual machine<\/a>&nbsp;(&#8220;VM&#8221;), which was a stack-based byte code interpreter similar to standard&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/P-code_machine\" rel=\"noreferrer noopener\">Pascal byte code (p-code) interpreters<\/a>&nbsp;of the time.<\/p>\n\n\n\n<p>In a&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Stack_machine#Simple_interpreters\">stack-based virtual machine<\/a>, expression operands are pushed onto the stack then popped when needed for computation. For machines of the time, this was too slow. The overhead interpreting each byte code instruction in software was significant; A simple computation could take dozens of instructions, and most of the time spent in execution went toward that overhead.<\/p>\n\n\n\n<p>In Ada, this is worse as operands can refer to variables within multiple&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Scope_(computer_science)\" rel=\"noreferrer noopener\">scopes<\/a>&nbsp;and across multiple&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikibooks.org\/wiki\/Ada_Programming\/Packages\" rel=\"noreferrer noopener\">packages<\/a>. As such, Jeffrey first rewrote all of that and created a kind of &#8220;mini-interpreter&#8221; for operands, so that retrieval of an operand, no matter how complex its address, could be performed as part of a single byte code instruction. This change substantially reduced the overhead for instruction decoding and made large PL\/SQL programs more feasible. On this improvement, Kendall recalls, &#8220;I remember looking at it. It was brilliant and beautiful code \u2013 really elegant.&#8221; James, who rejoined Oracle again in 1990, mentioned how much more efficient the new virtual machine was as well.&nbsp;<\/p>\n\n\n\n<p><strong>Life After PL\/SQL<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/MVC-003S.jpg\" alt=\"\" class=\"wp-image-275\" srcset=\"https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/MVC-003S.jpg 640w, https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/MVC-003S-300x225.jpg 300w, https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/MVC-003S-624x468.jpg 624w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption>Preparing the Next Generation (Pierre Dufour)<\/figcaption><\/figure>\n\n\n\n<p>Eventually, everyone from the initial days would move on from PL\/SQL &#8211; either leaving Oracle or moving to other projects. Gray Clossman went on to build other language-related features at Oracle, such as&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/SQLJ\" rel=\"noreferrer noopener\">SQLJ<\/a>. Pierre Dufour moved to the&nbsp;<a target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Oracle_Applications\" rel=\"noreferrer noopener\">applications-side<\/a>, where he worked on CRM as well as built an internal-only PL\/SQL compiler, Rosetta, that made it possible to make calls between Java and PL\/SQL without modification. After seeing a demo of a tool implementing the ANSI SQL Module Language&#8211;over the weekend&#8211;Terry Olkin built a prototype that did the same for Oracle, which led to the creation of the&nbsp;<a target=\"_blank\" href=\"https:\/\/docs.oracle.com\/cd\/A87860_01\/doc\/appdev.817\/a58231\/ch1.htm#1188\" rel=\"noreferrer noopener\">SQL*Module<\/a>&nbsp;product.<\/p>\n\n\n\n<p><strong>Reflections<\/strong><\/p>\n\n\n\n<p>When asked what he thought of working at Oracle, Peter says, &#8220;I got the golden years. The database group was amazing, a truly incredible group of developers. I also loved working with the sales guys&#8211;the energy&#8211;it was the kind of place where if you had an idea and could make someone believe you could execute on it, you could.&#8221; &#8220;It was a blast,&#8221; recalls Kendall, &#8220;Until PL\/SQL became popular, we got to manage everything about it.&#8221; Gray shares a similar memory, &#8220;The team was self-starting and completely reliable. Each member held up their end of any joint development effort. It was a joy to work with them.&#8221;<\/p>\n\n\n\n<p>From a leadership perspective, all of the initial team members had a fond recollection of Peter in terms of both personality and technical competency. Kendall states, &#8220;I&#8217;ve never worked with anyone else who communicated at such a high level.&#8221; Terry continues, &#8220;Peter was the brains behind PL\/SQL and also one of the nicest people I&#8217;ve ever met.&#8221; Gray seconded this with, &#8220;Peter was the best possible project leader and manager; he often jolted us from our complacency as workaday programmers by proposing audacious possibilities for the project or by asking surprising, even futuristic, questions.&#8221; James remembers, &#8220;Peter was a great guy and fun to work for, and it was his vision that gave rise to PL\/SQL.&#8221;<\/p>\n\n\n\n<p><strong>Acknowledgments<\/strong><\/p>\n\n\n\n<p>For taking their time to contribute, with both memories and references, I sincerely want to thank the following:<\/p>\n\n\n\n<p>From the original team: Peter Clare, Kendall Jensen, Laurence Hughes, Pierre Dufour, Gray Clossman, James Mallory, and Ken Rudin.<\/p>\n\n\n\n<p>From subsequent developers: Terry and Jeffrey Olkin.<\/p>\n\n\n\n<p>From Oracle Alumni and OakTable: Bill Friend, Roger Bamford, Kirk Bradley, Graham Wood, Mogens N\u00f8rgaard, Bob Jenkins, Bryn Llewellyn, and Tuomas Pystynen.<\/p>\n\n\n\n<p>From those at Oracle (for the potential Connect article): Aaron Lazenby, Steven Feuerstein, and Charles Wetherell.<\/p>\n\n\n\n<p>While I&#8217;ve reached out to Larry Ellison and Andy Mendelsohn (who wrote the first PL\/SQL execution engine), for comment, I haven&#8217;t yet received a response. I&#8217;m hopeful we can one day add their recollections and insights to this archive as well.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Preface PL\/SQL is one of the&nbsp;top twenty programming languages&nbsp;in the world. While I&#8217;m no&nbsp;Matthew Symonds, and this is no&nbsp;Softwar, the history of PL\/SQL deserves a helluva lot more than, &#8220;Oracle 7 had an advanced architecture and, like Sybase, was fully programmable via its elegant new PL\/SQL programming language.&#8221; That&#8217;s why, during the process working on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,9],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A (Not So) Brief But (Very) Accurate History of PL\/SQL - Oracle Internals<\/title>\n<meta name=\"description\" content=\"While much has been written about PL\/SQL, very little is known about its origins. The following is the history of PL\/SQL from the original development team.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A (Not So) Brief But (Very) Accurate History of PL\/SQL - Oracle Internals\" \/>\n<meta property=\"og:description\" content=\"While much has been written about PL\/SQL, very little is known about its origins. The following is the history of PL\/SQL from the original development team.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/\" \/>\n<meta property=\"og:site_name\" content=\"Oracle Internals\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-29T22:29:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-07-03T20:30:08+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg\" \/>\n<meta name=\"author\" content=\"Jonah Harris\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jonahharris\" \/>\n<meta name=\"twitter:site\" content=\"@jonahharris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonah Harris\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/\"},\"author\":{\"name\":\"Jonah Harris\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"headline\":\"A (Not So) Brief But (Very) Accurate History of PL\/SQL\",\"datePublished\":\"2020-04-29T22:29:03+00:00\",\"dateModified\":\"2020-07-03T20:30:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/\"},\"wordCount\":3588,\"publisher\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"image\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg\",\"articleSection\":[\"Databases\",\"PL\/SQL\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/\",\"url\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/\",\"name\":\"A (Not So) Brief But (Very) Accurate History of PL\/SQL - Oracle Internals\",\"isPartOf\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg\",\"datePublished\":\"2020-04-29T22:29:03+00:00\",\"dateModified\":\"2020-07-03T20:30:08+00:00\",\"description\":\"While much has been written about PL\/SQL, very little is known about its origins. The following is the history of PL\/SQL from the original development team.\",\"breadcrumb\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#primaryimage\",\"url\":\"https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg\",\"contentUrl\":\"https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg\",\"width\":800,\"height\":564},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oracle-internals.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A (Not So) Brief But (Very) Accurate History of PL\/SQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#website\",\"url\":\"https:\/\/oracle-internals.com\/blog\/\",\"name\":\"Oracle Internals\",\"description\":\"Researching the Inner Workings of the World&#039;s Most Powerful Database\",\"publisher\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/oracle-internals.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\",\"name\":\"Jonah Harris\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g\",\"caption\":\"Jonah Harris\"},\"logo\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jonahharris\/\",\"https:\/\/x.com\/jonahharris\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A (Not So) Brief But (Very) Accurate History of PL\/SQL - Oracle Internals","description":"While much has been written about PL\/SQL, very little is known about its origins. The following is the history of PL\/SQL from the original development team.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/","og_locale":"en_US","og_type":"article","og_title":"A (Not So) Brief But (Very) Accurate History of PL\/SQL - Oracle Internals","og_description":"While much has been written about PL\/SQL, very little is known about its origins. The following is the history of PL\/SQL from the original development team.","og_url":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/","og_site_name":"Oracle Internals","article_published_time":"2020-04-29T22:29:03+00:00","article_modified_time":"2020-07-03T20:30:08+00:00","og_image":[{"url":"http:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg"}],"author":"Jonah Harris","twitter_card":"summary_large_image","twitter_creator":"@jonahharris","twitter_site":"@jonahharris","twitter_misc":{"Written by":"Jonah Harris","Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#article","isPartOf":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/"},"author":{"name":"Jonah Harris","@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"headline":"A (Not So) Brief But (Very) Accurate History of PL\/SQL","datePublished":"2020-04-29T22:29:03+00:00","dateModified":"2020-07-03T20:30:08+00:00","mainEntityOfPage":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/"},"wordCount":3588,"publisher":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"image":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#primaryimage"},"thumbnailUrl":"http:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg","articleSection":["Databases","PL\/SQL"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/","url":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/","name":"A (Not So) Brief But (Very) Accurate History of PL\/SQL - Oracle Internals","isPartOf":{"@id":"https:\/\/oracle-internals.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#primaryimage"},"image":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#primaryimage"},"thumbnailUrl":"http:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg","datePublished":"2020-04-29T22:29:03+00:00","dateModified":"2020-07-03T20:30:08+00:00","description":"While much has been written about PL\/SQL, very little is known about its origins. The following is the history of PL\/SQL from the original development team.","breadcrumb":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#primaryimage","url":"https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg","contentUrl":"https:\/\/oracle-internals.com\/blog\/wp-content\/uploads\/2020\/05\/pclare.jpg","width":800,"height":564},{"@type":"BreadcrumbList","@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/29\/a-not-so-brief-but-very-accurate-history-of-pl-sql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oracle-internals.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A (Not So) Brief But (Very) Accurate History of PL\/SQL"}]},{"@type":"WebSite","@id":"https:\/\/oracle-internals.com\/blog\/#website","url":"https:\/\/oracle-internals.com\/blog\/","name":"Oracle Internals","description":"Researching the Inner Workings of the World&#039;s Most Powerful Database","publisher":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/oracle-internals.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4","name":"Jonah Harris","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g","caption":"Jonah Harris"},"logo":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/jonahharris\/","https:\/\/x.com\/jonahharris"]}]}},"_links":{"self":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/261"}],"collection":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/comments?post=261"}],"version-history":[{"count":15,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/261\/revisions"}],"predecessor-version":[{"id":308,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/261\/revisions\/308"}],"wp:attachment":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/media?parent=261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/categories?post=261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/tags?post=261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}