You are on page 1of 124

Oracle Developer

A Tutorial on Oracle Forms, Reports and Graphics


Covering Developer version 6.0 and 6i for indo!s "#$"%$&T$'000
Richard (olo!c)a*
Computers Information Systems Department
Zicklin School of Business, Baruch College, CUNY
and
Center for Information Management,
Integration and Connectiity !CIMIC"
#utgers Uniersity
richard$holo%c&ak'(aruch)cuny)edu
Version 4.0 Thu Apr 12 21:07:06 EDT 2001
Please feel free to use these tutorials for your own personal use, education, advancement, training, etc.
However, I kindly ask that you respect the time and effort I have put into this work by not distributing
copies, either in whole or in part, for your personal gain. You may not under any circumstances download,
cache or host copies of these tutorials on your own servers. Use of these tutorials for commercial training
requires a special arrangement with the author or authors.
Contents
*) Introduction
+) ,rere-uisites
.) Deeloper /ools
o .)* Starting Deeloper tools under 0indo%s 123143N/3+555
o .)+ Starting Deeloper tools under UNI6
7) /he 8racle 9orms Designer Main Screen
o 7)* 8racle 9orms 8(:ect Naigator
o 7)+ Connecting to the Data(ase
2) 9orms Design
;) Creating a 9orm %ith a Single Block
o ;)* Creating a Ne% Block
o ;)+ /he <ayout =ditor
o ;). Displaying ,roperties
o ;)7 Saing, >enerating and #unning 9orms
;)7)* Saing a 9orm
;)7)+ Compiling3Building a 9orm
;)7). #unning a 9orm
;)7)7 #unning a 9orm as a ?aa @pplication or @pplet
;)7)7 Auery By =Bample
o ;)2 =BerciseC Creating a Single Block 9orm
D) Creating a MasterEDetail 9orm
o D)* /he MasterEDetail #elationship
o D)+ Steps to Create a MasterEDetail 9orm
D)+)* Create the Master Block
D)+)+ Create the Detail Block
o D). #elation ,roperties of a MasterEDetail 9orm
o D)7 ,rogram Units in a MasterEDetail 9orm
o D)2 =Btending MasterEDetail 9orms
o D); =BerciseC Creating a Master3Detail 9orm
4) <ist of Falues !<8Fs" and NonEBase /a(le 9ields
o 4)* Creating a <ist of Falues
4)*)* Create a ne% <8F 8(:ect
4)*)+ Specify the <8F Auery /eBt
4)*). Specify the Column Mapping ,roperties
4)*)7 @ttach the <8F to the item
4)*)2 /est the <8F
o 4)+ NonEBase /a(le fields
4)+)* @dding a Ne% Item to an =Bisting Data Block
4)+)+ Creating a /rigger
4)+). Create a ne% <ist of Falues
o 4). =BerciseC Creating an <8F and NonEBase /a(le field
1) 8racle 9orms ,rogram Units and Stored ,rogram Units
o 1)* Creating ,rocedures in 8racle 9orms
1)*)* @dd a ne% item to the =M,<8Y== Block
1)*)+ Create a ,rocedure to Count 8ther Department Mem(ers
1)*). Create a /rigger to Call the ,rocedure
1)*)7 Sae, Compile and #un the 9orm
o 1)+ Creating Stored ,rogram Units !,rocedures" in SA<G,lus
o 1). @dditional Stored ,rocedures and /riggers
1).)* >enerating uni-ue or consecutie identifiers using the ta(le
1).)+ >enerating uni-ue or consecutie identifiers using an 8racle
Se-uence
1).). Checking constraints at the client
1).)7 @dding @lerts !,opEup Messages"
1).)2 ,opulate items %ith default alues
1).); @ttaching functionality to command (uttons
1).)D ,assing parameters (et%een forms
o 1)7 =BerciseC ,rocedures and /riggers
*5) 8racle #eports Basics
o *5)* Starting Deeloper tools under 0indo%s 123143N/3+555
o *5)+ /he 8racle #eports 8(:ect Naigator
o *5). Creating #eports in 8racle #eports
o *5)7 Creating a SingleE/a(le #eport
*5)7)* Specify the Data Model and <ayout
*5)7)+ Saing, >enerating and #unning the #eport
o *5)2 =BerciseC Creating a #eport
o *5); Creating a MasterEDetail #eport
*5);)* Specify the MasterEDetail Data Model and <ayout
*5);)+ Saing and #unning the MasterEDetail #eport
o *5)D =BerciseC Creating a MasterEDetail #eport
o *5)4 ,arameter forms in 8racle #eports
*5)4)* Building a Custom ,arameter 9orm
** Creating Menus in 8racle 9orms
o **)* /he 8racle 9orms Menu Hierarchy
o **)+ Creating a Custom Menu
*+ >raphics and the Chart 0i&ard
o *+)* >raphics and the Chart 0i&ard
o *+)+ =BerciseC @dding a Chart to a #eport
*. 8racle Schema Builder
o *.)* Creating Ne% Schema 8(:ects
o *.)+ Displaying =Bisting Schema 8(:ects
o *.). @dding #elationships (et%een /a(les
+. ,ntroduction
/his tutorial introduces the 8racle Deeloper ;)5 and ;i suite of tools %hich include 8racle
9orms ;)5, 8racle #eports ;)5, 8racle >raphics ;)5, 8racle Schema Builder ;)5 and 8racle
,rocedure Builder ;)5) /he main o(:ecties are to demonstrate and proide handsEon instructions
on creating and modifying data entry and -uery forms in arious configurations, reports and
graphics) In addition, the final section gies some instructions on the use of the Schema Builder)
/his set of 8racle tools !as of @pril, +55*" is no% (undled along %ith 0e(DB and 8racle
?Deeloper in the 8racle Internet Deeloper Suite CD ,ack)
CaeatsC ,lease note that 8racle tends to change things like menu items, prompts and other small
things (et%een each ma:or !certainly" and often minor release) Depending on the eBact release of
Deeloper ; or ;i you hae, you may find some small discrepencies (et%een %hat is sho%n in
this tutorial and %hat you see on your screen)
'. -rere.uisites
Before follo%ing this tutorial, a student must hae a alid user account in an 8racle serer)
Contact your DB@ or systems administrator to learn the details of ho% 8racle serer is set up in
your organi&ation)
/his tutorial relies on the eBistence of a fe% ta(les in the studentIs schema) Use the 8racle
SA<G,lus tool to create three ta(les named EMPLOYEE, DEPARTMENT and DEPENDENT %ith the
follo%ing attri(utes) NoteC /his schema originally appears in the (ookC #ame& =lmasri and
Shamkant B) Naathe, Fundamentals of Database Systems) Second =dition) @ddisonE0esley
,u( Co, *117)
D/-ART0/&T /a(le
Attri1ute Data T2pe
DN@M= F@#CH@#!*2"
DNUMB=# NUMB=#!+"
M>#SSN NUMB=#!*+"
M>#S/@#/D@/= D@/=
D/-/&D/&T /a(le
Attri1ute Data T2pe
/0-3O4// /a(le
Attri1ute Data T2pe
9N@M= F@#CH@#!4"
MINI/ F@#CH@#!+"
<N@M= F@#CH@#!4"
SSN NUMB=#!*+"
BD@/= D@/=
@DD#=SS F@#CH@#!.5"
S=6 F@#CH@#!*"
S@<@#Y NUMB=#!D"
SU,=#SSN NUMB=#!*+"
DN8 NUMB=#!+"
=SSN NUMB=#!*+"
D=,=ND=N/$N@M= F@#CH@#!*5"
S=6 F@#CH@#!*"
BD@/= D@/=
#=<@/I8NSHI, F@#CH@#!*5"
/he follo%ing C#=@/= /@B<= and INS=#/ statements can (e used to create the a(oe ta(les
and insert some (aseline data using the 8racle SA<G,lus tool) Note that different ersions of
8racle accept either + digit or 7 digit year designations in the D@/= datatype) It seems the latest
ersions !8racle4 and 8racle4i" default to accept 7 digit years) /he INS=#/ statements (elo%
should (e formatted accordingly)
CREATE TALE e!p"o#ee
$%NAME VARC&AR2$1'()
M*N*T VARC&AR2$2()
LNAME VARC&AR2$1'()
++N N,MER$12( NOT N,LL)
DATE DATE)
ADDRE++ VARC&AR2$-'()
+E. VARC&AR2$1()
+ALARY N,MER$7( NOT N,LL)
+,PER++N N,MER$12()
DNO N,MER$2( NOT N,LL( /
ALTER TALE e!p"o#ee ADD CON+TRA*NT p01e!p"o#ee
PR*MARY 2EY $ssn(/
CREATE TALE DEPARTMENT
$DNAME VARC&AR2$1'()
DN,MER N,MER$2( NOT N,LL)
M3R++N N,MER$12()
M3R+TARTDATE DATE( /
ALTER TALE 4ep5r6!en6 ADD CON+TRA*NT p014ep5r6!en6
PR*MARY 2EY $4nu!7er(/
CREATE TALE DEPENDENT
$E++N N,MER$12()
DEPENDENT1NAME VARC&AR2$1'()
+E. VARC&AR2$1()
DATE DATE)
RELAT*ON+&*P VARC&AR2$12(( /
ALTER TALE 4epen4en6 ADD CON+TRA*NT p014epen4en6
PR*MARY 2EY $essn) 4epen4en61n5!e(/
ALTER TALE 4epen4en6 ADD CON+TRA*NT 801e!p"o#ee
%ORE*3N 2EY $essn( RE%ERENCE+ e!p"o#ee $ssn(/
ALTER TALE e!p"o#ee ADD CON+TRA*NT 8014ep5r6!en6
%ORE*3N 2EY $4no( RE%ERENCE+ 4ep5r6!en6 $4nu!7er(/
*N+ERT *NTO DEPARTMENT VAL,E+ $9RE+EARC&9) ') ---44'''') 922:MAY:
1;7<9( /
*N+ERT *NTO DEPARTMENT VAL,E+ $9ADM*N*+TRAT*ON9) 4) ;<76'4-21) 901:=AN:
1;<'9( /
*N+ERT *NTO DEPARTMENT VAL,E+ $9&EAD>,ARTER+9) 1) <<<66'''') 91;:=,N:
1;719( /
*N+ERT *NTO EMPLOYEE VAL,E+
$9=O&N9)99)9+M*T&9)12-4'67<;)90;:=AN:1;''9)97-1 %ONDREN) &O,+TON) T.9)
9M9)-0000)---44'''')'( /
*N+ERT *NTO EMPLOYEE VAL,E+
$9%RAN2L*N9)9T9)9?ON39)---44'''')90<:DEC:1;4'9)96-< VO++)&O,+TON T.9)
9M9)40000)<<<66'''')'( /
*N+ERT *NTO EMPLOYEE VAL,E+
$9AL*C*A9)9=9)9@ELAYA9);;;<<7777)91;:=,L:1;'<9)9--21 CA+TLE) +PR*N3) T.9)
9%9)2'000);<76'4-21)4( /
*N+ERT *NTO EMPLOYEE VAL,E+
$9=ENN*%ER9)9+9)9?ALLACE9);<76'4-21)920:=,N:1;-19)92;1 ERRY) ELLA*RE) T.9)
9%9)4-000)<<<66'''')4( /
*N+ERT *NTO EMPLOYEE VAL,E+
$9RAME+&9)929)9NARAYAN9)666<<4444)91':+EP:1;'29)9;7' %*RE OA2) &,MLE) T.9)
9M9)-<000)---44'''')'( /
*N+ERT *NTO EMPLOYEE VAL,E+
$9=OYCE9)9A9)9EN3L*+&9)4'-4'-4'-)9-1:=,L:1;629)9'6-1 R*CE) &O,+TON) T.9)
9%9)2'000)---44'''')'(/
*N+ERT *NTO EMPLOYEE VAL,E+
$9A&MAD9)9V9)9=AAR9);<7;<7;<7)92;:MAR:1;';9)9;<0 DALLA+) &O,+TON) T.9)
9M9)2'000);<76'4-21)4( /
*N+ERT *NTO EMPLOYEE VAL,E+
$9=AME+9)9E9)9OR39)<<<66'''')910:NOV:1;279) 94'0 +TONE) &O,+TON) T.9)
9M9)''000)N,LL)1( /
*N+ERT *NTO DEPENDENT VAL,E+ $---44'''')9AL*CE9)9%9)90':APR:
1;769)9DA,3&TER9( /
*N+ERT *NTO DEPENDENT VAL,E+ $---44'''')9T&EODORE9)9M9)92':OCT:1;7-9)9+ON9( /
*N+ERT *NTO DEPENDENT VAL,E+ $---44'''')9=OY9)9%9)90-:MAY:1;4<9)9+PO,+E9(/
*N+ERT *NTO DEPENDENT VAL,E+ $12-4'67<;)9M*C&AEL9)9M9)901:=AN:1;7<9)9+ON9(/
*N+ERT *NTO DEPENDENT VAL,E+ $12-4'67<;)9AL*CE9)9%9)9-1:DEC:1;7<9)9DA,3&TER9(/
*N+ERT *NTO DEPENDENT VAL,E+ $12-4'67<;)9EL*@AET&9)9%9)90':MAY:
1;'79)9+PO,+E9(/
*N+ERT *NTO DEPENDENT VAL,E+ $;<76'4-21)9ANER9)9M9)926:%E:1;-29)9+PO,+E9(/

5. Developer Tools
8racle Deeloper contains . main componentsC
*) 8racle 9orms E 9or designing data entry forms)
+) 8racle #eports E 9or designing reports)
.) 8racle >raphics E 9or designing graphics such as charts that can (e added to forms or
reports)
@dditional components includeC
*) ,rocedure Builder E @n integrated deelopment enironment to %rite and de(ug stored
procedures !program units" for use in the 8racle data(ase or in any of the Deeloper
tools)
+) Auery Builder E @ >UI (ased -uery (uilder tool) Aueries can (e stored in the data
dictionary or in a file system for later use and sharing)
.) Schema Builder E @ >UI tool for creating and modifying ta(les, ie%s and constraints)
7) /ranslation Builder E @ tool for creating foreign language ersions of applications %ritten
in Deeloper)
2) ,ro:ect Builder E @ soft%are deelopment pro:ect management system that manages
source code for all Deeloper components)
;) ,=CS E /he 8racle ,erformance =aluation3Collection System E 9or profiling the
eBecution and performance of applications deeloped %ith 8racle tools)
D) Discoerer E @ data (ro%sing tool that can (e customi&ed for endEusers)
/his tutorial coers the Deeloper 9orms, #eports and >raphics components and gies a (rief
introduction to the Schema Builder and ,rocedure Builder tools)
In the follo%ing section, the procedures to run 8racle 9orms under MS 0indo%s 123143N/3+555
%ill (e gien)
5.+ 6tarting Developer tools under indo!s "#$"%$&T$'000
@ typical installation of Deeloper creates seeral folders under the Start ,rograms menu) /he
main folders for the Deeloper programs for 8racle 9orms ;i are found under the menu itemC
Or5A"e %or!s 6i and include the follo%ing itemsC
/o run 8racle 9orms ;i under 0indo%s 123143N/3+555, click on
the +65r6 :B ProCr5!s :B Or5A"e %or!s6i :B %or! ui"4er
menu item)
/o run 8racle #eports under 0indo%s 123143N/3+555, click on the
+65r6 :B ProCr5!s :B Or5A"e Repor6s 6i :B Repor6
ui"4er menu item)
/o run 8racle >raphics under 0indo%s 123143N/3+555, click on the +65r6 :B ProCr5!s :B
Or5A"e %or!s D Repor6s 6i :B 3r5phiAs ui"4er menu item)
9or older ersions of 8racle Deeloper the start menu %ould might hae items such asC
DeEe"oper 2000 R2.1 or DeEe"oper 2000 R2.0 and so on)
NoteC In your organi&ation, Deeloper may (e installed or configured slightly differently) In
particular, the programs may (e grouped under different menus) ,lease contact your DB@ or
systems administrator, or refer to any local documentation to learn ho% to run the Deeloper
tools)
5.' 6tarting Developer tools under 7&,8
8racle also makes a ersion of Deeloper ;i that runs under UNI6) /his ersion uses 6E
0indo%s %ith the Motif 6E0indo%s li(raries as a graphical user interface)
If your ersion of Deeloper is installed under UNI6, use the follo%ing command lines to start
the different toolsC
Developer Tool 7&,8 Command
9orms Deeloper ;)5 for 6E0indo%s Motif f;5desm
>raphics Deeloper ;)5 for 6E0indo%s Motif g;5desm
,rocedure Builder ;)5 for 6E0indo%s Motif pl(ild;5m
#eports Deeloper ;)5 for 6E0indo%s Motif r%(ld;5
Under UNI6, it may (e necessary to set certain enironment aria(les such as /J;5$IC8N,
UI$IC8N, 98#MS;5$,@/H and so on) Upon installation, eBample shell scripts to set these
enironment aria(les are installed in the 8racle Home directory)
9. The Oracle Forms Designer 0ain 6creen
8nce the appropriate menu item has (een clicked on !for 0indo%s 123143N/3+555", the 8racle
9orms Builder 0elcome Screen %ill appearC
9orms ;)5 displays this %elcome screen as a -uick %ay to start %orking and designing forms) 9or
this tutorial, %e %ill %ork directly from the 8(:ect Naigator since this is this most general %ay
to %ork %ith forms)
/o continue to the 8(:ect Naigator from the 0elcome screen, click on the Cancel (utton or
select the KBuild a form ManuallyK option and click 8J) In either case, the 8(:ect Naigator %ill
appear)
9.+ Oracle Forms O1:ect &avigator
@fter starting up 8racle 9orms, the main screen %ill (e presented)
/his screen is called the Object Navigator and displays all of the form elements, data (locks,
menu items, user defined code li(raries, (uilt in procedures and functions, and data(ase o(:ects
!ta(les, ie%s") /he display is in the form of a collapsi(le tree) In general, clicking on a ; %ill
eBpand the current item to sho% its details) Clicking on a < %ill collapse the current list details)
/he menu (ar across the top proides access to almost all of the features of 8racle 9orms)
/he %i"e menu has options to create, open, sae and print forms) /his menu also
includes an option to connect to the data(ase and the @dministration option that is used to
compile forms and menu code) /he last option on the %i"e menu is the EFi6 option that
%ill eBit 8racle 9orms Builder)
/he E4i6 menu has options to cut, copy and paste o(:ects, to inoke an editor and to
undo an operation)
/he VieG menu toggles the o(:ect naigator display (et%een isual elements and
o%nership elements)
/he N5EiC56or menu has items that control the display of the o(:ect naigator including
eBpanding and collapsing tree (ranches) /he N5EiC56or menu can also (e used to create
and delete o(:ects using the Cre56e and De"e6e menu options respectiely)
/he ProCr5! menu has items that control form compilation, generation and eBecution
!#un") /riggers, ,rocedures and other ,<3SA< code can also (e created from this menu)
/he +!5r6 TriCCers menu option displays the most commonly used triggers according
to the type of o(:ect currently selected in the o(:ect naigator)
/he Too"s menu has options to s%itch (et%een seeral different screens including the
<ayout editor, Menu editor and 8(:ect Naigator) /here are also seeral %i&ards that can
(e launched from this menu including the Data Block %i&ard, the <ayout %i&ard, the
Chart %i&ard and the <8F !<ist of Falues" %i&ard)
/he ?in4oGs menu displays menu items for each of the %indo%s you hae open) By
default, only one item E the 8(:ect Naigator E is displayed)
9inally, the &e"p menu can (e used to display help topics)
By default, a (utton (ar is proided on the left hand side of the 8(:ect Naigator %indo%) =ach
(utton duplicates some functionality on the menus) 9or eBample, clicking on the top icon !an
opened folder" is the same as pulling do%n the %i"e menu and choosing the Open option) /o see
%hat a (utton might do if pressed, place the mouse cursor oer the (utton and a short message
%ill appear descri(ing the (uttonIs function)
In Deeloper ;)5, a form, report or graphic is generally referred to as a Module) 0hen first
starting the 9orms Builder, a default module is created calledC MOD,LE1
/he content of the 8(:ect Naigator is (roken do%n into ; ma:or sectionsC
*) %or!s E Contains form o(:ects and all of their su(Eo(:ects such as data (locks, triggers,
alerts, canases, program units !procedures and functions", parameters and %indo%s)
More than one form can (e open at a time)
+) Menus E Contains menu o(:ects and all of their su(Eo(:ects such as menu items,
parameters and program units) More than one menu can (e open at a time)
.) PLH+>L Li7r5ries E /hese are li(raries of ,<3SA< code !stored either in the data(ase or
in .p"7 files") <i(raries can (e shared among different forms and among different
deelopers)
7) O7IeA6 Li7r5ries E /hese are li(raries containing a collection of o(:ects !anything that
can appear on a form")
2) ui"6:in P5A05Ces E <ists all of the packages !,<3SA< procedures" aaila(le (y default
to all forms, reports, etc)
;) D56575se O7IeA6s E <ists all of the data(ase o(:ects !/a(les, Fie%s, ,<3SA< <i(raries,
and Stored ,rogram Units" in the userIs 8racle data(ase schema)
@s o(:ects are created, they are displayed under the appropriate section) ConteBt sensitie menus
can (e displayed for each o(:ect (y clicking on an o(:ect %ith the right mouse (utton)
9.' Connecting to the Data1ase
/he first step in %orking %ith any of the Deeloper tools is to esta(lish a connection to an 8racle
data(ase) /his is accomplished (y pulling do%n the %i"e menu and selecting the ConneA6 menu
item)
9ill in your 8racle Username and 8racle ,ass%ord !press the ta( key to moe (et%een the
fields")
9or the D56575se field, type in the serice name for your 8racle data(ase) 9or eBample, if you
are using ,ersonal 8racle <ite, the D56575se: %ould (e ODC:POL*TE) If you hae a local
data(ase running on the same machine, you may (e a(le to connect directly to it (y leaing this
field (lank) If you are %orking in a client3serer enironment %here the 8ralce serer resides on
another machine, you %ill hae to configure the 8racle Net4 middle%are to esta(lish a
connection %ith that serer) You %ould then supply the Net4 serice name in the Data(ase field)
@lternatiely, contact your system administrator to learn the serice name for your 8racle
data(ase and proide that information in the D56575se: field)
Click on the ConneA6 (utton to complete the connection !Under some ersions of UNI6, the
(utton is la(eled O2") If the user name or pass%ord is mistyped or incorrect, the dialog (oB %ill
(e reEdisplayed) Be sure to proide your 8racle username and pass%ord !not your UNI6 host or
<ocal @rea Net%ork pass%ord")
=ach time any of the Deeloper Builder tools are eBecuted, the first step %ill (e to connect to an
8racle data(ase in this fashion)
#. Forms Design
@ typical data(ase schema contains do&ens of ta(les, each %ith seeral columns of arious data
types) 0e deelop applications !forms, reports, menus, etc)" to make the :o( of manipulating data
in those ta(les easier for users) In 8racle 9orms, a form !or data entry form" acts like a %indo%
into the data(ase schema) @n indiidual focuses the attention of the user to one or a fe% of the
ta(les at a time) In addition, a form can gie prompts so the user kno%s %hat kind of input is
eBpected and ho% data is to (e entered and manipulated)
By default, eery form in 8racle 9orms has the capa(ility to -uery eBisting data in a ta(le,
modify eBisting data and add ne% data !records" to the ta(le) @ form is (uilt up using one or
more data blocks that correspond to ta(les in the data(ase) 9ields %ithin the data (lock
correspond to columns in the data(ase ta(le) @ data (lock is similar to a Data0indo% o(:ect in
,o%erBuilder) In the follo%ing figure, a typical form is sho%n)
/his form has t%o data (locks, one for the EMPLOYEE ta(le, and one for the DEPENDENT ta(le)
/hese data (locks are arranged in a Master/Detail setup %here a single =mployee record !the
master" is associated %ith one or more Dependents records !the details")
By default, forms also gies a (utton (ar and a menu) /hese can (e used to scroll through the
records in a (lock, naigate (et%een (locks, set up and perform -ueries against the ta(les, insert,
update and delete records, clear the form and eBit the form) 9inally, at the (ottom of each form is
a status (ar that displays any releant prompts or error messages and an indication of the records
in the current data (lock)
/here are four main types of forms that can (e designed)
Single Block Single (lock 9orm
9orm) /his form
contains a single
data (lock
corresponding to
a single
data(ase ta(le)
%ith lookup field)
/his form contains
a single data (lock
corresponding to a
single data(ase
ta(le %ith the
addition of one or
more fields that
display data from
some other ta(les)
Such data is
Klooked upK %hen
the form runs)
Master3Detail
9orm) /his form
contains t%o
data (locks that
are arranged in a
master3detail
!one to many"
relationship)
Master3Detail 9orm
%ith lookup fields)
/his form is similar
to the
Master3Detail (ut
has the additional
lookup fields in the
master and3or
detail (locks)
/here are additional ariations such as a Master3Detail3Detail form %ith . (locks and so on)
Ho%eer, the four types illustrated a(oe are the most common ones) In this tutorial, all four
types %ill (e demonstrated)
6. Creating and Running a Form !ith a 6ingle =loc*
In this section, the (asic steps for creating a (asic data entry and -uery form for a single data(ase
ta(le %ill (e coered)
In general, a Data Block on a form corresponds to a ta(le in the data(ase) /his is called the Base
Table for the data (lock) 9or each ta(le displayed on the form, a ne% data (lock %ill (e created)
9or this eBample, only one data (lock %ill (e created for the EMPLOYEE ta(le)
@ (lock appears on a Canvas %hich is contained in a indo!) /here are many options to control
multiple canas ie%s and multiple %indo%s per form) In these eBamples, %e concentrate on a
simple arrangement using a single canas and a single %indo%)
/here are a num(er of %ays to create a data (lock) 8ne %ay is to manually define the (ase ta(le
and columns, and their positions on the form) 0hile this is possi(le, it can (e ery tedious)
8racle 9orms ;)5 proides t%o %i&ards !programs that guide the deeloper in performing
common tasks" to create data (locksC
*) /he Data Block !i"ard guides the deeloper through the steps of choosing a (ase ta(le
and columns)
+) /he #ayout !i"ard guides the deeloper through arranging the (ase ta(le and columns on
the form)
6.+ Creating a &e! =loc*
/o create a ne% (lock, pull do%n the Too"s menu and select the D565 "oA0 GiJ5r4 menu
item) /he follo%ing dialog (oB %ill appearC
Click on the NeBt (utton) /he follo%ing dialog (oB %ill appearC
/here are t%o types of data (locks that can (e created) /a(le3Fie% and ,rocedures) 9or this
eBample, choose /a(le3Fie% and click on the NeBt (utton)
/he neBt step is to choose a (ase ta(le and columns that %ill (elong to the data (lock) /he
follo%ing dialog (oB should appearC
/o associate a data(ase ta(le %ith the (lock, click on the roGse... (utton to the right of the
/a(le or Fie% field) /he follo%ing dialog (oB %ill pop up)
Make sure the Curren6 ,ser and T57"es (uttons are selected @ list of your ta(les %ill appear)
Highlight the name of the data(ase ta(le !=M,<8Y== in this eBample" and click on the O2
(utton)
/he %i&ard should reappear %ith the name of the ta(le and a list of aaila(le columns displayed)
/o include a column in the data (lock, highlight the column name and click on the right arro%)
/he name of the column should moe oer to the right hand side)
9or this eBample, select the 9N@M=, <N@M=, SSN, BD@/=, S@<@#Y and DN8 as in the
follo%ing figureC
Click on the NeBt (utton, and the final dialog (oB for the Data Block %i&ard %ill appearC
In this eBample, %e %ant to continue on to the <ayout %i&ard in order to specify ho% the ne%
form %ill appear) Make sure the Cre56e 6he 7"oA0) 6hen A5"" 6he L5#ou6 GiJ5r4 option
is selected and click on the 9inish (utton)
/he data (lock %ill (e created !as can (e seen in the 8(:ect Naigator in the (ackground") /he
o(:ects created include the =M,<8Y== data (lock containing items for each of the columns that
%ere selected in the third step of the %i&ard)
8nce the ne% data (lock and items are created, the first dialog (oB in the <ayout %i&ard %ill
appearC
Click on the NeBt (utton and the follo%ing dialog (oB %ill appearC
/he layout for a data (lock may (e placed on any eBisting canas) In this case, there are no
canases so the only option aaila(le is to create a ne% canas)
Click on the NeBt (utton to display the follo%ing dialog (oBC
In this dialog (oB, the columns from a gien (ase ta(le on a data (lock can (e added to the
layout) Since %e are laying out the =M,<8Y== data (lock, it is highlighted automatically)
Moe all of the @aila(le Columns oer to the Displayed Items side (y clicking on the dou(le
right arro% and click on the NeBt (utton)
In this dialog (oB, the field la(els, field si&es and field heights can (e altered) Change the field
la(els as (elo% and click on the NeBt (uttonC
/he follo%ing dialog (oB %ill appearC
/here are t%o main styles for forms) @ Ta1ular layout arranges the field la(els across the top of
the form %ith a num(er of records (elo% as in a spreadsheet)
@ Form layout places the field la(els to the left of the fields) >enerally only one record is
displayed at a time)
9or this eBample, choose a 9orm layout and click on the NeBt (utton)
In the follo%ing dialog (oB, type a title for the frame !around the data (lock" and check the
option to include a scroll (ar)
/he num(er of records displayed for a Form layout should (e *) /he num(er of records
displayed in a Tabular layout can (e more than *)
Click on the NeBt (utton and the final dialog (oB for the <ayout %i&ard %ill appear)
Click on the 9inish (utton to create the layout) @ ne% Canas %ill (e created
@t this point the <ayout =ditor should appear and the ne% form %ith the data (lock %ill appear)
6.' The 3a2out /ditor
/o ie% the actual form and its (locks and fields, pull do%n the Too"s menu and select the
L5#ou6 E4i6or menu item !if it not already displayed")
In the <ayout =ditor, fields and la(els can (e moed around (y clicking and dragging) 8ther teBt,
lines and (oBes, etc) can (e added using the tool palette on the left side of the %indo%)
Some common operations on the <ayout =ditor includeC
Moe a field or a field la(el (y clicking and dragging the item %ith the left mouse (utton)
Change the teBt of a la(el (y choosing the teBt tool (utton from the tool (ar and then
clicking on a la(el) /o stop editing the la(el, click any%here outside of the la(el teBt)
@dd teBt to the (lock (y choosing the teBt tool (utton from the tool (ar and then
clicking on a open area) /ype the ne% teBt) /o change the font, highlight the teBt, pull
do%n the %or!56 menu and click on the %on6 menu item)
/o change the teBt color of a la(el, use the pointer tool to highlight a la(el and then
click on the TeF6 Co"or palette (utton to choose the color)
Change the %idth of a field (y clicking on the field) /hen drag one of the handles !small
(lack (oBes around the field" to reEsi&e the field)
9or eBampe, on the employee form, you may %ish to make the S=6 field %ider to
accomodate the capital letter IMI)
Use the Zoom In tool to &oom in to the form !e)g), make eerything appear larger")
8r use the Zoom 8ut tool to &oom out of the form)
6.5 Displa2ing -roperties
0hile in the <ayout =ditor, dou(le clicking on an o(:ect %ill (ring up that o(:ectIs $ro$erties)
8ptionally, clicking on an o(:ect %ith the right mouse (utton %ill (ring up a small menu %hich
has the ,roperties menu item on it) /he follo%ing figure sho%s the properties for the %NAME item)
=ach type of o(:ect has a slightly different set of properties) 9or eBample, dou(le clicking on the
=M,<8Y== data (lock in the 8(:ect Naigator %ill display that data (lockIs properties)
Some properties of interest for a data (lock includeC
(/R/ Clause E specify a 0H=#= clause to filter the selection of ro%s from the (ase
ta(le)
ORD/R =4 Clause E specify an 8#D=# BY clause to alter the displayed order of the
records)
Delete Allo!ed, ,nsert Allo!ed, >uer2 Allo!ed and 7pdate Allo!ed E toggle these
properties to allo% or preent the action) 9or eBample, setting Delete Allo!ed to %AL+E
preents users from deleting records from the corresponding (ase ta(le using this form)
/here are numerous other properties that affect the fonts, colors, si&e and position of
o(:ects in the (lock)
6.9 6aving, Compiling and Running Forms
9orms can (e saed in files in a directory of your choosing) /he Ksource codeK for a form is
stored in a file %ith a .8!7 eBtension) Com$iled forms hae a .8!F eBtension)
Under MS 0indo%s 123143N/3+555, forms can (e saed in a folder !su(directory" on the local
hard disk, on a file serer or on a floppy disk) It is desira(le to maintain separate su(directories
!folders" for forms associated %ith different pro:ects)
6.9.+ 6aving a Form
/o sae a form, pull do%n the %i"e menu and select the +5Ee menu item)
Under MS 0indo%s 123143N/3+555, this dialog (oB looks likeC
Note that in your company or organi&ation, forms and other files may hae to (e saed on floppy
disk or in a special directory) /he a(oe figure is simply an eBample)
9ill in a file name in the %i"e N5!e: field) Be sure it ends %ith .8!7
Click on the +5Ee (utton to sae the file) 9or this eBample, use the file name e!p"o#ee.8!7
/o sae this form on a floppy disk in the A: drie, use the file nameC A:Ke!p"o#ee.8!7
/o enhance porta(ility of forms across different operating systems, use file names that (egin %ith
a letter, contain no spaces or punctuation !eBcept for the underscore character", hae all lo%er
case letters and are relatiely short)
If you are %orking on a form and %ish to sae it under a different file name, follo% the same
steps as a(oe, only select the +5Ee As menu item in place of the +5Ee menu item) 9or eBample,
if you hae finished %orking on the =mployee form and %ish to sae off a copy (efore adding
some code or programming some program units, the +5Ee As menu item can (e used to sae off
a copy (efore proceeding)
6.9.' Compiling$=uilding a Form
Before a form can (e eBecuted !run", it must (e Com$iled and Built) Compiling runs a ,<3SA<
compiler on all of the procedures and triggers in the form) Building !or compiling the file"
creates the .8!F file that is then used to run the form)
/o compile a form, first make sure the form is saed) ,ull do%n the ProCr5! menu and select the
Co!pi"e menu item) /hen choose A"" in the flyout menu)
If a form has errors !e)g), in the ,<3SA< code, or if the data(ase schema changes" they %ill (e
displayed in a %indo% as they are encountered) @ record of the compilation process, including
error messages, is kept in a file %ith a .err eBtension) 9or eBample, if the form is named
e!p"o#ee then the record of the compilation %ill (e stored in e!p"o#ee.err
/o Build the .8!F file for a form, pull do%n the %i"e menu, click on the A4!inis6r56ion menu
item and then choose Co!pi"e %i"e from the flyEout menu) If the forms generation is
successful, the phrase Module built successfully %ill appear on the status (ar at the (ottom of the
screen)
@lternatiely, 8racle 9orms defaults to automatically (uilding the form each time it is eBecuted
!run" from the forms designer as %ill (e demonstrated in the neBt step) 9or more details on the
default (ehaior, pull do%n the Too"s menu and check the Pre8erenAes menu item)
6.9.5 Running a Form
@fter a form has (een saed and (uilt, it can (e eBecuted) /o run the form, pull do%n the
ProCr5! menu and select the Run %or! :B C"ien6H+erEer menu item) /he form %ill display
in a ne% %indo%) /he 8racle #unform program is eBecuted (y passing in the name of the form
!e!p"o#ee.8!F in this case" as a parameter)
Use the arious menus and items to -uery the form, enter ne% data and sae ne% and changed
data) ,lease read the section (elo% on Auery By =Bample to see ho% to -uery data from the
underlying ta(les and populate the fields in the form)
6.9.9 Running a Form as a ?ava Application or Applet
If you hae also installed the 9orms Serer !0indo%s N/3+555 only" you may also run the form
in K0e(K mode (y selecting the ,rogram menu and then K0e(K) In 8racle 9orms ; and ;i, the
.8!F file is loaded and eBecuted in a ?aa @pplication) In this mode the 9orms serer handles the
processing of the (usiness logic and interacts %ith the user interface elements that run in the ?aa
@pplication)
@n eBample of a simple =mployee data entry form running in a ?aa @pplication is sho%n
(elo%C
@nother option for running 8racle forms is to run them %ithin a %e( (ro%ser as a ?aa @pplet)
/he (asic steps for this inole setting up a %e( serer !such as 8racle @pplication Serer or
8racle 0e(DB" to sere the .8!F file and a series of ?aa application class files to the %e(
(ro%ser client) 8racle proides their o%n ?aa runtime enironment !?#=" called the ?EInitiator
that must (e installed on each client) ?EInitiator hooks into the clientIs %e( (ro%ser using a
special MIM= data type that launches 8racle ?#= %hen an 8racle form is loaded into the
(ro%ser) Belo% is an eBample of the same data entry form running as a ?aa @pplet inside of the
Netscape Naigator %e( (ros%er)
9orms ;i proides a simple test %e( page located under the 8racle 9orms ;i program group
called K#un a 9orm on the 0e(K) 8ne can make use of that to test if the 9orms serer, load
(alancer, and %e( serer on the middle tier are running correctly)
,lease note that getting 8racle 9orms and #eports to run in this fashion is not a triial
undertaking) It re-uires eBtensie kno%ledge of %e( serers, 0indo%s N/3+555 serices and the
%ay in %hich the forms applications are processed across the three tier architecture)
/he a(oe discussion is meant as a (asic introduction to the ?aa @pplication and @pplet features
of 8racle 9orms) It is (eyond the scope of this tutorial to present the details for configuring
serers and serices to proide this capa(ility) ,lease refer to the onEline documentation that
comes %ith 98rms ;i for more detailed descriptions and configuration instructions)
6.9.9 >uer2 =2 /@ample
0hen a Deeloper 9orm is first eBecuted, no records %ill appear) /hat is, the (lank form %ill
appear %ith no data in the fields) /his is similar to running a %ord processor %here the opening
screen is (lank) 9rom this (lank or empty form, the user can immediately (egin to enter ne% data
records (y simply typing them in)
Ho%eer, in may cases, the user %ould first like to see if there are any records in the data(ase) /o
do this, the user must %uery the data(ase using the -uery capa(ilities that are (uilt into eery
8racle form) /his %ill (ring a copy of the records from the data(ase into the form)
0hen a tool such as SA<G,lus is used, the user must form the SA< -uery (y typing it directly in)
In the case of em(edded SA<, the SA< statements are programmed into the host language !such
as KCK or ?aa" and automatically eBecuted for the user) In the case of 8racle 9orms, compleB
-ueries can (e formulated and su(mitted to the data(ase using a techni-ue called Auery By
=Bample or AB=) In AB=, the name of the ta(le or ta(les is fiBed as are the names of the
columns that %ill (e returned from the ta(les) /he user can supply their o%n criteria (y
supplying alues for the fields) /hese alues (ecome part of the -uery that is su(mitted to the
data(ase on (ehalf of the user)
Auerying a form in 8racle 9orms is a t%o step process) Clicking on the Auery (utton or
choosing En6er >uer# from the >uer# menu places the form in &nter 'uery mode) In enter
-uery mode, the form is cleared and the user can naigate in the arious fields) =Bample alues
can (e supplied as criteria for the -uery) 9or eBample, a user looking for all employees in the
#=S=@#CH department might type a K2K in the DN8 field %hile in enter -uery mode)
Clicking on the Auery (utton a second time eBecutes the current -uery using any supplied data as
criteria in a 0H=#= clause) If no criteria are supplied, then all records in the ta(le %ill (e
displayed) Continuing the a(oe eBample, supplying a K2K for the DN8 field %hile in enter -uery
mode %ould cause the follo%ing SA< -uery to (e su(mitted to the data(aseC
+ELECT 8n5!e) "n5!e) ssn) 7456e) s5"5r#) 4no
%ROM e!p"o#ee
?&ERE 4no L '/
Most of the commands on the menus and on the (utton (ar can also (e actiated using special
key com(inations or function keys) 9or eBample, under MS 0indo%s 123143N/3+555, pressing
the %7 function key places the form in =nter Auery mode) ,ressing the %< function key eBecutes
a -uery) /o see a list of keys and their functions, pull do%n the &e"p menu and choose the 2e#s
option)
8nce data has (een -ueried, it is retrieed from the data(ase and stored in a (uffer in the
associated data (lock on the form) /his means that a local copy of the data no% eBists in the
clientIs memory) @ppropriate locks are placed on the data so that the client maintains a consistent
ie% of the data in the associated ta(les)
/he user can naigate through the data in a (lock (y pressing the up and do%n arro% keys to
scroll (et%een records) /o change data in a form, the user can /@B to the field of interest, and
type oer the eBisting data)
/o enter ne% data into the form, the user can scroll to the last record and then do%n once more to
moe to a (lank record) Data can then (e typed into the fields and the /@B key can (e pressed to
moe (et%een fields on the form)
/o sae (oth changed and ne% records on a form, pull do%n the AA6ion menu and choose the
+5Ee menu item) @ny records that hae (een changed are collected and su(mitted to the data(ase
as SA< U,D@/= statements) @ny ne% records are collected and su(mitted to the data(ase as
INS=#/ statements) /hese statements are su(mitted as a single logical unit of %ork) /hus if a
failure occurs during any of the statements, the entire transaction %ill (e rolled (ack)
If the user attempts to clear the (lock or eBit the form and there are some changes that hae not
yet (een applied to the data(ase, they %ill (e prompted to commit the changes (efore eBiting or
clearing the form) /he (lock is cleared %hen the =nter Auery mode is inoked) @ (lock can also
(e cleared using the C"e5r "oA0 and C"e5r %or! menu items)
/o eBit from a running form, pull do%n the AA6ion menu and select the EFi6 menu item)
@s a reie%, here are a fe% (asic functions that can (e performed (y default in any 9ormC
Forms
function
&otes
Auerying a
form
/o see all records in the ta(le, simply K=Becute AueryK !ia Auery menu or (y
pressing 94 in 0indo%s")
/o filter the record, Kenter -ueryK mode, specify the -uery parameters in the fields
and then K=Becute AueryK)
Inserting ne%
records
Scroll to the last record and then scroll once more to get a (lank record) /ype in
data for each field and then commit these changes (y pulling do%n the AA6ion
menu and choose the +5Ee menu item)
9or master3detail forms !discussed (elo%" first either -uery a master record or
insert and sae a master record !in the master data (lock", then naigate to the
detail (lock and insert ne% records there)
Updating
eBisting
records
Auery the data(ase and scroll to the record of interest) Change the alues in the
fields and then sae the changes)
9or master3detail forms, changes to the key in the master (lock may (e preented
if detail records eBist !thus insuring relational integrity")
Deleting
records
Auery the data(ase and scroll to the record of interest) ,ull do%n the #ecords
menu and choose Delete record) /hen sae the changes)
9or master3detail forms, attempting to delete a master record %hen detail records
eBist typically results in an error) In such cases, all of the detail records should (e
deleted first and then the master record should (e a(le to (e deleted)
6.# /@erciseA Creating a a 6ingle =loc* Form
9or this eBercise, create a simple data entry form for the D=,@#/M=N/ ta(le %ith the
follo%ing characteristicsC
Select and display all of the columns in the D=,@#/M=N/ ta(le)
In the layout %i&ard, use the /a(ular layout and display 2 #ecords in the form) @dd a
scroll(ar)
In the <ayout =ditor, make the DN@M= field a (it %ider to accommodate longer
department names)
Change the ,roperties of the D=,@#/M=N/ (lock so that that data is 8#D=# BY
DNUMB=#)
Sae the form under the file nameC 4ep5r6.8!7
/he resulting form should look like the follo%ingC
Use the enter -uery mode and eBecute -uery functions to -uery the department ta(le for a
specific department name and3or num(er)
B. Creating a 0aster<Detail Form
In this section, the (asic steps for creating a Master3Detail form are introduced) @ Master3Detail
form is a form that has t%o (locks arranged in a masterEdetail relationship)
B.+ The 0aster<Detail Relationship
/he MasterEDetail relationship is a common relationship (et%een entities in a (usiness) In an
=ntityE#elationship diagram, these are sho%n as K8ne to ManyK relationships) In a physical
data(ase design, a single Master record references one or more detail records in another ta(le) @
record in the detail ta(le %ill relate to eBactly one master record in the master ta(le) @nother
name for this relationship is called parentEchild) =Bamples of this relationship includeC
@ Customer 8rder %ith many 8rderItems)
@ Department %ith many =mployees)
@n =mployee %ith many Dependents)
@ Company %ith many Branch 8ffices)
@ #ecipe %ith many #ecipeSteps)
@n Inentory location %ith many Inentory Items)
8racle 9orms implements the masterEdetail relationship using t%o data (locks) /he first (lock
corresponds to the master ta(le and the second (lock corresponds to the detail ta(le) /here are
t%o ma:or functions in a MasterEDetail formC
8racle 9orms coordinates alues (et%een the t%o (locks through a series of form and
(lock leel triggers)
8racle 9orms guarantees that the detail (lock %ill display only records that are associated
%ith the current record in the master (lock)
Note that a MasterEDetail form is simply one %ay of ie%ing the data in t%o related ta(les)
9orms do not affect the schema in terms of creating, dropping or enforcing data(ase leel
referential integrity constraints)
B.' 6teps to Create a 0aster<Detail Form
In this section, a set of step (y step instructions for creating a MasterEdetail form are gien) /he
form %ill allo% a user to -uery a gien department in the company and then %ill display all of
the employees in that company)
/he schema used is the same one suggested in the ,rere-uisites section at the (eginning of this
tutorial) Notice that the DN8 column in the EMPLOYEE ta(le gets its alues from the DNUMB=#
column in the DEPARTMENT ta(le) In other %ords, to :oin the t%o ta(les in a -uery, one might
specify a 0H=#= clause such thatC EMPLOYEE.DNO L DEPARTMENT.DN,MER)
B.'.+ Create the 0aster =loc*
In the 8(:ect Naigator, click on the %or!s (ranch at the ery top) Create a ne% form (y pulling
do%n the %i"e menu and choosing the NeG menu item) /hen choose %or! from the flyout menu)
Using the same steps gien in the prior section on Creating a 9orm %ith a Single Block, create a
ne% (lock named DEPARTMENT that contains all of the columns in the DEPARTMENT ta(le) BrieflyC
*) ,ull do%n the Too"s menu and choose the Data Block %i&ard)
+) Create a data (lock for a ta(le3ie%)
.) Specify the D=,@#/M=N/ ta(le and select all of the columns !DN@M=, DNUMB=#,
M>#SSN and M>#S@#/D@/=")
7) Create the data (lock and then go on to the <ayout %i&ard)
2) @pply the Department data (lock to a ne% canas)
;) @dd all of the columns as Displayed Items)
D) Change the la(els toC
Dept) Name
Dept) Num(er
Mgr) Ssn
Mgr) Start Date
4) Choose a Form layout)
1) Specify a frame title of KDepartmentsK and select only * record to (e displayed)
*5) Sae the form as 4ep6e!p.8!7 and then compile and run it to make sure it is %orking
properly)
**) Use the AB= features to retriee only those departments %ith DNUMB=# greater than +)
/hen, do another AB= -uery to retriee only those departments %ith the letter & in their
name !try M&M")
@fter this first step, the 4ep6e!p form should look like the follo%ingC
B.'.' Create the Detail =loc*
No% that %e hae the master (lock D=,@#/M=N/ created, %e can no% create the detail (lock
=M,<8Y== and associate it %ith the master (lock) ,erform the follo%ing stepsC
*) #eturn to the 8(:ect Naigator !pull do%n the Too"s menu and choose O7IeA6
N5EiC56or")
+) In the 8(:ect Naigator, click on the Data Blocks (ranch of the D=,/=M, form !do not
click on the department data (lock, ho%eer")
.) ,ull do%n the /ools menu and choose the Data Block %i&ard)
Note( If the D=,@#/M=N/ data (lock !or any of its items" is still selected, actiating the
Data Block %i&ard %ill cause the eBisting (lock to (e edited instead of creating a ne%
(lock !%hich is %hat is re-uired in this part of the tutorial")
7) Select the =M,<8Y== ta(le and include the 9N@M=, <N@M=, SSN, BD@/=,
S@<@#Y and DN8 columns)
2) Because at least one data (lock already eBists in the form, the neBt step in the %i&ard %ill
(e to create a relationship (et%een the eBisting data (lock !D=,@#/M=N/ in this case"
and the ne% (lock (eing created)
/he %i&ard can construct the relationship (ased on ta(le leel constraints it learns from
the data(ase schema) 9or eBample, in the C#=@/= /@B<= and @</=# /@B<=
statements gien at the start of this tutorial, foreign key constraints %ere specified
(et%een D=,@#/M=N/ and =M,<8Y==, and (et%een =M,<8Y== and
D=,=ND=N/) Ho%eer, such relationships are not al%ays implemented in ta(le leel
constraints)
/he deeloper can also specify the relationship manually) In this case, the relationship
%ill (e specified manually)
DeEselect the Au6o:Ioin 4565 7"oA0s option)
Click on the Cre56e Re"56ionship (utton to list the aaila(le data (locks)
In the neBt dialog (oB #elation /ype, choose 5se4 on 5 Ioin Aon4i6ion and click
the O2 (utton)
0hen the list of (locks appears, choose the D=,@#/M=N/ data (lock)
@rrange the Detail Item !DNO" and Master Item !DN,MER" such as that the :oin condition
(ecomesC EMPLOYEE.DNO L DEPARTMENT.DN,MER
;) Create the data (lock and then call the <ayout %i&ard)
D) Be sure to choose the eBisting canas !C@NF@S+ in this eBample" and include all of the
items e)ce$t t*e DNO as displayed)
/he DN8 column !item" %ill still (e a part of the =M,<8Y== data (lock, ho%eer, it
%ill not (e displayed to the user)
4) /ouch up the la(els for the fields and choose the Tabular layout)
1) >ie the 9rame /itle as K=mployeesK and select 2 #ecords displayed %ith 5 distance
(et%een records)
*5) Sae the form !it should already hae the name 4ep6e!p.8!7" and then compile and run
it) Note that after compilation, any errors encountered %ill (e displayed)
/he follo%ing figure sho%s the masterEdetail form runningC
Notice that (y scrolling the master (lock D=,@#/M=N/ to a ne% department num(er !using the
up and do%n arro% keys", the employees for that department are automatically -ueried and
displayed)
/o naigate (et%een the Master and Detail (locks, useC
/o go to the neBt (lockC ,ress CTRL:P5CeDoGn or pull do%n the "oA0 menu and choose
NeF6
/o go to the preious (lockC ,ress CTRL:P5Ce,p or pull do%n the "oA0 menu and
choose PreEious
B.5 Relation -roperties of a 0aster<Detail Form
/here are a num(er of properties in a masterEdetail form that can (e changed to suit particular
(ehaior of the form) In the figure (elo%, the 8(:ect Naigator has seeral ne% o(:ects on it
including +elations)
/o ie% the properties for the D=,@#/M=N/$=M,<8Y== relation, open up the
D=,@#/M=N/ (lock and then open the #elations (lock (y clicking on the N sym(ols) /hen
click on the D=,@#/M=N/$=M,<8Y== relation %ith the right mouse (utton and select
,roperties)
/here are seeral interesting properties in the relations property sheetC
&ame E /he name of the #elation) /his is typically made up of the names of the (locks)
Relation T2pe E /he type of the relationC ?oin or #ef)
@ ?oin relation uses the typical SA< :oin !in the 0here clause" to (ring the t%o ta(les
!data (locks" together) /he +ef relation type is used for a(stract data types and o(:ect
references)
Detail Data =loc* E /he name of the detail data (lock specified %hen the detail data
(lock %as created)
?oin Condition E /his is the :oin condition in effect for -ueries to the data(ase) /his %as
specified %hen the detail data (lock %as created)
Delete Record =ehavior E Used to specify ho% the deletion of a record in the master
(lock affects records in the detail (lock) It supports the follo%ing settingsC
o NonEisolatedC ,reents the deletion of a master record if associated detail records
eBist in the data(ase)
o IsolatedC Deleting the master record %ill not affect the associated detail records in
the data(ase)
o CascadingC Deletes the master record and automatically deletes any associated
detail records)
Coordination < Deferred E Indicates %hen detail records should (e -ueried %hen a
master record is -ueried)
o YesC 9orm does not -uery the detail records until the user naigates to the detail
(lock)
o NoC Detail records are fetched immediately %hen a user -ueries the master record)
Deferred is sometimes set to Yes in cases %here there are a lot of detail records for each
master record) In such cases, a lot of data must (e -ueried and deliered to the client each
time a ne% record is displayed in the master (lock) 0hen Deferred is set to Yes, the user
can scroll do%n to the master record of interest and then naigate to the detail (lock
!C/#<E,ageDo%n" to -uery the related detail records)
Coordination < Auto<.uer2 E @pplied to deferred -ueries only
o YesC the -uery is automatically eBecuted %hen the user naigates to the detail
(lock)
o NoC the -uery must (e eBecuted manually (y the user after they naigate to the
detail (lock)
-revent 0asterless operation E Specifies %hether users are allo%ed to -uery or insert
records in a detail (lock %hen no master record is in place)
o YesC Users may not -uery or insert %hen no master record is in place)
o NoC Users may -uery or insert %hen no master record is in place)
/hese settings are used to KtuneK the oerall performance of a masterEdetail form) @s mentioned
a(oe, in cases %here a large num(er of detail records are associated %ith each master record, it
is a good idea to set coordinationEDeferred to Yes to aoid unnecessary transfers of data (et%een
the serer and client) /his %ill also speed up the display of master records as the user can freely
scroll through them %ithout a pause to -uery and delier the detail records)
B.9 -rogram 7nits in a 0aster<Detail Form
0hen a MasterEdetail form is created, three (asic ,rogram -nits !,<3SA< ,rocedures" are
created (y default) /hese procedures are used to coordinate the -uery and naigation of the detail
records %hen the master record is changed !e)g), %hen the user scrolls to a different master
record", updated or deleted) /he procedures can (e seen listed in the 8(:ect NaigatorC
,<3SA< is 8racleIs procedural language eBtensions to SA<) /o ie% the ,<3SA< code for a
,rogram Unit, click on the name of the program unit %ith the right mouse (utton and then
choose PLH+>L E4i6or from the popEup menu) /he code for the
CH=CJ$,@CJ@>=$9@I<U#= procedure is sho% hereC
/he CH=CJ$,@CJ@>=$9@I<U#= procedure checks to see if a prior form command or SA<
statement %as successful or if it failed)
Belo% is the ,<3SA< code for the AU=#Y$M@S/=#$D=/@I<S procedure) /he teBt after the
:: !t%o minus signs" are comments)
PROCED,RE >uer#1M5s6er1De65i"s$re"1i4 Re"56ion)4e65i" C&AR( *+
o"4!sC C&AR$2(/ :: O"4 Mess5Ce LeEe" +e66inC
re"4e8 C&AR$'(/ :: Re"56ion De8erre4 +e66inC
E3*N
::
:: *ni6i5"iJe LoA5" V5ri57"e$s(
::
re"4e8 :L 3e61Re"56ion1Proper6#$re"1i4) DE%ERRED1COORD*NAT*ON(/
o"4!sC :L :+#s6e!.Mess5Ce1LeEe"/
::
:: *8 NOT De8erre4) 3o6o 4e65i" 5n4 eFeAu6e 6he Ouer#.
::
*% re"4e8 L 9%AL+E9 T&EN
3o1"oA0$4e65i"(/
CheA01P5A05Ce1%5i"ure/
:+#s6e!.Mess5Ce1LeEe" :L 9109/
EFeAu6e1>uer#/
:+#s6e!.Mess5Ce1LeEe" :L o"4!sC/
EL+E
::
:: Re"56ion is 4e8erre4) !5r0 6he 4e65i" 7"oA0 5s un:Aoor4in56e4
::
+e61"oA01Proper6#$4e65i") COORD*NAT*ON1+TAT,+) NON1COORD*NATED(/
END *%/
E.CEPT*ON
?&EN %or!1TriCCer1%5i"ure T&EN
:+#s6e!.Mess5Ce1LeEe" :L o"4!sC/
RA*+E/
END >uer#1M5s6er1De65i"s/

/he AU=#Y$M@S/=#$D=/@I<S procedure is eBecuted %heneer the user naigates to the
detail (lock in a master detail form) If the Deferred Coordination property is set to false, then the
detail (lock is automatically -ueried)
9inally, the C<=@#$M@S/=#$D=/@I<S procedure is called each time a ne% master record is
retrieed !e)g), %hen the user scrolls to a different master record" or deleted) In this case, if any
of the detail records hae (een inserted, updated or deleted, the changes must (e saed into the
data(ase (efore the detail (lock can (e cleared) If there are any outstanding changes to (e saed,
the user %ill (e prompted to sae those changes (efore the detail (ock is cleared)
B.# /@tending 0aster<Detail Forms
MasterEDetail forms can (e eBtended to include additional leels of details) 9or eBample,
consider a Customer listing %ith detail on 8rders a customer has placed) 9or each 8rder, there
are then many Items) @n eBtension to the a(oe eBample %ould (e to include the D=,=ND=N/S
of the employees as a details of the =M,<8Y==S (lock) /he steps outlined a(oe can (e
repeated allo%ing seeral leels of detail to (e added) =ach additional leel of detail %ill add a
ne% (lock that is related to the leel a(oe it)
B.6 /@erciseA Creating a 0aster$Detail Form
9or this eBercise, create a Master3Detail form using the =M,<8Y== and D=,=ND=N/ ta(les)
=mployee %ill (e the Master (lock and Dependents %ill (e the Detail (lock) /he :oin condition
(et%een the t%o ta(les is %here the SSN column of =M,<8Y== is e-ual to the =SSN column
of D=,=ND=N/)
/he follo%ing is an outline of the stepsC
*) Create the =mployee data (lock and include the 9N@M=, <N@M=, SSN, @DD#=SS and
S=6 fields on the form) Use the 9orm layout and only display one record at a time)
+) >o (ack to the 8(:ect Naigator and select the KData BlocksK tree) Make sure the
=M,<8Y== (lock is not selected and run the Data Block 0i&ard again)
.) Create the Dependents data (lock and include all of the columns)
9or the master3Detail relationship, deEselect the KautoK option, use a ?oin relationship,
choose the =M,<8Y== data (lock as the Master and set DEPENDENT.E++N L
EMPLOYEE.++N for the :oin relationship)
7) In the <ayout 0i&ard for the Dependents data (lock, display all of the fields e)ce$t t*e
&SSN field) /he =SSN field %ill remain part of the data (lock (ut it %ill not (e isi(le on
the form) Choose a /a(ular style and display 7 up to records at once %ith 5 space
(et%een each record)
2) Sae the form using the nameC e!p4epn.8!7
/he completed form should look like the follo%ingC
Auery the master (lock and practice naigating (et%een the t%o (locks using the C/#<E
,ageDo%n and C/#<E,ageUp keys)
0hile in the =mployee (lock, scroll to the =mployee named ?=NNI9=# 0@<<@C=, naigate to
the Dependents (lock and add a ne% record for a S8N named @ND#=0 (orn on +5E8C/E*1;+)
Naigate (ack to the =mployee (lock and attempt to scroll to another employee record) @ prompt
should (e displayed to sae the ne% Dependent record)
0hile in the Master (lock for =mployees, scroll to an employee %ho has some dependents) /ry
to delete the =mployee record and see if an error message appears)
9inally, alter the =M,<8Y==$D=,=ND=N/ relation properties and set the CoordinationE
Deferred to Yes and then run the form) Notice no% that the detail records %ill not (e displayed
automatically) Naigate to the Dependents (lock and hit the =Becute -uery (utton !or pull do%n
the >uer# menu and choose EFeAu6e") Notice that only those Dependent records matching the
=mployee are displayed)
%. 3ist of Calues D3OCsE and &on<=ase Ta1le Fields
It is cum(ersome for a user to hae to remem(er arious codes and num(ers %hile entering data
into a data entry form) 9or eBample, in the =mployee form, it might (e difficult to hae all of the
department num(ers memori&ed %hen inserting ne% employee data)
8ne solution to this pro(lem is to make a list of appropriate alues aaila(le %hen the user
naigates to Department Num(er field !DN8") In 8racle 9orms, these are called <ist of Falues
!<8Fs") /he neBt section %ill illustrate creating <8Fs for fields) /hese eBamples are (ased on
the single (lock =mployee form created at the (eginning of this tutorial)
/o prepare for this part of the tutorial, close any forms you currently hae open (y pulling do%n
the %i"e menu and selecting the C"ose menu item)
8nce all of the forms are closed, pull do%n the %i"e menu and choose the Open menu item to
open up the e!p"o#ee.8!7 form that %as created preiously)
@ <ist of Falues is (ased on a +ecord .rou$) In 8racle 9orms, a record group is a -uery that
returns some collection of records) #ecord groups can (e used to populate (locks or <8Fs and
they can (e used in procedures) 0hen the user naigates to an item %ith an <8F attached to it,
the <8F key !91 in MS 0indo%s" can (e pressed to call up the <8F) @t that time, the -uery
associated %ith the record group is eBecuted and the results are displayed in a pop up %indo%)
8nce the user makes a selection from the list, the alue or alues are returned to the form and
placed in the appropriate fields)
In the eBample (elo%, a record group and <8F for the DN8 !department num(er" field in the
=mployee ta(le %ill (e created)
%.+ Creating a 3ist of Calues
Creating a <ist of Falues re-uires 7 (asic steps)
%.+.+ Create a ne! 3OC O1:ect
/o create an <8F, click on the <8Fs node in the 8(:ect Naigator) /hen pull do%n the
N5EiC56or menu and choose the Cre56e menu item) @ dialog (oB %ill appear asking if you
%ould like to create the <8F manually or if you %ould like to use the <8F 0i&ard)
Choose KUse the <8F 0i&ardK and click the 8J (utton) /he first step of the <8F 0i&ard %ill
appear as (elo%C
/he default is set to create a ne% #ecord >roup) Make sure this selection is highlighted and then
click the NeBt (utton)
In most cases, you %ill not hae a record group created preiously) Ho%eer, one can (e created
on the fly at this point (y specifying a -uery) In this eBample, enter the <8F -uery as follo%sC
+ELECT DN,MER %ROM DEPARTMENT
/hen click on the NeBt (utton)
/he neBt step is to specify %hich columns in the record group %ill (e returned to for use (y the
<8F) In this eBample, %e only return DNUMB=# so select that column as sho%n (elo% and
click NeBt)
/he neBt step is to specify the display properties of the <8F columns and also to map the <8F
item to the field on the form)
/o map the <8F column to a field, click on the DNUMB=# entry and then click on the K<ook
up return ItemK (utton) Highlight the =M,<8Y==)DN8 field and click on the 8J (utton)
Note that if your <8F contains more than one item, at this time you %ould also map them as
%ell !this is not the case %ith this eBample, (ut in the neBt eBample %e %ill need to map t%o
<8F columns") Click on the NeBt (utton)
Specify a title for <8F %indo%) @t this point you may also specify the si&e and positioning of
the <8F) 9or this eBample, leae them as the defaults and click the NeBt (utton)
/he adanced properties relate to ho% the records should (e fetched for the <8F) If there are
many hundreds or thousands of possi(le records returned (y the <8F, you may consider
changing these options) 8ther%ise, for this eBample, simply click NeBt)
In this final step, the <8F is returning some columns and they %ere assigned to fields on the
form in a preious step) @t this point, %e need to associate the <8F %ith a particular item on the
form) 9or eBample, (y assigning the <8F to the =M,<8Y==)DN8 field, the user %ill (e a(le to
call up the <8F only %hen the cursor is positioned in the =M,<8Y==)DN8 field) Choose
=M,<8Y==)DN8 and click the NeBt (utton)
9inally, click 9inish to create the #ecord >roup and the <8F)
In the figure (elo%, the <8F has (een created) @ default name of <8F7 %as gien to (oth the
<8F and to its associated record group) Depending on %hat other parts of this tutorial you hae
completed, the default name may (e slightly different)
Sae, Compile and #un the form) 0hen entering ne% data, naigate to the DN8 !Department
num(er" field) Notice at the (ottom of the form, a message appearsC Lis6 o8 V5"ues indicating
a list of alues is aaila(le for this field)
Under UNI6, the key to display the list of alues is ControlEl)
Under MS 0indo%s 123143N/3+555 the key to display the list of alues is 91)
/o see the appropriate keys to press, pull do%n the &e"p menu and choose the 2e#s item)
%.' &on<=ase Ta1le fields
In the preious eBample of adding a <ist of Falues, the supplied list of appropriate alues can (e
useful in cases %here the alues themseles are selfEeBplanatory) Ho%eer, in the prior eBample,
the department num(ers may not hae meaning to the user)
It %ould (e more helpful to include the name of the department (oth in the popEup list of alues
and on the form) Ho%eer, the department name is not part of the =M,<8Y== ta(le or data
(lock) /hus %e need a %ay to display this information on the =M,<8Y== data (lock in a non
base table field)
@dding this item and making it functional %ill take seeral stepsC
*) 9irst the ne% item %ill hae to (e added to the =M,<8Y== data (lock) 0eIll call this
ne% item D=,/N@M=)
+) NeBt, the D=,/N@M= field should (e populated %ith the department name each time the
alue of the DN8 field changes) @ 6riCCer %ill (e created to handle this functionality)
.) 9inally, the list of alues %ill (e changed to include the Department name in the <8F)
%.'.+ Adding a &e! ,tem to an /@isting Data =loc*
S%itch to the <ayout =ditor (y clicking on the Too"s menu and selecting the L5#ou6
E4i6or menu item)
Click on the /eBt Item tool and create a ne% field on the =M,<8Y== (lock (y
clicking and dragging the mouse neBt to the DN8 item)
Display the properties for the ne% /eBt Item (y dou(le clicking on it) Change its name to
D=,/N@M=) Change the follo%ing properties for D=,/N@M=C
/na1ledA Yes
Fe21oard &aviga1leA No
Data1ase ,temA No
>uer2 Onl2A No
-rimar2 Fe2A No
,nsert Allo!edA No
>uer2 Allo!edA No
7pdate Allo!edA No
By setting Jey(oard Naiga(le to No, %e
preent the user from ta((ing into this field)
Since this field is not used for data entry or
-uerying, this preents the potential
confusion)
/he Data(ase Item property is set to No %hich indicates that this filed does not map to an
actual column in the =M,<8Y== ta(le)
/he remaining properties are all set to No to keep the field from participating in any of
these actiitiesC Delete, Insert, Update and Auery)
@t this point, the ne% item D=,/N@M= has (een added to the =M,<8Y== data (lock as a
nonE(ase ta(le field)
Sae the form at this point (y pulling do%n the %i"e menu and choosing the +5Ee option)
%.'.' Creating a Trigger
NeBt, %e %ill create a trigger to populate the D=,/N@M= field %heneer the alue of DN8
changes) /riggers in 8racle 9orms hae four general formsC
PRE: /rigger fires (efore an eent is eBecuted)
PO+T: /rigger fires after an eent is eBecuted)
?&EN: /rigger fires in place of the eBecution of an eent)
2EY: /rigger fires %hen a particular key is pressed)
In this eBample, %e %ould like to populate the D=,/N@M= field %ith the appropriate
department name :ust after the DN8 field changes on the =M,<8Y== (lock) /hus %e %ill use a
PO+T:C&AN3E trigger on the :EMPLOYEE.DNO field)
S%itch to the 8(:ect Naigator ie% (y clicking on the Too"s menu and choosing the
O7IeA6 N5EiC56or menu item)
8pen up the =M,<8Y== data (lock and the DN8 item)
Click on the Triggers property and create a ne% trigger (y pulling do%n the N5EiC56or
menu and choosing the Cre56e menu item)
@ list of possi(le trigger names appears) Choose the PO+T:C&AN3E trigger and click on
the 8J (utton)
0hen the ,<3SA< editor appears, type the follo%ing ,<3SA< codeC
:: Popu"56e 6he non:75se 657"e 8ie"4 :EMPLOYEE.DEPTNAME
:: usinC 5 E5"ue 8ro! 6he DEPARTMENT 657"e.
E3*N
+ELECT DNAME
*NTO :EMPLOYEE.DEPTNAME
%ROM DEPARTMENT
?&ERE DEPARTMENT.DN,MER L :EMPLOYEE.DNO/
END/
Items on a (lock are preceded (y a full colon to differentiate them from columns in a
ta(le)
Compile the trigger (y clicking on the Compile (utton)
Close the ,<3SA< editor (y clicking on the Close (utton) /hen sae, compile3(uild and
run the form to test the functionality) Notice that %hen the =M,<8Y== (lock is -ueried,
the associated department name no% appears in the ne% D=,/N@M= field)
%.'.5 Create a ne! 3ist of Calues
9inally, a ne% list of alues should (e created to display (oth the department num(er and name
%hen the user calls up the <8F)
9rom the 8(:ect Naigator, click on the <8Fs for the =M,<8Y== form) ,ull do%n the
N5EiC56or menu and choose the Cre56e menu item) Choose the <8F 0i&ard)
/ype the follo%ing SA< statement into the >uer2 Te@t fieldC
+ELECT DEPARTMENT.DN,MER) DEPARTMENT.DNAME %ROM DEPARTMENT

/hen click on the NeBt (utton)
Include (oth the DNUMB=# and DN@M= columns from the #ecord >roup in the <8F)
Map the DNUMB=# <8F column to the C=M,<8Y==)DN8 teBt item and map the
DN@M= <8F column to the C=M,<8Y==)D=,/N@M= teBt item !created in the
preious section")
>ie a title for your list of alues and return (oth DNUMB=# and DN@M= from the
<8F)
9inally, Sae, Compile and #un the form) Note that displaying the <8F for the DN8
item no% causes (oth the department num(er and the name to appear)
%.5 /@erciseA Creating an 3OC and &on<=ase ta1le field
9or this eBercise, create a ne%, single data (lock form (ased on all of the columns in the
D=,@#/M=N/ ta(le) /hen add a nonE(ase ta(le field for the last name of the department
manager and create an <8F to populate itC
Create a ne% form called 4ep5r6!C.8!7 that includes all of the columns in the
D=,@#/M=N/ ta(le) In the layout %i&ard, use the /a(ular layout and display 2 #ecords
in the form) @dd a scroll(ar)
In the <ayout =ditor, create a ne% teBt item called M>#$<@S/$N@M= in the
D=,@#/M=N/ data (lock) Be sure the D=,@#/M=N/ (lock is selected %hen the ne%
item is created) Change the properties of M>#$<@S/$N@M= so it is not a Data(ase
item)
Create a list of alues called <8F$M># (ased upon the -ueryC
+ELECT ssn) "n5!e %ROM e!p"o#ee
@ssign <8F$M># to the M>#SSN item)
Create a ,8S/ECH@N>= trigger on the M>#SSN item so that %hen it changes, the
follo%ing code %ill eBecuteC
+ELECT "n5!e
*NTO :DEPARTMENT.M3R1LA+T1NAME
%ROM e!p"o#ee
?&ERE e!p"o#ee.ssn L :DEPARTMENT.M3R++N/
/his %ill automatically populate the non (ase ta(le field M>#$<@S/$N@M= on the
form %hen the form is -ueried)
/he form should look like the follo%ingC
". Oracle Forms -rogram 7nits and 6tored -rogram 7nits
8racle 9orms proides a mechanism to store procedures !called ,rogram Units" %ritten in the
,<3SA< language %ithin a form) ,rogram Units can (e used to add functionality that is not
possi(le through Structured Auery <anguage !SA<" or through the 8racle 9orms interface) Some
eBamples of ,rogram Units %ere gien in the discussion on ,rogram Units in a MasterEDetail
9orm) By storing a ,rogram Unit %ithin a form, many (locks in the form can take adantage of
the same procedure %hich reduces code duplication and improes the maintaina(ility of the
code)
,rocedures %ritten in ,<3SA< may also (e stored %ithin the 8racle Data(ase itself as an o(:ect
in the schema) Such Stored ,rogram Units !also called Stored ,rocedures" are ideal for situations
%here highly standardi&ed (usiness rules or applications logic must (e implemented across many
forms or applications) In addition, procedures that re-uire seeral -ueries (e made to the
data(ase may (e (est implemented in the data(ase as this reduces the net%ork traffic and can
significantly improe performance) @ user may create stored procedures %ith the 8racle
SA<G,lus command line tool)
8racle 9orms can make calls to (oth internal ,rogram Units as %ell as to Stored ,rogram Units)
/his fleBi(ility allo%s application designers eBtensie control oer the eBecution of applications
and facilitates performance tuning)
In the follo%ing sections, eBamples of 8racle 9orms ,rogram Units and Stored ,rogram Units
%ill (e gien)
".+ Creating -rogram 7nits in Oracle Forms
In this section, %e %ill augment the =M,<8Y== form (y adding a count of other mem(ers of a
gien employeeIs department) /o add this functionality, %e %ill add a ne% field item to the
=M,<8Y== (lock, %rite a ,rocedure in ,<3SA< to gather the data and then %rite a /rigger that
%ill call the ,rocedure each time a ne% =mployee record is -ueried)
".+.+ Add a ne! item to the /0-3O4// =loc*
@dd a ne% item on the =M,<8Y== (lock to store the count of other employees in the
department) See the section on @dding a Ne% Item to an =Bisting Block for details)
Call this field OT(/RG0/0=/R6) Be sure it is a nonEdata(ase field and that a user %ill not
(e a(le to naigate there, insert, update or delete data in the field) >o to the ,roperties and check
each of themC
/na1ledA /rue
&aviga1leA No
Data1ase ,temA No
>uer2 Onl2A No
-rimar2 Fe2A No
,nsert Allo!edA No
>uer2 Allo!edA No
7pdate Allo!edA No
@dd a la(el to this field (y s%itching to the <ayout =ditor, choosing the teBt tool and clicking
neBt to the 8/H=#$M=MB=#S field)
".+.' Create a -rocedure to Count Other Department 0em1ers
In this step, create a ,rogram Unit !procedure" in 8racle 9orms to count the num(er of other
mem(ers in the same department) 9or this procedure, %e %ill pass in a parameter called
IN$=M,<8Y==$SSN that %ill contain an employeeIs social security num(er) /he procedure
%ill return a alue in the parameter 8U/$C8UN/$8/H=#$M=MB=#S that %ill contain the
num(er of other employees %ho are in the same department)
/o create this procedure, s%itch to the 8(:ect Naigator and scroll do%n to the -rogram 7nits
(ranch) ,ull do%n the N5EiC56or menu and choose the Cre56e menu item) @ dialog (oB %ill
appear asking you to name the ne% procedure) /ype in the name OT&ER1DEPARTMENT1MEMER+
and click on the 8J (utton)
@t this point, the ,<3SA< editor %ill appear) /ype in the follo%ing procedure (ody) @n
eBplanation of each part of the procedure is gien after%ardsC
:: 3iEen 5n E!p"o#ee9s ++N) re6urn 6he nu!7er o8 o6her e!p"o#ees
:: in 6he s5!e 4ep5r6!en6.
PROCED,RE OT&ER1DEPARTMENT1MEMER+ $*N1EMPLOYEE1++N *N N,MER)
O,T1CO,NT1OT&ER1MEMER+ O,T N,MER( *+
TEMP1CO,NT N,MER/ :: P"5Aeho"4er 8or Aoun6
E3*N
TEMP1CO,NT :L 0/ :: *ni6i5"iJe 6o 0
:: Tr# 5n4 8i"" TEMP1CO,NT Gi6h 6he Aoun6 o8 o6her
:: E!p"o#ees in 6he 4ep5r6!en6
+ELECT CO,NT$P(
*NTO TEMP1CO,NT
%ROM EMPLOYEE
?&ERE EMPLOYEE.DNO L
$+ELECT EMPLOYEE.DNO
%ROM EMPLOYEE
?&ERE EMPLOYEE.++N L *N1EMPLOYEE1++N(/
:: +ee i8 Ge Co6 5 !e5ninC8u" resu"6
*% $NVL$TEMP1CO,NT) 0( QB 0( T&EN
O,T1CO,NT1OT&ER1MEMER+ :L $TEMP1CO,NT : 1 (/
EL+E
O,T1CO,NT1OT&ER1MEMER+ :L 0/
END *%/
END/
/he procedure is %ritten in three main sections) @ny lines starting %ith :: are comments and are
ignored (y 8racle forms)
/he heading for the procedure definition indicates that one parameter, IN$=M,<8Y==$SSN, is
a NUMB=# data type and the procedure should eBpect a alue to (e passed in) /he other
parameter, 8U/$C8UN/$8/H=#$M=MB=#S, is also a NUMB=# data type and a alue %ill
(e passed (ack to the calling program through it)
/o finish off the procedure header, the /=M,$C8UN/ aria(le is declared for use %ithin this
procedure only)
/he B=>IN statement starts the (ody of the procedure) /=M,$C8UN/ is initiali&ed to 5 and
then a -uery is performed on the data(ase to find the total num(er of employees in the same
department as the employee %hose SSN %as supplied to the procedure)
/he result in /=M,$C8UN/ is checked to see if it is a NU<< alue) If /=M,$C8UN/ is not
NU<< and it is not 5, then 8U/$C8UN/$8/H=#$M=MB=#S is set to e-ual /=M,$C8UN/E
*) 8ther%ise 8U/$C8UN/$8/H=#$M=MB=#S is set to 5)
/he last =ND statement ends the (ody of the procedure)
Be sure to check to see that the procedure compiles (y clicking on the Co!pi"e (utton) @ny
errors in the procedure %ill (e highlighted) Some common pro(lems include forgetting to use :L
in an assignment statement !like the ,ascal language" and leaing off the END *% to finish up
*% ... T&EN statements)
0hen done, click on the C"ose (utton to close the ,<3SA< editor)
".+.5 Create a Trigger to Call the -rocedure
Create a trigger to call the 8/H=#$D=,@#/M=N/$M=MB=#S procedure) In the 8(:ect
Naigator, open up the =M,<8Y== (lock and the SSN item) Highlight the Trigger (ranch for
the SSN item, pull do%n the N5EiC56or menu and choose the Cre56e menu item)
@ pop up list of trigger names %ill appear) Choose ,8S/ECH@N>= and click on the 8J (utton
to open the ,<3SA< editor for this ne% trigger) /ype in the follo%ing code for the ,8S/E
CH@N>= trigger on the SSN itemC
DECLARE
re6urn1Aoun6 N,MER/
E3*N
:: C5"" 6he %or!s ProAe4ure 6o Ce6 6he
:: Aoun6 o8 o6hers in 6he 4ep5r6!en6.
OT&ER1DEPARTMENT1MEMER+$:EMPLOYEE.++N) re6urn1Aoun6(/
:: AssiCn 6he re6urn Aoun6 6o 6he 8ie"4 on
:: 6he EMPLOYEE 7"oA0.
:EMPLOYEE.OT&ER1MEMER+ :L re6urn1Aoun6/
END/
@gain, click on the Co!pi"e (utton to (e sure the trigger compiles correctly and then click on the
C"ose (utton to return to the 8(:ect Naigator)
".+.9 6ave, Compile$=uild and Run the Form
/o this point, %e hae added a ne% nonE(ase ta(le field to the =M,<8Y== (lock, %ritten a
procedure !,rogram Unit" to count other employees in the same department and added a trigger
to call the procedure each time a ne% employee record is -ueried)
/o sae you %ork, use the +5Ee As menu item on the %i"e menu and sae this form under the
nameC e!p1!e!7.8!7
Sae, Compile3Build, and #un the form to check its functionality) Note that %hen scrolling to a
ne% employeeIs record, the 8/H=#$M=MB=#S field is automatically populated %ith alues
indicating the num(er of other employees in the same department)
".' Creating 6tored -rocedures in 6>3H-lus
In the preious eBample, %e added a procedure !,rogram Unit" in 8racle 9orms to perform a
-uery on the data(ase) /he procedure is stored as part of the formIs source code and is compiled
%hen the form is (uilt) Upon eBamination, each call of this procedure producesC
*) @ local call from the ,8S/ECH@N>= trigger to the procedure passing an employeeIs
SSN)
+) @ remote access from the procedure to the data(ase passing a SA< -uery)
.) @ remote return from the data(ase containing a count)
7) @ small amount of processing in the procedure !I9 ))) /H=N")
2) @ local return from the procedure to the trigger)
In this eBchange, the highest costs are incurred (y the net%ork traffic re-uired to go (ack and
forth (et%een client and serer !steps + and .") /he lo%est costs are incurred (y the local calls
(et%een trigger and procedure and the local processing !steps *, 7 and 2")
In this eBample, the SA< Auery in steps + and . does not return a significant amount of data)
Ho%eer, there are situations %here, if a large amount of data %ere to (e returned for each -uery,
such -ueries %ould seerely impact performance)
8ne solution to this pro(lem is to moe the -ueries and as much processing as possi(le KcloserK
to the data in the data(ase) /hus our eBample for this section %ill (e to implement the
8/H=#$D=,@#/M=N/$M=MB=#S procedure in the 8racle data(ase) /o achiee this, %e
%ill need to use 8racle SA<G,lus !a commandEline tool" to create a stored procedure)
<og in to SA<G,lus and enter the follo%ing C#=@/= ,#8C=DU#= statement) @lternatiely,
sae this statement in a teBt file and eBecute it using the +TART command in SA<G,lus)
CREATE PROCED,RE OT&ER1DEPARTMENT1MEMER+
$*N1EMPLOYEE1++N *N N,MER)
O,T1CO,NT1OT&ER1MEMER+ O,T N,MER( A+
:: 3iEen 5n E!p"o#ee9s ++N) re6urn 6he nu!7er o8 o6her e!p"o#ees
:: in 6he s5!e 4ep5r6!en6.
TEMP1CO,NT N,MER/ :: P"5Aeho"4er 8or Aoun6
E3*N
TEMP1CO,NT :L 0/ :: *ni6i5"iJe 6o 0
:: Tr# 5n4 8i"" TEMP1CO,NT Gi6h 6he Aoun6 o8 o6her
:: E!p"o#ees in 6he 4ep5r6!en6
+ELECT CO,NT$P(
*NTO TEMP1CO,NT
%ROM EMPLOYEE
?&ERE EMPLOYEE.DNO L
$+ELECT EMPLOYEE.DNO
%ROM EMPLOYEE
?&ERE EMPLOYEE.++N L *N1EMPLOYEE1++N(/
:: +ee i8 Ge Co6 5 !e5ninC8u" resu"6
*% $NVL$TEMP1CO,NT) 0( QB 0( T&EN
O,T1CO,NT1OT&ER1MEMER+ :L $TEMP1CO,NT : 1 (/
EL+E
O,T1CO,NT1OT&ER1MEMER+ :L 0/
END *%/
END/
@fter typing in this statement, (e sure to R,N the command in the SA<G,lus (uffer (y typing R,N
or (y typing the for%ard slash H
NoteC 0hile creating a stored procedure, you may receie an error similar to the follo%ingC
ORA:010-1: insu88iAien6 priEi"eCes
/his indicates the DB@ has not granted you the authori&ation to create stored procedures) ,lease
contact your DB@ to o(tain this authori&ation)
/o see if the procedure compiled correctly, look in ie% US=#$=##8#S as follo%sC
+>LB +ELECT P %ROM user1errors/
no roGs se"eA6e4
If the message no roGs se"eA6e4 appears, then no errors %ere found in the trigger)
@nother alternatie is to use the SA<G,lus command called shoG errors) @fter su(mitting a
trigger or a stored procedure, any errors found during compilation can (e displayed using the
shoG errors command)
In some ersions of SA<G,lus, the shoG errors command %ill not %ork due to a lack of (uffer
memory on the client computer) @n error message may appear as in the follo%ing eBampleC
+>LB CREATE PROCED,RE 6es6 A+
2 E3*N
- +ELECT +Y+DATE *NTO :6e!p %ROM 4u5"/
4 END/
' H
?5rninC: ProAe4ure Are56e4 Gi6h Ao!pi"56ion errors.
+>LB shoG errors
7u88er oEer8"oG. ,se +ET Ao!!5n4 6o re4uAe ARRAY+*@E or inAre5se MA.DATA.
No errors.

If the 7u88er oEer8"oG message appears, set the @##@YSIZ= aria(le to a lo%er num(er such
as + %ith the follo%ing commandC
+>LB +ET ARRAY+*@E 2

/hen use the shoG errors command as descri(edC
+>LB shoG errors
Errors 8or PROCED,RE TE+T:
L*NEHCOL ERROR
:::::::: ::::::::::::::::::::::::::::::::::::::::::::
-H2- PL+:0004;: 754 7in4 E5ri57"e 9TEMP9

/o see %hat stored procedures you hae created, -uery the US=#$S8U#C= ie% in the data
dictionary)
/he only ma:or difference (et%een the stored procedure created in the data(ase schema through
SA<G,lus and the procedure created in 8racle 9orms is the %ay the header is formatted)
Creating a stored procedure uses the follo%ing syntaBC
CREATE PROCEDURE OT&ER1DEPARTMENT1MEMER+
$*N1EMPLOYEE1++N *N N,MER)
O,T1CO,NT1OT&ER1MEMER+ O,T N,MER( AS
Contrast this %ith the procedure done in 8racle 9ormsC
PROCEDURE OT&ER1DEPARTMENT1MEMER+
$*N1EMPLOYEE1++N *N N,MER)
O,T1CO,NT1OT&ER1MEMER+ O,T N,MER( IS
8nce the 8/H=#$D=,@#/M=N/$M=MB=#S procedure !,rogram Unit" has (een created in
SA<G,lus, it is stored as an o(:ect in your schema and %ill remain there until a DROP PROCED,RE
OT&ER1DEPARTMENT1MEMER+ statement is issued) @ny 8racle 9orm, #eport or other procedure
can make calls to 8/H=#$D=,@#/M=N/$M=MB=#S as if it %ere a local procedure)
/o see the stored procedure in action, open the e!p1!e!7.8!7 form and remoe !delete" the
,rogram Unit !procedure" 8/H=#$D=,@#/M=N/$M=MB=#S from it) Sae the form,
compile, generate and run it)
/he ,8S/ECH@N>= trigger on C=M,<8Y==)SSN %ill automatically make a call to the stored
procedure ersion of 8/H=#$D=,@#/M=N/$M=MB=#S located in the schema)
/o ie% the aaila(le Stored ,rogram Units from %ithin 8racle 9orms, s%itch to the 8(:ect
Naigator and open up the Data1ase O1:ects tree) 9rom there, a list of schemas !users" %ill
appear) Scroll do%n to your username and open it up) /hen open up the Stored ,rogram Units
tree) @ list of your stored procedure should then appear)
".5 Additional 6tored -rocedures and Triggers
/here are countless %ays in %hich stored procedures and triggers can (e used to enforce (usiness
rules and to process data in an application) In this section, a fe% of the most commonly used
triggers and procedures are descri(ed)
".5.+ Generating uni.ue or consecutive identifiers using the ta1le
Many of the keys used in ta(les are (ased on a num(er se-uence) 9or eBample, in our
D=,@#/M=N/ ta(le, the DNUMB=# is an integer that should increase for each ne%
department) /o automatically generate a ne% DNUMB=#, create a -uery to capture the largest
current DNUMB=# alue and add * to it) /hen assign this ne% alue to the DNUMB=# item in
the D=,@#/M=N/ data (lock) @ trigger to do this could (e created at the (lock leel and should
eBecute (efore any ne% record is inserted into the data(ase) @ PRE:*N+ERT trigger on the
D=,@#/M=N/ data (lock %ould (e used for this eBampleC
E3*N
+ELECT MA.$ 4nu!7er ( N 1
*NTO :4ep5r6!en6.4nu!7er
%ROM 4ep5r6!en6/
END/

@ ,#=EINS=#/ trigger eBecutes :ust (efore the INS=#/ statement for a ne% record is sent to the
data(ase)
".5.' Generating uni.ue or consecutive identifiers using an Oracle 6e.uence
8ne pro(lem %ith the a(oe method is that many users %orking on the same form to insert ne%
records %ill run into concurrency pro(lems) 9or each ne% record to (e inserted, a full ta(le scan
must (e done to find the largest identifier)
8ne solution to this pro(lem is to use an 8racle Se-uence) @n 8racle Se-uence is a schema
o(:ect that keeps track of a simple integer and automatically increments this counter %hen it is
accessed)
9or eBample, in our D=,@#/M=N/ ta(le, the DNUMB=# is an integer that should increase for
each ne% department) /o automatically generate a ne% DNUMB=#, create an 8racle Se-uence
using the SA<G,lus toolC
CREATE +E>,ENCE 4ep5r6!en61seO
*NCREMENT Y 1
+TART ?*T& 1
MA.VAL,E ;;;;;
NOCYCLE/

/he a(oe 4ep5r6!en61seO se-uence %ill (egin counting from * and increment (y * until it
reaches 11111) @fter that, accessing the se-uence %ill produce an error) /his is reasona(le since
it is highly unlikely an organi&ation %ill eer hae more than 11111 departments)
/he neBt step is to assign the neBt alue of the se-uence to the DNUMB=# item in the
D=,@#/M=N/ data (lock) @ trigger to do this %ould (e created at the (lock leel and should
eBecute (efore any ne% record is inserted into the data(ase) @ PRE:*N+ERT trigger on the
D=,@#/M=N/ data (lock %ould (e used for this eBampleC
E3*N
:: 3e6 6he neF6 E5"ue 8or DN,MER 8ro! 6he
:: 4ep5r6!en61seO seOuenAe.
+ELECT 4ep5r6!en61seO.neF6E5"
*NTO :4ep5r6!en6.4nu!7er
%ROM 4u5"/
END/

/he 4u5" ta(le is a dummy ta(le that contains eBactly one record !ro%") 0e can use it in a
S=<=C/)))IN/8 statement to consistently return a single alue) /he neF6E5" accessed in the
se-uence %ill return the current se-uence alue and then automatically increment it to the neBt
alue)
@ ,#=EINS=#/ trigger eBecutes :ust (efore the INS=#/ statement for a ne% record is sent to the
data(ase)
8racle Se-uences are not applica(le for masterEdetail forms such as purchase orders %here an
item num(er needs to (e assigned in the detail ta(le) 9or eBample, purchase order items are
typically num(eredC 1) 2) -...) /he neBt ,8 %ill also num(er the items 1) 2) -) ...) @n
8racle Se-uence is designed to delier uni-ue identifiers for primary keys and should not (e
used for such item num(ers)
".5.5 Chec*ing constraints at the client
In any data(ase system, it is al%ays desira(le to constrain the alues certain columns can take on)
It is possi(le to add constraints to the data(ase ta(les themseles in order to enforce constraints,
ho%eer, the enforcement only takes place %hen a transaction reaches the data(ase) In addition,
many constraints on the data that inole alues of data from other ta(les may not (e easily
implemented as ta(le constraints)
Many types of constraints on data can (e checked in the client using triggers) 9or eBample, in our
=M,<8Y== data entry form, %e may %ant to enforce a constraint that no employee can act as
their o%n superisor) /hus for any record, SSN may not e-ual SU,=#SSN) /o implement such a
constraint, create a ?&EN:VAL*DATE:*TEM trigger on the SU,=#SSN item in the =M,<8Y==
data (lockC
E3*N
*% $:+,PER++N L :++N( T&EN
ME++A3E$9E!p"o#ees !5# no6 superEise 6he!se"EesR9(/
RA*+E %ORM1TR*33ER1%A*L,RE/
END *%/
END/

/he 98#M$/#I>>=#$9@I<U#= %ill cause the eBecution of the item alidation to (e halted
and the user %ill hae to change the SU,=#SSN (efore moing on to another item)
".5.9 Adding Alerts D-op<up 0essagesE
In the preious eBample, the M=SS@>= procedure is used to display the error along the status
(ar at the (ottom of the 9orms %indo%) @ (etter approach may (e to force the userIs attention to
the pro(lem) /his can (e accomplished (y creating a popEup dialog (oB that forces the user to
read the message and click an 8J (utton !or some other (utton") In 8racle 9orms, this is called
an @lert)
/o set up an @lertC
Use the 8(:ect Naigator to display the @lerts area) ,ull do%n the Naigator menu and
choose Create) Click on the default name that is gien for the ne% alert !something like
@<=#/7" and rename itC +,PERV*+OR1ALERT
Bring up the ,roperty ,alette for this @lert and fill in the follo%ing propertiesC
TitleA Superisor @lert Message
0essageA =mployees may not superise themselesL
Alert 6t2leA S/8,
=utton + 3a1elA 8J
<eae the =utton ' 3a1el and the =utton 5 3a1el (lank
Default Alert 1uttonA Button *
<eae all of the other properties %ith their defaults and close the ,roperty palette)
Change the a(oe ?&EN:VAL*DATE:*TEM trigger on the SU,=#SSN item in the
=M,<8Y== data (lock toC
DECLARE
re6urn15"er6 N,MER/
E3*N
*% $:+,PER++N L :++N( T&EN
re6urn15"er6 :L +&O?1ALERT $9+,PERV*+OR1ALERT9(/
RA*+E %ORM1TR*33ER1%A*L,RE/
END *%/
END/

/he SH80$@<=#/ procedure calls up the specified alert and o(tains the return alue
!(ased on the (utton the user clicks on" to assign to a local aria(le called re6urn15"er6)
Belo% is an eBample of the @lert in actionC
In general, @lerts may proide seeral different (uttons for the user to click on) 9or eBample, to
confirm eBiting a form, a ,8S/E98#M trigger might inoke an K@re you sure you %ant to =BitK
@lert %ith KYesK and KNoK (uttons) 8r, to confirm deleting a record, a ,#=EC8MMI/ trigger
might inoke an K@re you sure you %ant ot delete this =mployeeMK @lert %ith KYesK and KNoK
(uttons) Based on the return$alert alue, either a commit or roll(ack might (e issued)
".5.# -opulate items !ith default values
/here are many cases %here default alues can (e suggested for certain data items (ased upon
alues already supplied in other data items) /he method here is to use a ,8S/EI/=M or 0H=NE
F@<ID@/=EI/=M trigger to populate another field, only if the other field is currently (lank) 9or
eBample, to populate the SU,=#SSN data item of the =M,<8Y== (lock (ased upon the
M>#SSN of the employeeIs department, the follo%ing 0H=NEF@<ID@/=EI/=M trigger code
might (e used on the DN8 data itemC
E3*N
*% :+,PER++N *+ N,LL T&EN
+ELECT 4ep5r6!en6.!Crssn
*NTO :e!p"o#ee.superssn
%ROM 4ep5r6!en6
?&ERE 4ep5r6!en6.4nu!7er L :e!p"o#ee.4no/
END *%/
END/

Note that the I9 statement uses :+,PER++N *+ N,LL to check to see if any alue has (een
supplied for SU,=#SSN) If nothing %as typed into the SU,=#SSN data item, then its alue is
NU<<) If the user types anything at all into the SU,=#SSN data item, then the I9 statement %ill
ealuate to false and no alue %ill (e suggested)
".5.6 Attaching functionalit2 to command 1uttons
Command (uttons can (e added on a form to carry out functions such as eBiting a form,
committing3saing changed records and so on) /he (asic command (utton o(:ect contains
properties for the (utton <a(el !the teBt proided on the (utton itself") @dditional properties
include isual attri(utes including the a(ility to display a (itmap image in place of the (uttonIs
normal appearance)
8nce a (utton has (een physically placed on a form, functionality is added (ut %riting a ?&EN:
,TTON:PRE++ED trigger) @s one might eBpect, this trigger eBecutes %hen the user clicks on the
(utton) So, for eBample, to create a (utton to eBit the form %hen the user clicks on it the ?&EN:
,TTON:PRE++ED trigger might look likeC
DECLARE
re6urn15"er6 N,MER/
E3*N
re6urn15"er6 :L +&O?1ALERT $9E.*T1ALERT9(/
*% $re6urn15"er6 L 5"er617u66in1( T&EN
E.*T1%ORM/
END *%/
END/

/he a(oe code assumes there is an @lert called =6I/$@<=#/ %ith t%o (uttonsC KYesK and
KNoK) If the user clicks on the first (utton !KYesK" then the =6I/$98#M procedure is called and
the form %ill eBit !close") If the user clicks on any other (utton, then the @lert %ill close and the
form %ill remain open)
".5.B -assing parameters 1et!een forms
/here are many occasions that re-uire the passing of data from one form to another) 8ne such
eBample is %hen %e -uery a certain record on one form and then %ish to call up another form
%ith the same record automatically retrieed) In general, data alues can (e passed (et%een
forms using ><8B@< aria(les !treat C><8B@< as a (lock aaila(le in all forms" or (y using
,arameter lists) In the eBample, (elo%, the parameter list features %ill (e used to demonstrate
ho% data can (e passed from one form to another)
9or this eBample, %e %il make use of t%o formsC @ (asic =M,<8Y== form %ith all fields and
the =M,<8Y==3D=,=ND=N/ master3detail form !created in a preious eBercise E the file
name should hae (een e!p4epn.8!7") /he idea is to place to (utton on the =M,<8Y== form
that %hen pressed, %ill call the =M,<8Y==3D=,=ND=N/ form and automatically -uery the
dependents for the employee (eing ie%ed on the =M,<8Y== form) /he main steps areC
8n the =M,<8Y== form, create a (utton and la(el it KAuery DependentsK)
Create a 0H=NEBU//8NE,#=SS=D trigger %ith the follo%ing code !comments are
enclosed in the code"C
DECLARE
HP DeA"5re p"1i4 5s 6he i4en6i8ier 8or 6he p5r5!e6er "is6 PH
p"1i4 P5r5!Lis6/
E3*N
HP +ee i8 6h56 p5r5!e6er "is6 5"re54# eFis6s. *8 so) 4es6ro# i6 PH
p"1i4 :L 3e61P5r5!e6er1Lis6$96!p45659(/
*% NOT *41Nu""$p"1i4( T&EN
Des6ro#1P5r5!e6er1Lis6$ p"1i4 (/
END *%/
HP Cre56e 5 8resh p5r5!e6er "is6 PH
p"1i4 :L Cre56e1P5r5!e6er1Lis6$96!p45659(/

HP A44 5 neG p5r5!e6er 6o 6his "is6 A5""e4 EMPLOYEE++N PH


HP AssiCn 6his p5r5!e6er 6he Aurren6 E5"ue o8 6he :++N 8ie"4 PH
A441P5r5!e6er$p"1i4) 9EMPLOYEE++N9) TE.T1PARAMETER) :++N(/

HP NoG run 5 neG 8or! A5""e4 9e!p4epn9 $!us6 7e in 6he s5!e PH
HP 4ireA6or# 5s 6he e!p"o#ee 8or! Ge 5re noG e4i6inC. PH
HP P5ss 5"onC 6he i4en6i8ier o8 our p5r5!e6er "is6 $p"1i4( PH
Run1Pro4uA6$%ORM+) 9e!p4epn9) +YNC&RONO,+) R,NT*ME)
%*LE+Y+TEM) p"1i4) N,LL(/
END/

Compile and sae this form)
No% open up the e!p4epn !=M,<8Y==3D=,=ND=N/" form)
Using the 8(:ect Naigator, create a ne% ,@#@M=/=# called =M,<8Y==SSN) /his
parameter %ill automatically (e assigned a alue (ased on the parameter list passed to the
form (y the a(oe #UN$,#8DUC/ procedure call)
Create a ne% trigger called 0H=NEN=0E98#MEINS/@NC=) /his trigger %ill eBecute
%heneer the form is first run)
DECLARE
HP DeA"5re 5 8or!s 7"oA0 i4en6i8er PH
7"01i4 "oA0/
E3*N
HP O765in 6he 7"oA0 *D o8 6he EMPLOYEE 7"oA0. This is 6he PH
HP M5s6er 7"oA0 in 6he e!p4epn !5s6erH4e65i" 8or!. PH
7"01i4 :L %in41"oA0$9EMPLOYEE9(/
*% NOT *41Nu""$7"01i4( T&EN
HP CheA0 6o !50e sure our p5r5!e6er h5s 5 E5"ue. *8 6his 8or! PH
HP Gere eFeAu6e4 7# i6se"8) 6hen 6he p5r5!e6er Gi"" 7e nu"". PH
HP *8 6his 8or! is A5""e4 8ro! EMPLOYEE 6hen 6he p5r5!e6er Gi"" PH
HP 7e p5sse4 5"onC 5n4 5ssiCne4 6o :PARAMETER.e!p"o#eessn PH
*% $:PARAMETER.e!p"o#eessn is no6 nu""( T&EN
HP +inAe Ge h5Ee 5 p5r5!e6er) use i6 6o 5"6er 6he ?&ERE C"5use PH
HP proper6# so 6h56 i6 7eAo!es ?&ERE ssnL:PARAMETER.e!p"o#eessn
PH
+ET1LOC21PROPERTY$7"01i4)DE%A,LT1?&ERE)9ssnL9 SS
:PARAMETER.e!p"o#eessn(/
HP N5EiC56e 6o 6he EMPLOYEE 7"oA0 5n4 eFeAu6e 5 Ouer#
5u6o!56iA5""# PH
3O1LOC2$9EMPLOYEE9(/
E.EC,TE1>,ERY/
END *%/
END *%/
END/

Compile and sae the e!p4epn form)
No% run the =M,<8Y== form, -uery an employee record and click on the KAuery
DependentsK (utton) /he e!p4epn form should appear %ith the dependents automaticaly
-ueried)
/he a(oe eBamples are :ust a fe% of the great many things one can do %ith 8racle 9orms) /he
onEline help that ships %ith 9orms ; contains many eBample forms and eBample pieces of code
!see the 9orms ,<3SA< #eference" that go far (eyond the simple techni-ues demonstrated
a(oe)
".9 /@erciseA -rocedures and Triggers
/he follo%ing are some suggested eBercises using arious com(inations of triggers and
proceduresC
Create an 8racle Se-uence !using SA<G,lus" that %ill generate ne% Department
num(ers for the D=,@#/M=N/ ta(le) @dd the re-uisite ,#=EINS=#/ trigger code to
insert a uni-ue DNUMB=# each time a ne% department record is created)
Create an alert that displays a %arning if an employeeIs salary is larger than their
superisorIs) In a 0H=NEF@<ID@/=EI/=M trigger, run a -uery to check if the
employeeIs salary is greater than their superisorIs and if so, sho% the alert)
,ut in some alidation code that %ill check to make sure if a D=,=ND=N/ is a S8N or
D@U>H/=#, then the D=,=ND=/NIs BD@/= must (e less than the =M,<8Y==Is
BD@/=) If this is not the case, sho% an alert)
@fter you learn ho% to create #eports !see the neBt section" create a simple
D=,@#/M=N/ data entry form %ith a (utton that, %hen pressed, %ill run a report for
that department (y passing along the DNUMB=# as a parameter)
+0. Oracle Reports =asics
0e no% turn our attention to another Deeloper tool called 8racle #eports) /he 8racle #eports
Builder allo%s the deeloper to create sophisticated reports in a ariety of layouts and contains
many customi&ation features) In this section, the (asic steps for creating a simple report and a
MasterEDetail report %ill (e gien)
+0.+ 6tarting Developer tools under indo!s "#$"%$&T$'000
@ typical installation of Deeloper creates seeral folders under the Start ,rograms menu) /he
main items for the 8racle #eports ;i programs are found under the menu itemC Or5A"e Repor6s
6i and include the follo%ing itemsC
/o run 8racle #eports Builder under 0indo%s 123143N/3+555, click on the +65r6 :B
ProCr5!s :B Or5A"e Repor6s 6i :B Repor6 ui"4er menu item)
@s %ith 8racle 9orms, an initial screen %ill appearC
Click on the Cancel (utton to proceed directly to the 8(:ect Naigator)
+0.' The Oracle Reports O1:ect &avigator
/he 8racle #eports main screen is called the 8(:ect Naigator !similar to 8racle 9orms" and can
(e seen in the follo%ing figureC

/he main sections of the 8(:ect Naigator areC
*) Data 0odel E Contains information a(out -ueries used for a report)
+) 3a2out E Contains information a(out ho% a report is formatted including headers,
footers, margins, fonts, etc)
.) -arameter Form E Contains information a(out the initial screen that is displayed %hen a
form first runs)
7) Report Triggers E ,<3SA< code that can (e eBecuted (efore, during or after a report has
(een eBecuted)
@s %ith 8racle 9orms, the first step in using 8racle #eports is to Connect to an 8racle serer)
/his is accomplished (y pulling do%n the %i"e menu and selecting the ConneA6 menu item)
9ill in your 8racle Username and 8racle ,ass%ord !press the ta( key to moe (et%een the
fields")
9or the D56575se field, type in the serice name for your 8racle data(ase) 9or eBample, if you
are using ,ersonal 8racle <ite, the D56575se: %ould (e ODC:POL*TE) Contact your system
administrator to learn the serice name for your 8racle data(ase and proide that information in
the D56575se: field)
Click on the ConneA6 (utton to complete the connection !Under some ersions of UNI6, the
(utton is la(eled O2") If the user name or pass%ord is mistyped or incorrect, the dialog (oB %ill
(e reEdisplayed) Be sure to proide your 8racle username and pass%ord !not your UNI6 host
pass%ord")
+0.5 Creating Reports in Oracle Reports
Creating reports follo%s a 7 step processC
*) Define the Data Model E /his step specifies %hich -ueries should (e run on the data(ase
including ho% multiple -ueries are related and ho% they are grouped) /his step must (e
done (y hand) Aueries that hae (een created else%here can (e imported into 8racle
#eports)
+) Define the <ayout E /his step specifies the layout of the report including the oerall
orientation of -uery results and the suppression of repeating groups) /here are a num(er
of default report layouts that can automatically (e applied to a data model)
.) Create and3or Customi&e the ,arameter 9orm E If some user input is re-uired in order to
run the report, then a parameter form must (e customi&ed) @ll reports hae a default
parameter form)
7) !optional" Create any triggers or program units that %ill (e eBecuted %ith the report)
8racle #eports .)5 and ;)5 support a %i&ard that takes the deeloper through all of these steps)
/his approach %ill (e demonstrated neBt)
+0.9 Creating a 6ingle<Ta1le Report
In this section, %e go through the steps for creating a report that ie%s the contents of a single
ta(le)
+0.9.+ 6pecif2 the Data 0odel and 3a2out
/he first step is to specify the data model and layout of the report) 0e %ill use the #eport %i&ard
to accomplish this) 9rom the 8(:ect Naigator, pull do%n the Too"s menu and choose Repor6
GiJ5r4...
/he first screen for the reports %i&ard %ill appear prompting for the style of the report and for
the #eport /itle)
/he eight layout choices includeC
*) /a(ular E Simple ta(le %ith column headings at the top and data records in consecutie
ro%s (elo%)
+) 9ormE<ike E Column headings on the left hand side %ith data alues neBt to them on the
right)
.) Mailing <a(el E No column headings and records grouped into repeating sections si&ed to
print directly to a sheet of mailing la(els)
7) 9orm <etter E @r(itrary placement of data items %ithin a teBt (ody)
2) >roupE<eft E @ Master3Detail3Detail style %here the master records are grouped on the
left hand side %ith details to the right)
;) >roupE@(oe E @ Master3Detail3Detail style %here the master records appear a(oe the
detail records)
D) MatriB E Column la(els on (oth the left and the top %ith data alues in the middle)
Similar to a spreadsheet)
4) MatriB %ith >roup E @ com(ination of Master3Detail !>roupE@(oe" and MatriB)
9or this report, type in K=mployee #eportK as the title, choose the Ta1ular <ayout and click on
the NeBt (utton)
/he neBt step is to specify the /ype of -uery the report %ill (e (ased on) /he t%o main choices
are a SA< -uery and an 8racle =Bpress !8<@," -uery) 98r this eBample, choose the KSA<
StatementK and click the neBt (utton)
/he neBt step is to specify the -uery that %ill form the (asis of the report) In this case, type the
follo%ing -uery in the SA< Auery StatementC teBt (oBC
+ELECT %NAME) LNAME) ++N) +ALARY) DNO
%ROM EMPLOYEE /
/hen click on the NeBt (utton to moe to the neBt step) NoteC If you did not Connect to the
data(ase, you %ill (e prompted for the Username, ,ass%ord and Data(ase)
In the neBt %i&ard dialog (oB, specify %hich columns from the SA< Auery %ill (e displayed in
the report output) /o specify all columns, click on the dou(le right arro% to (ring all of the
/vailable Fields to the Dis$layed Fields side)
Click on the NeBt (utton to moe to the neBt dialog (oB)
In the neBt step, aggregate functions can (e applied to the fields on the report) 9or this eBample,
%e %ill display the aerage salary as %ell as a count of employees) Highlight the S@<@#Y field
and click on the /verage (utton) /hen highlight the SSN field and click on the Count (utton)
/he neBt dialog (oB allo%s you to change the field la(els and display %idths for arious fields in
the report)
@s a final step, a design template can (e applied to the report) Design templates include
specifications for fonts, colors and layout of the report) 9or this eBample, choose the Corporate +
template and then click on the 9inish (utton)
@fter a short delay, the #eports <ie ,reie%er %ill appear sho%ing the eBecuting report)
It is possi(le to make changes to the layout of the report (y using the tool palette on the left hand
side) 0hen you hae finished touching up the report, close the #eports <ie ,reie%er and the
8(:ect Naigator %ill reappear) /o ie% the report again, pull do%n the ProCr5! menu and
choose Run Repor6)
+0.9.' 6aving, Generating and Running the Report
/o sae a report, pull do%n the %i"e menu and choose the +5Ee option) /his is similar to saing
an 8racle 9orm) /he source code for 8racle #eports are saed in files %ith an .r48 file name
eBtension) Compiled and generated reports are saed %ith a .rep eBtension)
9or this eBample, sae this report as e!p"o#ee.r48
8nce the report is saed, it can (e run (y pulling do%n the VieG menu and choosing the Run6i!e
PreEieG menu item)
@s the report is running, an @ctiity screen %ill appear giing an indication of the processing
that is currently under%ay)
/he @ctiity %ill go through . stagesC Client @ctiity %hile the -ueries are prepared, Serer
@ctiity %hen the -ueries are eBecuted and finally Client @ctiity as the report is formatted)
0hen this is finished, the report %ill appear on screen)
+0.# /@erciseA Creating a Report
9or this eBercise, create a report to display all of the records in the D=,@#/M=N/ ta(le
including a :oin %ith the =M,<8Y== ta(le to display the last name of the department manager)
Start up the #eport %i&ard) Use KDepartmentsK as the title and enter the follo%ing SA<
Statement as the -ueryC
+ELECT 4nu!7er) 4n5!e) !Crs65r6456e) !Crssn) "n5!e
%ROM 4ep5r6!en6) e!p"o#ee
?&ERE 4ep5r6!en6.!Crssn L e!p"o#ee.ssn/
Summari&e the report %ith an aerage of the Salary column)
Sae the ne% report as 4ep5r6!C.r48
/he finished report should look something like the follo%ingC
+0.6 Creating a 0aster<Detail Report
In this section, the steps for creating a report that ie%s the contents of t%o ta(les in a MasterE
Detail !one to many" relationship are gien) /o aoid any confusion, Sae and Close any eBisting
reports (efore proceeding)
+0.6.+ 6pecif2 the 0aster<Detail Data 0odel and 3a2out
@s in the singleEta(le report, %e (egin (y specifying the data model and layout for the MasterE
Detail report (y using the #eport 0i&ard)
Inoke the %i&ard (y pulling do%n the Too"s menu and choosing Repor6 GiJ5r4) 9ollo%ing
these steps to complete the %i&ardC
*) 9or the #eport /itle useC Departments and =mployees
+) 9or the +e$ort Style, choose .rou$ /bove)
.) Choose a SA< Statement and the SA< AueryC
7) +ELECT DNAME) %NAME) LNAME) +ALARY
2) %ROM DEPARTMENT) EMPLOYEE
;) ?&ERE DEPARTMENT.DN,MER L EMPLOYEE.DNO

D) Designate the DN@M= field as a .rou$ field !<eel *") Click on the DN@M= field and
then on the right arro% (utton)
4) Display all fields in the report)
1) Choose @erage Salary as a Totals field) Click on the S@<@#Y field and then click on
the @erage (utton)
*5) /ouch up the fields and la(els as follo%sC
**) %ie"4s 5n4 To65"s L57e"s
*+) DNAME Dep5r6!en6 N5!e
*.) %NAME %irs6 N5!e
*7) LNAME L5s6 N5!e
*2) +ALARY +5"5r#
*;) AEC+ALARYperDNAME AEer5Ce:
*D) AEC+ALARYperRep AEer5Ce %or 5"" E!p"o#ees:

*4) Use the Corporate + template)
9rom this point, click on 9inish to display the <ie #eport ,reie%C
+0.6.' 6aving, Generating and Running the 0aster<Detail Report
@t this point, the report can (e saed and =Becute !#un")
9or this eBample, sae the MasterEDetail report as 4ep61e!p.r48
+0.B /@erciseA Creating a 0aster<Detail Report
In this eBercise, a masterEdetail report %ill (e created that displays each =M,<8Y== record,
%ith a group of D=,=ND=N/ (elo%)
Create a ne% #eport using the %i&ard) >ie a titleC K=mployees and /heir DependentsK
Select the >roup @(oe report type and use the follo%ing SA< -ueryC
+ELECT e!p"o#ee.8n5!e) e!p"o#ee."n5!e)
e!p"o#ee.7456e A+ E!p456e)
e!p"o#ee.seF A+ E!p+eF) 4epen4en6.4epen4en61n5!e)
4epen4en6.7456e A+ Dep456e)
4epen4en6.seF A+ Dep+eF) 4epen4en6.re"56ionship
%ROM e!p"o#ee) 4epen4en6
?&ERE e!p"o#ee.ssn L 4epen4en6.essn/
Note the use of column aliases !@S" to differentiate the (date and seB columns)
Select the "n5!e) 8n5!e) e!pseF) e!p7456e fields as the K>roup *K fields) /hese
should all (e from the =M,<8Y== ta(le)
Select all fields to display in the report and do not select any fields for the calculate totals
step)
/ouch up the report in the lie preie%er to fit on one screen)
Sae the report as fileC e!p4epen.r48
/he report should look similar to the follo%ing %hen completedC
+0.% -arameter forms in Oracle Reports
9or each of the 8racle #eports eBamples thus far, all of the records in the respectie ta(les %ere
returned as part of the report) Ho%eer, there may (e situations %here only a su(set of the
data(ase records are re-uired) In these cases, %e %ould like to prompt the user to enter some
criteria that can (e used to filter the report) In 8racle #eports, a ,arameter Form fulfills this
role)
,arameter forms are simple 8racle forms that prompt the user for some information (efore a
report is eBecuted) /his information can (ecome part of the 0H=#= clause in the report -uery
and is used to filter the records returned in the report) ,arameters in 8racle #eports can either (e
filled in (y the user on a parameter form or can (e filled in automatically (y passing the
parameters in from another 8racle 9orms form !see the eBample of parameter passing in the
preious section on 8racle 9orms")
In the follo%ing eBample, a simple parameter form is automatically created (y 8racle #eports to
restrict a -uery on the =M,<8Y== ta(le (y sho%ing only employees in a gien department
num(er !DN8" supplied (y the user)
*) Create a ne% report using the report %i&ard) Specify K=mployeesK as the report title and
use a /a(ular report layout)
+) Use the follo%ing SA< -uery eBactly as %ritten) Note the use of the full colon in the
0H=#= clause)
-. +ELECT P
4. %ROM e!p"o#ee
'. ?&ERE e!p"o#ee.4no L :DNO1PARAMETER/
In the a(oe -uery, CDN8$,@#@M=/=# is the name of a run time parameter) 0hen the
report is eBecuted, the user %ill supply a alue for this parameter thus completing the
0H=#= clause for the -uery)
Clicking on the NeF6 (utton %ill produce the follo%ing alertC
;) Choose all of the columns !fields" for display in the report) Do not choose any fields for
summary information)
D) 0hen the report %i&ard is finished, the report and parameter form !(ased upon the
parameters gien in the SA< -uery" %ill (e created) @s the lie preie%er is running, the
ne% parameter form %ill (e displayedC
9or this eBample, choose department 2 !type the num(er 2 in the field" and press the enter
key) Notice that only employees in department 2 are displayed in the lie preie%er)
+0.%.+ =uilding a Custom -arameter Form
@t this point, %heneer the report is run, a default parameter form sho%ing the
DN8$,@#@M=/=# %ill (e displayed) Ho%eer, it is possi(le to create a custom parameter
form as sho%n in the follo%ing steps)
1. S%itch to the 8(:ect Naigator, pull do%n the Too"s menu and choose the P5r5!e6er
%or! ui"4er) /his is sho%n (elo%C
@ num(er of (uiltEin system parameters are displayed and can (e highlighted (y clicking
on them %ith the right mouse (utton) Note that at the (ottom of this list is the
DN8$,@#@M=/=# and it should already (e selected)
2. 9or this eBample, in addition to the DN8$,@#@M=/=# also select the D=S/Y,=,
D=SN@M= and C8,I=S parameters) /hen click the O2 (utton) @ ne% parameter form
%ill (e automatically created as sho%n (elo%)
3. Sae the report as e!pp5r5!.r48) 0hen the form is eBecuted !pull do%n the ProCr5!
menu and choose Run Repor6", the ne% parameter form %ill (e displayed as sho%n
(elo%C
In the a(oe eBample, * copy of the report %ill (e sent to the printer named KH, <aser?et
Series IIK) /he report %ill only sho% employees in department 7)
8ther Destination /ype options include Screen, 9ile and =Email)
,arameter forms can (e highly customi&ed to include list of alues user prompts and other userE
friendly features) /he techni-ues used for 8racle 9orms can (e easily applied to parameter forms
in 8racle #eports)
++. Creating 0enus in Oracle Forms
NoteC /he properties for Menus in different ersions of 9orms seem to change %ith eery minor reision) ,lease
keep in mind, the ersion of 9orms you are %orking %ith may differ slightly from %hat is sho%n in this tutorial)
/hus far, %e hae coered the (asics for creating forms and reports using 8racle Deeloper)
Some adanced features such as using stored procedures !,rogram Units" hae also (een
introduced)
In a complete Data(ase System, the applications consist of many forms and reports that might (e
used (y a num(er of users) @ccess to forms and reports is typically accomplished through menus)
In 8racle Deeloper, menus can (e created to guide users into forms and reports of interest)
Menus are designed as part of the 8racle 9orms designer)
In 8racle 9orms, eery form runs %ith one of the follo%ingC
*) /he default menu %hich includes the @ction, =dit, Block, 9ield, #ecord, Auery, 0indo%,
Help menus) /he structure of the default menu cannot (e changed)
+) @ custom menu that you define as a separate module and then attach to the form for
runtime eBecution)
.) No menu at all)
/he default menu is part of the form module) Ho%eer, custom menu modules are separate from
form modules) So, %hen a singleEform application runs using a custom menu, there %ill (e t%o
eBecuta(le filesC
an .%M. form module
an .MM. menu module
In a multiEform application, Multiple forms can share the same menu, or each form can inoke a
different menu)
/o eBplicitly specify the default menu in 9orms ;iC
*) Select the name of the form3module in the
8(:ect Naigator) Click %ith the right mouse
(utton and choose Proper6ies from the popE
up menu)
+) In the 0enu 0odule property, type
D=9@U</NSM@#/B@# to get the default
menu and a (utton (ar (elo% it)
If you %ant the form to run %ithout a menu,
leae the 0enu 0odule property (lank)
/o eBplicitly specify the default menu in
older ersions of DeeloperC
*) Select the name of the form3module
in the 8(:ect Naigator) Click %ith
the right mouse (utton and choose
Proper6ies from the popEup menu)
+) In the 0enu 0odule property, type
D=9@U</)
If you %ant the form to run %ithout
a menu, leae the 0enu 0odule
property (lank)
/he default menu is suita(le for control oer the current form (eing eBecuted, ho%eer, it does
not contain custom menu items pertaining to a specific application) In the follo%ing section, the
steps to create a custom menu structure %ill (e introduced)
++.+ The Oracle Forms 0enu (ierarch2
/he 8racle 9orms menu hierarchy contains three o(:ect categoriesC
1. 0enu modules E <ike form modules, a menu module can contain its o%n items !menus
and menu items", program units and other o(:ects)
2. 0enus E Including main menus, indiidual menus, and su(menus
3. 0enu items
++.' Creating a Custom 0enu
Designing a custom menu re-uires fie (asic stepsC
*) Creating a menu module
+) Creating menus and menu items
.) @ssigning commands to menu items
7) Saing and generating the menu module
2) @ttaching a menu module to a form
++.'.+ Creating a 0enu 0odule
/he first step in designing a custom menu is to create a menu module) /here are seeral %ays to
create a ne% menu moduleC
*) ,ull do%n the %i"e menu, highlight the NeG menu item and then select the Menu menu
item)
+) Naigate do%n to the 0enus su(tree in the 8(:ect Naigator, pull do%n the N5EiC56or
menu and choose the Cre56e menu item)
@ ne% menu module %ill (e created and a default name %ill (e assigned) Click on this default
menu name and assign it a more meaningful name such as !#!enu)
++.'.' Creating menus and menu items
Creating menus and menu items can (e accomplished using the 0enu /ditor) /o actiate the
menu editor, first highlight the name of your menu, then pull do%n the Too"s menu and click on
the Menu E4i6or item)
/he main menu items go across the top of the screen) /o add a ne% menu across the top, click on
the =uild Across icon on the tool(arC
Su(Emenus and menu items appear (elo% each one) /o add a ne% su(Emenu or menu item, click
on the =uild Do!n icon on the tool(arC
/o change the name of a menu or menu item, click in the menu o(:ect and oerE%rite the name
that appears there)
Using the icons, create and reEla(el seeral menus and menu items to appear as follo%sC
8nce this is completed, the (asic menu structure %ill (e in place) /he neBt step is to add
functionality to each menu item)
++.'.5 Assigning Commands to 0enu ,tems
/he default (ehaior for clicking on any menu is for that menuIs items to (e displayed) /he neBt
step is to assign commands to each of the menu items so that %hen a user clicks on a menu item,
a form, report or SA<G,lus script is eBecuted)
/o assign a command to a menu itemC
*) Select the desired menu item in the Menu =ditor) Click %ith the right mouse (utton and
choose Proper6ies to (ring up the properties of that menu item)
NoteC /he popEup menu may sho% Proper6# P5"e66e
+) /he properties of interest here areC
o Command t2peA Indicates %hat kind of command should (e runC 9orm, #eport,
,<3SA<, other menu) In general, the ,<3SA< command type is used to launch
8racle 9orms and 8racle #eports) /he specific 9orm and #eport command types
are maintained for (ack%ards compati(ility only)
o 0enu ,tem Code !or Command Te@t"C /he teBt of the actual command to run)
/o run a form from the menu item, choose Command T2pe ,<3SA<) Dou(le click on the
0enu ,tem Code !or Command Te@t" property and type in the ,<3SA< editorC
E3*N
R,N1PROD,CT$%ORM+) 9e!p"o#ee9) +YNC&RONO,+) R,NT*ME)
%*LE+Y+TEM) 99) 99(/
END/

#UN$,#8DUC/ is a ,<3SA< (uiltEin function that runs another 8racle Deeloper
product) /he parameters to #UN$,#8DUC/ areC
o ,roductC 98#MS or #=,8#/S
o Document3ModuleC name of the file in single -uotes
o Command ModeC SYNCH#8N8US or @SYNCH#8N8US
o =Becuta(le ModeC #UN/IM=
o <ocationC 9I<=SYS/=M or D@/@B@S=
o ,arameter <istC @ list of parameters to pass to the form or NU<<
o DisplayC /ype of display to sho% the product on) Can (e NU<< to indicate the
current display) NoteC Starting %ith 9orms 2)5, !%hich uses ,<3SA< ersion +)."
you may not use NU<< in the call to #UN$,#8DUC/ here) You must use t%o
single -uotes !indicating a &ero length character string")
Compile this code (y clicking on the Co!pi"e (utton) /hen close the ,<3SA< editor)
#epeat the a(oe steps for each menu item)
@ final menu item should (e created to =Bit the application) Call the menuC /@it Application and
enter the follo%ing ,<3SA< codeC
E3*N
E.*T1%ORM/
END/
=6I/$98#M is a (uiltEin procedure that eBits the current form)
@ Fie% of the complete !#!enu is sho% (elo%C
++.'.9 6ave and Generate the 0enu 0odule
@t this point, all of the menu structure has (een created and commands for each menu item hae
(een specified) /he menu module must no% (e saed to a file !%ith a .!!7 eBtension" and
>enerated or Compiled)
/o sae the menu module, make sure the name of the menu is highlighted, pull do%n the 9ile
menu and choose the +5Ee menu item) Specify a file name %ith a .!!7 eBtension) /his is the
Ksource codeK for the menu) 9or this eBample, use the file name !#!enu.!!7)
/o generate or compile the menu module, pull do%n the %i"e menu, click on the
A4!inis6r56ion menu item and choose 3ener56e from the flyout menu) In some ersions of
the 9orms Builder, the menu item might (e called Co!pi"e %i"e) >enerating or compiling a
menu module results in a file %ith a .!!F eBtension) In this eBample, the generated menu module
(ecomesC !#!enu.!!F
++.'.# Attaching a 0enu 0odule to a Form
@ custom menu must (e attached to a form in order to (e displayed) /ypically, a form %ith no
data entry on it is used as the main screen to host the custom menu)
/he follo%ing steps are different depending on the ersion of 9orms (eing used)
For Oracle Forms version 9.# For Oracle Forms version 6i
*) Create a ne% form %ith no (locks or
items on it) ,ull do%n the %i"e menu,
select NeG and then select %or!)
+) Display the properties for the form and
set the 0enu 0odule property to the file
name of the menu module !see preious
step") 9or this eBample, it should (eC
!#!enu.!!F
.) Make sure the 7se File property is set to
True)
7) Sae the form as file 7"5n08or!.8!7 and
generate this form) !Note you should sae
the this form in the same drie and
directory as your menuIs .!!F file")
*) Create a ne% form %ith no (locks or
items on it) ,ull do%n the %i"e menu,
select NeG and then select %or!)
Click on the name of the form in the
o(:ect naigator and rename it as
7"5n08or!)
+) 8pen up the property palette for the
form and set the follo%ing propertiesC
0enu 6ourceC 9ile E /he menu
information %ill come from a file)
0enu 0oduleC !#!enu.!!F E /he file
name of the compiled menu module)
You may hae to gie the eBplicit path
to this .!!F file) 9or eBample, if this file
is on your @C drie then type
5:K!#!enu.!!F
2) #un the form)
.) Sae the form as file 7"5n08or!.8!7
and generate this form) !Note you should
sae the this form in the same drie and
directory as your menuIs .!!F file")
7) #un the form)
Notice that %hen running this (lank form, the default menu is replaced (y the !#!enu Menu
Module)
/he (lank form that is used to host the menu need not (e (lank) You may %ish to use the <ayout
=ditor to place some graphics and a title of the application on the canas)
@nother use for this space %ould (e for some simple instructions the user can read to get started
%ith the data(ase application)
+'.+ Graphics and the Chart i)ard
/he 8racle >raphics Designer can (e used to create a ariety of graphs and charts including (ar
charts, line plots and pie graphs) /ypically, a graphic o(:ect designed %ith 8racle graphics is
included on either a form or a report) /he 8racle 9orms Designer includes a %i&ard that %ill
automatically construct an 8racle graphic o(:ect using data from an eBisting data (lock)
+'.+ Adding a Chart to a Form
In the follo%ing eBample, an 8racle >raphics o(:ect %ill (e added to a (asic Master3Detail form)
@s a first step, create a ne% Master3Detail form using the D=,@#/M=N/ ta(le !DNUMB=#
and DN@M= columns" as the master (lock and the =M,<8Y== ta(le !9N@M=, <N@M=,
DN8 and S@<@#Y columns" as the detail (lock) /he chart added to this form %ill compare the
S@<@#Y alues of the employees in a gien department)
@n eBample layout is sho%n (elo% !note the DN8 column in the =M,<8Y== (lock is not
displayed"C
Be sure to sae this form on disk (efore moing on to create the chart)
/o start the Chart 0i&ard, click on any open area of the form %hile in the layout ie%) /hen pull
do%n the Too"s menu and choose the Ch5r6 ?iJ5r4) /he first screen of the Chart 0i&ard %ill
appear as (elo%C
Click the NeF6 (utton to moe to the neBt step in the %i&ard) In the neBt step, choose the type of
chart !and su(type if applica(le" to (e created) 9or this eBample, choose Pie and Dep6h as sho%n
(elo% and click on the NeF6 (uttonC
/he neBt step is to choose %hich data (lock the chart should (e (ased on) @ll of the data (locks
on the current form should (e displayed) 9or this eBample, choose the =M,<8Y== (lock as
sho%n (elo% and click on the NeF6 (uttonC
/he neBt step is to choose %hich field in the data (lock should (e used for the 6E@Bis !or
category la(els" for the chart) 9or this eBample, choose the <N@M= field as sho%n (elo% and
click on the NeF6 (uttonC
/he neBt step is choose %hich field in the data (lock should (e used as the YE@Bis alues) 9or
this eBample, choose the S@<@#Y field as sho%n (elo% and click on the NeF6 (uttonC
In the last step for the %i&ard, the ne% 8racle >raphics o(:ect must (e saed in a file) >ie a
ne% name for the graphics o(:ect such as e!p"o#ee.oC4 as sho%n (elo% and click on the
%inish (uttonC
@t this point, the graphics o(:ect %ill (e created and placed on the form) Use the mouse to moe
and reEsi&e the o(:ect as desired) 0hen finished, sae the form again and run it) /he follo%ing
figure sho%s the form as it is running) Notice that %hen the form is -ueried and as ne%
department records are retrieed, the employees and their associated salaries for that department
are displayed in the pie chart)
0hen copying forms files that use 8racle >raphics, (e sure to also copy the associated graphics
o(:ect files) /hese files typically hae an .O3D file eBtension)
+'.' /@erciseA Adding a Chart to a Report
9or this eBercise, add a (ar chart depicting the employees salaries to a report sho%ing additional
=mployee data)
Start (y creating a (asic ta(ular #eport making use of the follo%ing -ueryC
+ELECT %NAME) LNAME) DNO) +ALARY
%ROM EMPLOYEE
/he (asic report is sho%n (elo%C
NeBt, add the Chart using the Chart %i&ard) Specify KSalariesK as the chart title, and use a Bar
chart style %ith KDepthK as the su(Etype)
9or the 6 @Bis, choose <N@M= and for the Y @Bis choose S@<@#Y)
Choose to place the chart at the end of the report and gie the chart o(:ect the name Krepsal)ogdK)
ImportantC Make sure that the chart o(:ect !the )ogd file" and the report file are in teh same
directory) By default chart o(:ects may (e stored in another location) If they are not together, you
%ill get an error such as K#eports is una(le to find the chart o(:ectK)
Belo% is the final output of the report %ith the em(edded 8racle >raphics chart o(:ectC
+5. Oracle 6chema =uilder
/he 8racle Schema Builder proides an easy to use graphical user interface for defining and
modifying ta(les, ie%s and other schema o(:ects)
/o run the Schema Builder, choose it from the 8racle menu) @s %ith most 8racle deelopment
tools, the first step %ill (e to connect to the data(ase) /he Connect dialog (oB %ill appear as
(elo%C
,roide a alid username, pass%ord and connect string !Host string" and click on the ConneA6
(utton to esta(lish a connection to the data(ase)
/he main Schema Builder screen %ill appearC
+5.+ Creating &e! 6chema O1:ects
Creating a ne% ta(le is a straight for%ard process) 9irst, pull do%n the +Ahe!5 menu and choose
the Cre56e T57"e menu item) @ small menu %ill appear) Choose T57"e) /he mouse pointer %ill
change to an arro% %ith a N sign) Click in the open space of the Schema Builder main screen and
the ne% ta(le %ill (e created)
Note that the ne% ta(le is gien a default name !TALE1" and it contains seeral eBamples
columns)
/o change the name of the ta(le, click on the current name and type oer it %ith a ne% name) Do
not use spaces in the ta(le name) 0hen finished, press =nter or #eturn to set the ne% name for
the ta(le)
/o change the name of a column, click on a column name and type oer the eBisting name)
/o add more columns to the ta(le, simply click the lo%er right hand corner of the ta(le display
and drag it do%n%ards) @dditional columns %ill appear %ith their default names)
/o change the data type and other characteristics of columns, dou(le click on the column name)
/he Define Column dialog (oB %ill appear) Highlight the column you %ish to modify and
change its datatype and other options on the right hand side) In the figure (elo%, the N@M=
column has (een changed to F@#CH@#!+5" and a N8/ NU<< constraint has (een added (y
checking off the ReOuire4 check(oB)
In the follo%ing figure, the CUS/8M=#ID column has (een designated as the key (y checking
off the Pri!5r# 2e# and ,niOue check (oBes)
In the follo%ing figure, each of the columns in the CUS/8M=# ta(le hae (een definedC
8nce each of the columns has (een renamed and defined, the ta(le must (e saed in the
data(ase) /o see the SA< statements that %ill (e sent to the data(ase serer, pull do%n the
+Ahe!5 menu and choose the +hoG +>L menu item)
@t this point, the SA< statements that %ill (e used to create the schema can (e saed into a teBt
file for future use) /o sae the SA< statements, pull do%n the %i"e menu and choose +5Ee +>L)
@ standard %indo%s file sae dialog (oB %ill appear) /he default file eBtension for SA< files is
.sO"
/o commit the schema in the data(ase, either click on the Co!!i6 (utton in the +hoG +>L dialog
(oB or, from the main Schema Builder screen, pull do%n the +Ahe!5 menu and choose the
Co!!i6 +Ahe!5 menu item) @ dialog (oB %ill appear sho%ing the progress)
/o reie%, a typical Schema Builder session %ould consist of adding ne% ta(les to a schema
using the Cre56e T57"e menu item on the +Ahe!5 !enu) Columns in ta(les can (e defined (y
dou(le clicking on the ta(le icons) 8nce all of the ta(les hae (een defined in the Schema
Builder main screen, sae off the SA< to a file and then commit the schema in the data(ase)
+5.' Displa2ing /@isting 6chema O1:ects
If the schema has some ta(les or ie%s already defined, these can (e displayed (y pulling do%n
the D565 menu and choosing the +e"eA6 D565 T57"es menu item) @ dialog (oB %ill appear
displaying the aaila(le ta(les)
/o include a ta(le in the Schema Builder main screen, highlight a ta(le and click on the *nA"u4e
(utton) /he ta(le should appear on the main screen and the name of the ta(le %ill (e grayed out
in the dialog (oB)
In this eBample, the =M,<8Y== and D=,@#/M=N/ ta(les %ere included in the main screen)
0hen all of the desired ta(les hae (een displayed, click on the C"ose (utton to close the dialog
(oB) Belo% is the resulting main screen after the =M,<8Y== and D=,@#/M=N/ ta(les %ere
addedC
+5.5 Adding Relationships 1et!een Ta1les
8nce the ta(les hae either (een created or displayed in the Schema Builder main screen,
relationships (et%een ta(les can (e defined) In this eBample, the DNUMB=# column of the
D=,@#/M=N/ ta(le is related to the DN8 columns in the =M,<8Y== ta(le) /he DNUMB=#
column in D=,@#/M=N/ must (e defined as a ,rimary Jey)
/o create the appropriate constraints for this relationship, pull do%n the +Ahe!5 menu and
choose the De8ine Re"56ionship menu item)
@ dialog (oB %ill appear %ith spaces for the 9oreign Jey and ,rimary Jey) 9ill these in as
appropriate for the relationship) In this eBample, the 9oreign Jey is =M,<8Y==)DN8 and the
,rimary Jey is D=,@#/M=N/)DNUMB=# as sho%n in the figure (elo%C
Click the O2 (utton to confirm the relationship) /he display %ill then change) @ line %ill appear
linking the ,rimary Jey and 9oreign Jeys)
8nce again, Schema Builder proides a ie% of the SA< that %ill (e used to create the 9oreign
key constraints that %ill implement the relationship in the data(ase schema) /o see the SA<, pull
do%n the +Ahe!5 menu and choose the +hoG +>L menu item)
@s (efore, the SA< statements to create the foreign key constraints can (e saed to a file using
the %i"e menu and +5Ee +>L menu item)
9inally, to commit the changes to the data(ase, pull do%n the +Ahe!5 menu and choose the
Co!!i6 +Ahe!5 menu item)
/he neBt time (oth D=,@#/M=N/ and =M,<8Y== are displayed in Schema Builder, the
relationship %ill automatically appear)
,lease feel free to use these tutorials for your o%n personal use, education, adancement,
training, etc) Ho%eer, I kindly ask that you respect the time and effort I hae put into this %ork
(y not distri(uting copies, either in %hole or in part, for your personal gain) You may not under
any circumstances do%nload, cache or host copies of these tutorials on your o%n serers) Use of
these tutorials for commercial training re-uires a special arrangement %ith the author or authors)
@ll material Copyright *11DE+55* #) Holo%c&ak

You might also like