|PL/SQL User's Guide and Reference
This appendix shows you how to run the PL/SQL Wrapper, a stand-alone utility that converts PL/SQL source code into portable object code. You can use the Wrapper to deliver PL/SQL applications without exposing your source code.
The PL/SQL Wrapper converts PL/SQL source code into an intermediate form of object code. By hiding application internals, the Wrapper prevents
Wrapped code is as portable as source code. The PL/SQL compiler recognizes and loads wrapped compilation units automatically. Other advantages include
To run the PL/SQL Wrapper, enter the
wrap command at your operating system prompt using the following syntax:
Leave no space around the equal signs because spaces delimit individual arguments.
wrap command requires only one argument, which is
input_file is the path and name of the Wrapper input file. You need not specify the file extension because it defaults to
sql. For example, the following commands are equivalent:
However, you can specify a different file extension as the following example shows:
wrap command takes a second argument, which is
output_file is the path and name of the Wrapper output file. You need not specify the output file because its name defaults to that of the input file and its extension defaults to
plb (PL/SQL binary). For example, the following commands are equivalent:
However, you can use the option
oname to specify a different file name and extension, as the following example shows:
The input file can contain any combination of SQL statements. However, the PL/SQL Wrapper wraps only the following
CREATE statements, which define object types, packages, or stand-alone subprograms:
CREATE [OR REPLACE]
CREATE [OR REPLACE] FUNCTION function_name
CREATE [OR REPLACE] PROCEDURE procedure_name
All other SQL statements are passed intact to the output file. Comment lines are deleted unless they appear inside an object type, package, or subprogram.
When wrapped, an object type, package, or subprogram has the form
header begins with the reserved word
CREATE and ends with the name of the object type, package, or subprogram, and
body is an intermediate form of object code. The word
wrapped tells the PL/SQL compiler that the object type, package, or subprogram was processed by the Wrapper.
The header can contain comments. For example, the Wrapper converts
CREATE PACKAGE -- Author: J. Hollings -- Date: 12/15/98 banking AS minimum_balance CONSTANT REAL := 25.00; insufficient_funds EXCEPTION; END banking;
Generally, the output file is much larger than the input file.
Suggestion: When wrapping a package (or object type), wrap only the body, not the spec. That way, you give other developers all the information (subprogram specs) they need to use the package without exposing its implementation.
If your input file contains syntax errors, the PL/SQL Wrapper detects and reports them. However, the Wrapper cannot detect semantic errors because it does not resolve external references. For example, the Wrapper does not report the following error (table or view does not exist):
CREATE PROCEDURE raise_salary (emp_id INTEGER, amount NUMBER) AS BEGIN UPDATE amp -- should be emp SET sal = sal + amount WHERE empno = emp_id; END;
The PL/SQL compiler resolves external references. So, semantic errors are reported when the Wrapper output file (
.plb file) is compiled.