The Oracle Objects for OLE (OO4O) Code Wizard generates OO4O code that executes Oracle PL/SQL and Java stored procedures.
The wizard generates code into individual Microsoft Visual Basic or Active Server Page and VBScript subroutines from existing Oracle stored procedures and packages. Additionally, the wizard can generate complete implementations of COM Automation objects in the form of VB class files. The generated COM Automation object methods act as client stubs for the execution of stored procedures contained in a given package. All the OO4O code necessary for input/output parameter binding and stored procedure execution is automatically generated.
The wizard can be used as a command-line utility or as a Visual Basic add-in. The wizard automates the entire process of accessing stored procedures using COM interfaces, thereby significantly reducing development time and the likelihood of programming errors.
Note:
The Code Wizard requires Visual Basic 6.This chapter contains these topics:
The OO4O Code Wizard includes the following components:
A command line utility, OO4OCodeWiz.exe, that converts PL/SQL and Java stored procedures to OO4O code.
A Visual Basic Add-in wizard that guides you through a series of steps to generate OO4O code for PL/SQL and Java stored procedures. The wizard displays Oracle packages and stored procedures from a tree control so that the user can choose which items to generate code.
Both of these components allow users to convert entire stored procedure packages to OO4O code.
The code wizard supports all data types, except for PL/SQL tables. When a PL/SQL table is used, an unsupportedType key word is used instead, and the generated code does not compile.
The output code may have to be modified for handling Null values. For example, when a VB variable is initialized to a parameter value, an isNull() check may have to be added if Null values are expected. Null values are correctly handled for VB variables of type Variant and Object.
The OO4O Code Wizard can be used as a command line utility or as a Visual Basic Add-in.
The OO4OCodeWiz.exe is a command-line utility that generates a Visual Basic class, a Visual Basic file, or an Active Server Page/VB Script file from existing PL/SQL or Java stored procedures, as well as packages, within an Oracle database. Call the utility in the following manner:
OO4OCodeWiz [-o output_file] username/password@connect_string package
| Where | Specifies the following |
|---|---|
username |
User name to log in to the database |
password |
Password for the user name |
connect_string |
Database connection string |
package |
Package name |
stored_procedure |
Stored procedure name (optional) |
OO4OCodeWiz -o empfile.asp scott/tiger@Exampledb employee.example
| Option | Description |
|---|---|
| -o | Specifies the output file name (optional) |
The code wizard uses the information specified on the command line to determine which type of output file to generate.
If a file name and one of the permitted file extensions are specified, then they are used. In the preceding example, an ASP file is generated in the empfile.asp output. The user can specify the following extensions:
| Extension | File Type Generated |
|---|---|
.cls |
VB class file |
.bas |
VB file |
.asp |
ASP or VB script file |
.vbs |
ASP or VB script file |
If no file extension is specified, the following rules indicate what type of file is generated, depending on other command-line specifications.
Package names without a stored procedure name generate a .cls file.
Package names with procedure names generate a .bas file.
Table 7-1 and Table 7-2 provide examples.
Table 7-1 Package Name Without Stored Procedure Name
| File Specified | Command | File Type Generated |
|---|---|---|
|
File name with no file extension generates |
|
|
|
No file name or extension: generates |
|
|
|
File name with file extension generates |
|
|
Table 7-2 Package Name With Stored Procedure Name
| File Specified | Command | File Type Generated |
|---|---|---|
|
File name with no file extension generates |
|
|
|
No file name or extension: generates |
|
|
|
File name with file extension generates |
|
|
Launch the OO4O Code Wizard by selecting Oracle Code Wizard for Stored Procedures in the Add-Ins menu of Microsoft Visual Basic.
The Connect To Oracle Database dialog box appears:

Enter the user name and password to connect to the database. A connection string is required if the database is not installed on the user's local computer.
Click OK.
The wizard displays the Oracle packages and stored procedures available to the user in a tree.

Select one of the stored procedures or packages displayed.
Enter an output file name or click the Browse... button to navigate to a different directory in which to place the file.
Choose the file type from the Component type list. There are three choices: a VB class module (*.cls), a VB file (*.bas), or other. The other option generates a VB file (*.bas), but enables you to specify your own file extension.
Click OK.
A dialog box appears indicating that a new OO4O file was created.
Click Yes to create another file, or click No to return to Visual Basic.
The ORACLE_BASE\\ORACLE_HOME\oo4o\codewiz\samples directory contains sample applications incorporating code generated by the wizard. The following examples show the generated VB code output from Oracle stored procedures using the OO4O code wizard:
Accessing a PL/SQL Stored Function with Visual Basic and Active Server Pages
Accessing a PL/SQL Stored Procedure Using the LOB Type with Visual Basic
Accessing a PL/SQL Stored Procedure Using the VARRAY Type with Visual Basic
Accessing a PL/SQL Stored Procedure Using the Oracle OBJECT Type with Visual Basic
This example shows a PL/SQL stored function, GetEmpSal, and then the Visual Basic (*.cls) file that the code wizard generates for it.
FUNCTION GetEmpSal (inEmpno IN NUMBER) RETURN NUMBER is outEmpsal NUMBER(7,2); BEGIN SELECT SAL into outEmpsal from EMP WHERE EMPNO = inEmpno; RETURN (outEmpsal); END;
The generated code for the GetEmpSal stored function is:
Public Function GETEMPSAL(INEMPNO As Variant) As Variant
OraDatabase.Parameters.Add "INEMPNO", INEMPNO, ORAPARM_INPUT, 2
OraDatabase.Parameters.Add "result", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("result").serverType = 2
OraDatabase.ExecuteSQL ("declare result Number; Begin :result := " & _
"Employee.GETEMPSAL(:INEMPNO); end;")
OraDatabase.Parameters.Remove "INEMPNO"
GETEMPSAL = OraDatabase.Parameters("result").Value
OraDatabase.Parameters.Remove "result"
End Function
In a VB class, OraDatabase appears as an attribute of the class. This attribute has to be set before any methods of the class can be invoked. For a VB file (*.bas), the generated code for the GetEmpSal stored function is the same as the VB class file, except for the function declaration:
Public Function GETEMPSAL(INEMPNO As Variant, ByRef OraDatabase As OraDatabase) ... End Function
For an ASP file (*.asp), the function declaration also differs for the GetEmpSal stored function as follows, but the body of the code remains the same:
Public Function GETEMPSAL(INEMPNO, ByRef OraDatabase) ... End Function
The following example shows how a Visual Basic file accesses a PL/SQL stored procedure with LOBs:
PROCEDURE getchapter(chapno in NUMBER, chap out CLOB) is BEGIN SELECT chapters into chap from mybook where chapterno = chapno for update; END;
The following shows the generated Visual Basic code for the GETCHAPTER stored procedure:
Public Sub GETCHAPTER(CHAPNO As Variant, ByRef CHAP As OraCLOB)
OraDatabase.Parameters.Add "CHAPNO", CHAPNO, ORAPARM_INPUT, 2
OraDatabase.Parameters.Add "CHAP", Null, ORAPARM_OUTPUT, 112
OraDatabase.ExecuteSQL ("Begin MYBOOKPKG.GETCHAPTER(:CHAPNO,:CHAP); end;")
Set CHAP = OraDatabase.Parameters("CHAP").Value
OraDatabase.Parameters.Remove "CHAPNO"
OraDatabase.Parameters.Remove "CHAP"
End Sub
The following example shows how a PL/SQL stored procedure uses the Oracle collection type VARRAY:
PROCEDURE getnames(deptid in NUMBER, name out ENAMELIST) is
BEGIN
SELECT ENAMES into name from department where dept_id = deptid for update;
END;
The wizard generates the following Visual Basic code for this stored procedure:
Public Sub GETNAMES(DEPTID As Variant, ByRef NAME As OraCollection)
OraDatabase.Parameters.Add "DEPTID", DEPTID, ORAPARM_INPUT, 2
OraDatabase.Parameters.Add "NAME", Null, ORAPARM_OUTPUT, 247, "ENAMELIST"
OraDatabase.ExecuteSQL ("Begin DEPTPKG.GETNAMES(:DEPTID, :NAME); end;")
Set NAME = OraDatabase.Parameters("NAME").Value
OraDatabase.Parameters.Remove "DEPTID"
OraDatabase.Parameters.Remove "NAME"
End Sub
The following example shows how a PL/SQL stored procedure uses the Oracle object type:
PROCEDURE getaddress(person_name in varchar2, person_address out address) is
BEGIN
SELECT addr into person_address from person_table where name =
person_name for update;
END;
The wizard generates the following Visual Basic code for this stored procedure:
Public Sub GETADDRESS(PERSON_NAME As String, ByRef PERSON_ADDRESS As OraObject)
OraDatabase.Parameters.Add "PERSON_NAME", PERSON_NAME, ORAPARM_INPUT, 1
OraDatabase.Parameters.Add "PERSON_ADDRESS", Null, ORAPARM_OUTPUT, _
108, "ADDRESS"
OraDatabase.ExecuteSQL ("Begin PERSONPKG.GETADDRESS(:PERSON_NAME," & _
":PERSON_ADDRESS); end;")
Set PERSON_ADDRESS = OraDatabase.Parameters("PERSON_ADDRESS").Value
OraDatabase.Parameters.Remove "PERSON_NAME"
OraDatabase.Parameters.Remove "PERSON_ADDRESS"
End Sub