PL/SQL
PL/SQL (Procedural Language/Structured Query Language) is Oracle Corporation's procedural extension language for SQL and the Oracle relational database. PL/SQL's general syntax resembles that of Ada.
PL/SQL is one of three key language paradigms embedded in the Oracle Database, along with SQL itself and also Java.
PL/SQL is available in Oracle Database (since version 7), TimesTen in-memory database (since version 11.2.1),[1] IBM DB2 (since version 9.7)[2].
Introduction
PL/SQL supports variables, conditions, loops and exceptions. Arrays are also supported, though in a somewhat unusual way, involving the use of PL/SQL collections. PL/SQL collections are a slightly advanced topic.
Implementations from version 8 of Oracle Database onwards have included features associated with object-orientation.
PL/SQL program units (essentially code containers) can be compiled into the Oracle database. Programmers can thus embed PL/SQL units of functionality into the database directly. They also can write scripts containing PL/SQL program units that can be read into the database using the Oracle SQL*Plus tool.
Once the program units have been stored into the database, they become available for execution at a later time.
While programmers can readily embed Data Manipulation Language (DML) statements directly into their PL/SQL code using straight forward SQL statements, Data Definition Language (DDL) requires more complex "Dynamic SQL" statements to be written in the PL/SQL code. However, DML statements underpin the majority of PL/SQL code in typical software applications.
In the case of PL/SQL dynamic SQL, early versions of the Oracle Database required the use of a complicated Oracle DBMS_SQL package library. More recent versions have however introduced a simpler "Native Dynamic SQL", along with an associated EXECUTE IMMEDIATE syntax.
Oracle Corporation customarily extends package functionality with each successive release of the Oracle Database.
PL/SQL program units
Anonymous Blocks
Anonymous blocks form the basis of the simplest PL/SQL code, and have the following structure: <source lang="PLSQL"> <<label>> DECLARE Type / item / function / procedure declarations BEGIN
Statements
EXCEPTION Exception handlers END label; </source>
The <<label>> and the DECLARE and EXCEPTION sections are optional.
Exceptions, errors which arise during the execution of the code, have one of two types:
- Predefined exceptions
- User-defined exceptions.
User-defined exceptions are always raised explicitly by the programmers, using the RAISE or RAISE_APPLICATION_ERROR commands, in any situation where they have determined that it is impossible for normal execution to continue. RAISE command has the syntax:
<source lang="PLSQL">RAISE <exception name>;</source>
Oracle Corporation has pre-defined several exceptions like NO_DATA_FOUND, TOO_MANY_ROWS,
etc.
Each exception has a SQL Error Number and SQL Error Message associated with it. Programmers can access these by using the SQLCODE and SQLERRM functions.
The DECLARE section defines and (optionally) initialises variables. If not initialised specifically, they default to NULL.
For example:
<source lang="PLSQL"> declare
number1 number(2); number2 number(2) := 17; -- value default text1 varchar2(12) := 'Hello world'; text2 date := SYSDATE; -- current date and time
begin
SELECT street_number INTO number1 FROM address WHERE name = 'INU';
end; </source>
The symbol := functions as an assignment operator to store a value in a variable.
The major datatypes in PL/SQL include NUMBER, INTEGER, CHAR, VARCHAR2, DATE, TIMESTAMP, TEXT etc.
Functions
Functions in PL/SQL are a collection of SQL and PL/SQL statements that perform a task and should return a value to the calling environment.
<source lang="PLSQL"> create or replace function <function_name> [(input/output variable declarations)] return return_type <IS|AS> [declaration block] begin <PL/SQL block with return statement> [Exception exception block] End; </source>
There are three types of parameter: IN, OUT and IN OUT. An IN parameter is used an input only. An IN parameter cannot be changed by the called program. An OUT parameter is initially NULL. The program assigns the parameter a value and that value is returned to the calling program. An IN OUT parameter may or may not have an initial value. That initial value may or may not be modified by the called program. Any changes made to the parameter are returned to the calling program.
Procedures
Procedures are the same as Functions, in that they are also used to perform some task with the difference being that procedures cannot be used in a SQL statement and although they can have multiple out parameters they do not return a value.
Procedures are traditionally the workhorse of the coding world and functions are traditionally the smaller, more specific pieces of code. PL/SQL maintains many of the distinctions between functions and procedures found in many general-purpose programming languages, but in addition, functions can be called from SQL, while procedures cannot.
Packages
Packages are groups of conceptually linked Functions, Procedures,Variable,Constants & Cursors etc. The use of packages promotes re-use of code. Packages usually have two parts, a specification and a body, although sometimes the body is unnecessary. The specification (spec for short) is the interface to your applications; it declares the types, variables, constants, exceptions, cursors, and subprograms available for use. The body fully defines cursors and subprograms, and so implements the spec.
Variables
Numeric variables
<source lang="PLSQL">variable_name number(P[,S]) := value;</source>
To define a numeric variable, the programmer appends the variable type NUMBER to the name definition. To specify the (optional) precision(P) and the (optional) scale (S), one can further append these in round brackets, separated by a comma. ("Precision" in this context refers to the number of digits which the variable can hold, "scale" refers to the number of digits which can follow the decimal point.)
A selection of other datatypes for numeric variables would include: binary_float, binary_double, dec, decimal, double precision, float, integer, int, numeric, real, smallint, binary_integer
Character variables
<source lang="PLSQL">variable_name varchar2(L) := 'Text';</source>
To define a character variable, the programmer normally appends the variable type VARCHAR2 to the name definition. There follows in brackets the maximum number of characters which the variable can store.
Other datatypes for character variables include: varchar, char, long, raw, long raw, nchar, nchar2, clob, blob, bfile
Date variables
<source lang="PLSQL">variable_name date := '01-Jan-2005';</source>
Oracle provides a number of data types that can store dates (DATE, DATETIME, TIMESTAMP etc.), however DATE is most commonly used.
Programmers define date variables by appending the datatype code "DATE" to a variable name.
The TO_DATE function can be used to convert strings to date values. The function converts the first quoted string into a date, using as a definition the second quoted string, for example:
<source lang="PLSQL">
to_date('31-12-2004','dd-mm-yyyy')
</source> or
<source lang="PLSQL">
to_date ('31-Dec-2004','dd-mon-yyyy', 'NLS_DATE_LANGUAGE = American')
</source>
To convert the dates to strings one uses the function TO_CHAR (date_string, format_string).
PL/SQL also supports the use of ANSI date and interval literals.[3] The following clause gives an 18-month range:
<source lang="PLSQL"> WHERE dateField BETWEEN DATE '2004-12-31' - INTERVAL '1-6' YEAR TO MONTH
AND DATE '2004-12-31'
</source>
Datatypes for specific columns
Variable_name Table_name.Column_name%type;
This syntax defines a variable of the type of the referenced column on the referenced tables.
Programmers specify user-defined datatypes with the syntax:
type data_type is record (field_1 type_1 :=xyz, field_2 type_2 :=xyz, ..., field_n type_n :=xyz);
For example:
<source lang="PLSQL"> declare
type t_address is record (
name address.name%type,
street address.street%type,
street_number address.street_number%type,
postcode address.postcode%type);
v_address t_address;
begin
select name, street, street_number, postcode into v_address from address where rownum = 1;
end; </source>
This sample program defines its own datatype, called t_address, which contains the fields name, street, street_number and postcode.
So according to the example, we are able to copy the data from the database to the fields in the program.
Using this datatype the programmer has defined a variable called v_address and loaded it with data from the ADDRESS table.
Programmers can address individual attributes in such a structure by means of the dot-notation, thus: "v_address.street := 'High Street';"
Conditional Statements
The following code segment shows the IF-THEN-ELSIF construct. The ELSIF and ELSE parts are optional so it is possible to create simpler IF-THEN or, IF-THEN-ELSE constructs.
<source lang="PLSQL"> IF x = 1 THEN
sequence_of_statements_1;
ELSIF x = 2 THEN
sequence_of_statements_2;
ELSIF x = 3 THEN
sequence_of_statements_3;
ELSIF x = 4 THEN
sequence_of_statements_4;
ELSIF x = 5 THEN
sequence_of_statements_5;
ELSE
sequence_of_statements_N;
END IF; </source>
The CASE statement simplifies some large IF-THEN-ELSE structures.
<source lang="PLSQL"> CASE
WHEN x = 1 THEN sequence_of_statements_1; WHEN x = 2 THEN sequence_of_statements_2; WHEN x = 3 THEN sequence_of_statements_3; WHEN x = 4 THEN sequence_of_statements_4; WHEN x = 5 THEN sequence_of_statements_5; ELSE sequence_of_statements_N;
END CASE; </source>
CASE statement can be used with predefined selector:
<source lang="PLSQL"> CASE x
WHEN 1 THEN sequence_of_statements_1; WHEN 2 THEN sequence_of_statements_2; WHEN 3 THEN sequence_of_statements_3; WHEN 4 THEN sequence_of_statements_4; WHEN 5 THEN sequence_of_statements_5; ELSE sequence_of_statements_N;
END CASE; </source>
Array handling
PL/SQL refers to arrays as "collections". The language offers three types of collections:
- Index-by tables (associative arrays)
- Nested tables
- Varrays (variable-size arrays)
Programmers must specify an upper limit for varrays, but need not for index-by tables or for nested tables. The language includes several collection methods used to manipulate collection elements: for example FIRST, LAST, NEXT, PRIOR, EXTEND, TRIM, DELETE, etc. Index-by tables can be used to simulate associative arrays, as in this example of a memo function for Ackermann's function in PL/SQL.
Looping
As a procedural language by definition, PL/SQL provides several iteration constructs, including basic LOOP statements, WHILE loops, FOR loops, and Cursor FOR loops.
LOOP statements
Syntax: <source lang="PLSQL"> <<parent_loop>> LOOP statements
<<child_loop>> loop statements exit parent_loop when <condition>; -- Terminates both loops exit when <condition>; -- Returns control to parent_loop end loop;
exit when <condition>; END LOOP parent_loop; </source>
Loops can be terminated by using the EXIT keyword, or by raising an exception.
FOR loops
Cursor FOR loops
<source lang="plsql"> FOR RecordIndex IN (SELECT person_code FROM people_table) LOOP
DBMS_OUTPUT.PUT_LINE(RecordIndex.person_code);
END LOOP; </source>
Cursor-for loops automatically open a cursor, read in their data and close the cursor again
As an alternative, the PL/SQL programmer can pre-define the cursor's SELECT-statement in advance in order (for example) to allow re-use or to make the code more understandable (especially useful in the case of long or complex queries).
<source lang="plsql"> DECLARE
CURSOR cursor_person IS SELECT person_code FROM people_table;
BEGIN
FOR RecordIndex IN cursor_person LOOP DBMS_OUTPUT.PUT_LINE(RecordIndex.person_code); END LOOP;
END; </source>
The concept of the person_code within the FOR-loop gets expressed with dot-notation ("."):
<source lang="plsql"> RecordIndex.person_code </source>
Example
<source lang="plsql">
declare
var number;
begin
/*N.B. for loop variables in pl/sql are new declarations, with scope only inside the loop */
for var in 0 .. 10 loop
dbms_output.put_line(var);
end loop;
if (var is null) then
dbms_output.put_line('var is null');
else
dbms_output.put_line('var is not null');
end if;
end;
</source>
Output:
0 1 2 3 4 5 6 7 8 9 10 var is null
Similar languages
PL/SQL functions analogously to the embedded procedural languages associated with other relational databases. Sybase ASE and Microsoft SQL Server have Transact-SQL, PostgreSQL has PL/pgSQL (which tries to emulate PL/SQL to an extent), and IBM DB2 includes SQL Procedural Language,[4] which conforms to the ISO SQL’s SQL/PSM standard.
The designers of PL/SQL modelled its syntax on that of Ada. Both Ada and PL/SQL have Pascal as a common ancestor, and so PL/SQL also resembles Pascal in numerous aspects. The structure of a PL/SQL package closely resembles the basic Pascal program structure or a Borland Delphi unit. Programmers can define global data-types, constants and static variables, public and private, in a PL/SQL package.
PL/SQL also allows for the definition of classes and instantiating these as objects in PL/SQL code. This resembles usages in object-oriented programming languages like Object Pascal, C++ and Java. PL/SQL refers to a class as an "Abstract Data Type" (ADT) or "User Defined Type"(UDT), and defines it as an Oracle SQL data-type as opposed to a PL/SQL user-defined type, allowing its use in both the Oracle SQL Engine and the Oracle PL/SQL engine. The constructor and methods of an Abstract Data Type are written in PL/SQL. The resulting Abstract Data Type can operate as an object class in PL/SQL. Such objects can also persist as column values in Oracle database tables.
PL/SQL does not resemble Transact-SQL, despite superficial similarities. Porting code from one to the other usually involves non-trivial work, not only due to the differences in the feature sets of the two languages, but also due to the very significant differences in the way Oracle and SQL Server deal with concurrency and locking.
The Fyracle project aims to enable the execution of PL/SQL code in the open-source Firebird database.
The StepSqlite product is a PL/SQL compiler for the popular small database SQLite.
See also
References
- ↑ http://otndnld.oracle.co.jp/document/products/V16967_01/doc/timesten.1121/e13076/intro.htm
- ↑ http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/index.html
- ↑
{{Expansion depth limit exceeded|{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded| et al.
}}
}}
}}, ed{{Expansion depth limit exceeded|s}}{{Expansion depth limit exceeded|.||.}}{{Expansion depth limit exceeded| ({{{Expansion depth limit exceeded}}}){{Expansion depth limit exceeded| [{{{Expansion depth limit exceeded}}}]
}}
}}
}}{{Expansion depth limit exceeded|,
}}{{Expansion depth limit exceeded| 1={{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}
|{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}
|{{Expansion depth limit exceeded|{{Expansion depth limit exceeded|http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pmcentrez&artid={{{Expansion depth limit exceeded}}}
}}
}}
}}
}}
| 2={{Expansion depth limit exceeded|Expansion depth limit exceeded{{{Expansion depth limit exceeded}}}Expansion depth limit exceeded
|"{{Expansion depth limit exceeded|{{Expansion depth limit exceeded|
}}[{{{Expansion depth limit exceeded}}}]
}}"
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded|,
}} {{Expansion depth limit exceeded| 1={{Expansion depth limit exceeded|{{Expansion depth limit exceeded|{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}
|{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pmcentrez&artid={{{Expansion depth limit exceeded}}}
}}}}
}}
}}
|{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}
|{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pmcentrez&artid={{{Expansion depth limit exceeded}}}
}}}}
}}
}}
| 2=Expansion depth limit exceeded{{Expansion depth limit exceeded| [{{{Expansion depth limit exceeded}}}]
}}Expansion depth limit exceeded
}}
}}{{Expansion depth limit exceeded| ({{{Expansion depth limit exceeded}}})
}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}{{Expansion depth limit exceeded|, Expansion depth limit exceeded{{{Expansion depth limit exceeded}}}Expansion depth limit exceeded
}}{{Expansion depth limit exceeded|,
}}{{Expansion depth limit exceeded| ({{{Expansion depth limit exceeded}}} ed.)
}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded|Expansion depth limit exceeded
|,
}} {{{Expansion depth limit exceeded}}}
}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded| [{{{Expansion depth limit exceeded}}}]
}}
}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}{{Expansion depth limit exceeded|, {{Expansion depth limit exceeded|.|A|a}}rchived{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| from {{Expansion depth limit exceeded||the original}}}}
}}{{Expansion depth limit exceeded| on {{{Expansion depth limit exceeded}}}
}}{{Expansion depth limit exceeded|. {{Expansion depth limit exceeded|If you specify
|{{Expansion depth limit exceeded|archiveurl|archivedate}}=, you must {{Expansion depth limit exceeded| also specify|{{Expansion depth limit exceeded|archivedate|archiveurl}}=|first specify|url=}}}} }} }}{{Expansion depth limit exceeded||.}}<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook{{Expansion depth limit exceeded|&rft.genre=bookitem&rft.btitle={{Expansion depth limit exceeded}}&rft.atitle={{Expansion depth limit exceeded}} |&rft.genre=book&rft.btitle={{Expansion depth limit exceeded}} }}&rfr_id=info:sid/en.wikipedia.org:PL/SQL"> - ↑ SQL PL
{{Expansion depth limit exceeded| left =
| #default = }}
{{Expansion depth limit exceeded| {{{Expansion depth limit exceeded}}}
| [[File:{{Expansion depth limit exceeded| speedy = Ambox speedy deletion.png
| delete = Ambox deletion.png
| content = Ambox content.png
| style = Edit-clear.svg
| move = Ambox move.png
| protection = Ambox protection.png
| notice
| #default = Ambox notice.png
}} | {{Expansion depth limit exceeded| left = 20x20px
| #default = 40x40px
}} |link=|alt=]]
}}{{Expansion depth limit exceeded| left =
| #default = |
{{{Expansion depth limit exceeded}}} |
[[Category:{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}|{{{Expansion depth limit exceeded}}}}}]]
{{Expansion depth limit exceeded| left =
| #default = }}
{{Expansion depth limit exceeded| {{{Expansion depth limit exceeded}}}
| [[File:{{Expansion depth limit exceeded| speedy = Ambox speedy deletion.png
| delete = Ambox deletion.png
| content = Ambox content.png
| style = Edit-clear.svg
| move = Ambox move.png
| protection = Ambox protection.png
| notice
| #default = Ambox notice.png
}} | {{Expansion depth limit exceeded| left = 20x20px
| #default = 40x40px
}} |link=|alt=]]
}}{{Expansion depth limit exceeded| left =
| #default = |
{{{Expansion depth limit exceeded}}} |
[[Category:{{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}|{{{Expansion depth limit exceeded}}}}}]]
{{Expansion depth limit exceeded| none =
| =
[[Image:{{Expansion depth limit exceeded| commons = Commons-logo.svg
| meta|metawiki|m = Wikimedia Community Logo.svg
| wikibooks|wbk|wb|b = Wikibooks-logo-en-noslogan.svg
| wikiquote|quote|wqt|q = Wikiquote-logo-en.svg
| wikipedia|wp|w = Wikipedia-logo-en.png
| wikisource|source|ws|s = Wikisource-logo.svg
| wiktionary|wkt|wdy|d = Wiktionary-logo-en.svg
| wikinews|news|wnw|n = Wikinews-logo.svg
| wikispecies|species = Wikispecies-logo.svg
| wikiversity|wvy|v = Wikiversity-logo.svg
| mediawiki|mw = Mediawiki.png
| #default = Wikimedia-logo.svg
}}|40x40px|link={{Expansion depth limit exceeded| {{Expansion depth limit exceeded| commons = commons
| meta|metawiki|m = meta
| wikibooks|wbk|wb|b = b
| wikiquote|quote|wqt|q = q
| wikipedia|wp|w = w
| wikisource|source|ws|s = s
| wiktionary|wkt|wdy|d = wikt
| wikinews|news|wnw|n = n
| wikispecies|species = species
| wikiversity|wvy|v = v
| mediawiki|mw = mw
| #default =
}}
| Special:Search/{{Expansion depth limit exceeded}}
| lang =
}}| Search {{Expansion depth limit exceeded| commons = Wikimedia Commons
| meta|metawiki|m = Meta
| wikibooks|wbk|wb|b = Wikibooks
| wikiquote|quote|wqt|q = Wikiquote
| wikipedia|wp|w = Wikipedia
| wikisource|source|ws|s = Wikisource
| wiktionary|wkt|wdy|d = Wiktionary
| wikinews|news|wnw|n = Wikinews
| wikispecies|species = Wikispecies
| wikiversity|wvy|v = Wikiversity
| mediawiki|mw = MediaWiki
| #default = sister project
}}]]
| #default =
}} |
{{Expansion depth limit exceeded| The Wikibook {{Expansion depth limit exceeded| wikibooks | {{{Expansion depth limit exceeded}}} | {{{Expansion depth limit exceeded}}} }}
| Wikibooks
}} has {{Expansion depth limit exceeded| a page
| {{Expansion depth limit exceeded| a book
| more
}}
}} on the topic of
{{Expansion depth limit exceeded|
{{Expansion depth limit exceeded| wikibooks | {{Expansion depth limit exceeded| {{{Expansion depth limit exceeded}}} }}/{{Expansion depth limit exceeded| {{{Expansion depth limit exceeded}}} }} | {{{Expansion depth limit exceeded}}} }}
| {{Expansion depth limit exceeded| {{Expansion depth limit exceeded| wikibooks | {{Expansion depth limit exceeded| {{{Expansion depth limit exceeded}}} }}/{{Expansion depth limit exceeded| {{{Expansion depth limit exceeded}}} }} | {{{Expansion depth limit exceeded}}} }}
| {{Expansion depth limit exceeded| {{Expansion depth limit exceeded| wikibooks | {{{Expansion depth limit exceeded}}} | {{{Expansion depth limit exceeded}}} }}
| {{Expansion depth limit exceeded| wikibooks | Special:Search/{{Expansion depth limit exceeded}} | {{Expansion depth limit exceeded}} }}
}}
}}
}} |
- {{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}} ({{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}| }}). {{Expansion depth limit exceeded|
|{{Expansion depth limit exceeded|{{Expansion depth limit exceeded||p. }}{{{Expansion depth limit exceeded}}}
|{{Expansion depth limit exceeded|{{Expansion depth limit exceeded||pp. }}{{{Expansion depth limit exceeded}}}
|
}}
}}
}}. ISBN 0-596-00977-1.
- {{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}{{Expansion depth limit exceeded|
|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| et al.
|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| et al.
|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| et al.
|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| et al.
|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| et al.
|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded|{{Expansion depth limit exceeded| et al.
|{{Expansion depth limit exceeded|;
|{{Expansion depth limit exceeded| & |; }}
}}{{Expansion depth limit exceeded|[[{{{Expansion depth limit exceeded}}} |{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}]]
|{{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|, {{{Expansion depth limit exceeded}}}
}}
}}{{Expansion depth limit exceeded| et al.
}}
}}
}}
}}
}}
}}
}}
}}
}}
}}
}}
}}
}} ({{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}| {{Expansion depth limit exceeded|{{{Expansion depth limit exceeded}}}|}}}}){{Expansion depth limit exceeded|;|;|. }} {{{Expansion depth limit exceeded}}}{{Expansion depth limit exceeded|;|;|. }} {{Expansion depth limit exceeded|p. {{{Expansion depth limit exceeded}}}|{{Expansion depth limit exceeded|pp. | }} }}.
External links
ca:PL/SQL cs:PL/SQL de:PL/SQL es:PL/SQL fr:PL/SQL ko:PL/SQL it:PL/SQL he:PL/SQL hu:PL/SQL nl:PL/SQL ja:PL/SQL pl:PL/SQL pt:PL/SQL ro:PL/SQL ru:PL/SQL sk:PL/SQL sv:PL/SQL th:PL/SQL tg:PL/SQL tr:PL/SQL uk:PL/SQL zh:PL-SQL
If you like SEOmastering Site, you can support it by - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 and more...