Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

December 2001 • Nr 9, Årgang 2 • ISSN 1600-5147 • Pris: kr. 125,00 ex moms • www.OracleEkspert.

dk
Bemærk: Dette tidsskrift må kun distribueres i
virksomheder med OracleEkspert medlemskab

#9
OUGDK 23 RELATIONSDATABASENS BEGRÆNSNINGER 4
Rune Mørk
OUGDK Stormøde
Jeg har gennem mange år virket som Oracle konsulent, og ved gentagne lej-
Møde: 12. december 2001 kl. 13:30
ligheder prist relationsdatabasens principper som værende logiske,
DBA SIG forståelige og letanvendelige. På et projekt, jeg gennemførte for nylig, hvor
Næste møde er endnu ikke fastlagt. jeg skulle fremstille skærmbilleder i forms, fandt jeg en af de relationelle prin-
cippers ofre, nemlig brugervenligheden. I denne artikel vil jeg beskrive den
Designer SIG
del af datamodellen det drejer sig om, forklare om andre situationer hvor
Møde: 9. januar 2002 kl. 13:30 samme model vil frembringe de samme problemer, tilbyde en løsningsmodel
Developer SIG og i forbindelse med denne gennemgå lidt teori om tilstandsmaskiner, da de
Næste møde er endnu ikke fastlagt.
viste sig at være meget anvendelige til dette problem.

Data warehouse SIG


Næste møde er endnu ikke fastlagt.
STORED OUTLINES 8
Johannes V. Djernæs & Mogens Nørgaard
Web SIG
Vi har i Miracle A/S haft en del fornøjelse ud af Stored Outlines. Én af sagerne
Næste møde er endnu ikke fastlagt. var affødt af en opgradering fra 7.3 til 8.1.6, hvor et bestemt (og meget brugt)
statement startede med at have parsetider på nogle få sekunder og derefter
gav sig til at vokse. Når en one-liner SQL har en parsetid på 800 sekunder bør
man kigge på det – det har nu altid været mit motto!

NYHEDER 22 PLAYING THE


Borland og Oracle samarbejder
OpenWorld på eBay
LIBRARY CARD 14
Oracle OLAP 3-1 over IBM John Caputo
Since release 2.1 of Designer, you
BC4J-generator i Designer
have been able to customize
e l i g J ul!
Glæd
Oracle9i og HP Superdrome slår rekord
WebServer Generator (WSG) mod-
SAP er 65% hurtigere på Oracle end ules by adding your own code for
på DB2
routines and events that is included

og
Oracle vinder undervisningspris
in the generated code. Some page
Oracle gør MS Outlook ‘Unbreakable’ layout customization has also been
K l i p u d
op
Oracle ”Help Us Help” Foundation possible by adding code to the User
Small Business Suite på top 100 Text areas of WSG module pages.
Many people are familiar with these h æ n g
two types of WSG module cus-
tomization. This paper explores a
method to extend standard WSG
s i d e 11
module page layout through cus-
tomizing the WebServer Generator
Se
Library (WSGL) package. It is divid-
ed into the following sections.
ORACLEEKSPERT-PRISEN 2001
Leder Marc de Oliveira, ansvarshavende redaktør.
Julen er en tid for hensyn, omsorg og gaver. Om det er baggrunden for
at Oracle (ud over sine eBay-auktioner og Help Us Help Foundation) har
besluttet at udvikle en ny generator til Designer, er nok ikke sandsynligt,
men ikke desto mindre sender det et signal om, at Oracle ikke helt har
afskrevet Designer endnu. Oplag: . . . . . . . . . . . . . . . .250 kopier
Jeg refererer her til Product Manager Sue Harpers offentliggørrelse på
ODTUGs mailliste af en ny BC4J generator, som er på tegnebrættet til Udgives af:
Oracle9i Developer Suite release 2 (sidst i 2002). . . . . . . . . . . . . . .PYTHIA Information
Den danske Designer SIG arrangerede straks en telekonference med . . . . . . . . . . . . . . . . . . .Kongensvej 3
hendes chef, Simon Day, den 28. november (hvor der alligevel var . . . . . . . . . . . . . .2000 Frederiksberg
Designer SIG møde), hvor han fortalte om, hvad vi kan vente os af BC4J
. . . . . . . . . . . . . . . . . . . . . . .Danmark
generatoren. Han bekræftede det, som Sue Harper havde sagt, og
uddybede at der i første omgang kun er tale om at generere BC4J kom-
ponenter (dvs ikke nogen brugergrænseflade). Ledelsesgruppen er dog Telefon: . . . . . . . . . . . . . . . .26279991
opmærksom på at der vil være et stort ønske om dette, hvorfor man reg- Fax: . . . . . . . . . . . . . . . . . . .26199991
ner med, på et senere tidspunkt, måske at kunne generere en bruger- Email: . . . . . .Info@OracleEkspert.dk
grænseflade i det nye JRAD-produkt, som man arbejder på Web: . . . . . . .www.OracleEkspert.dk
(JDevelopers svar på Forms). JRAD er først planlagt til at være færdigt
om 18 måneder, så en Designer-generator til JRAD er ikke på tegne-
Ansvarshavende redaktør:
brættet endnu. Næste Designer SIG-møde vil have et indlæg om JRAD.
. . . . . . . . . . . . . . . . .Marc de Oliveira
Simon Day svarede også på de udvidelsesønsker til Designer, han mod- . . . . . . . . . . .Marc@OracleEkspert.dk
tog ved OUGDKs Designer SIG møde den 19. september. Den 19.
september var hans budskab at Designer hovedsageligt vil blive udvidet
ift datamodellering, mens applikationsgenerering ikke ville få megen pri- Rettigheder:
oritet. Ved telekonferencen den 28. november var forbedringer til både PYTHIA Information ejer alle rettigheder
Forms-generatoren og Web Server generatoren også kommet med. til indholdet af OracleEkspert.
Kopiering af bladet i dele eller helhed
Også OUGDK er begyndt at røre på sig. De har inviteret til stormøde den må kun ske efter skriftligt samtykke fra
12. december (se programmet på side 23), og noget tyder på at PYTHIA Information.
hjemmesiden (www.oug.dk) når at komme op at køre inden mødet!
PYTHIA Information forbeholder sig ret-
Det er Miracle A/S, som har tilbudt at sørge for at hjemmesiden kommer tigheder til at offentliggøre og genudgive
til at virke igen. Det lader dog til, at planerne om at bruge WebDB til at de trykte artikler, tips mv, samt at tillade
lave en mere dynamisk hjemmeside er blevet udskudt. bladets læsere at anvende indholdet til
såvel personlige som kommercielle for-
Alt i alt tyder det på, at vi får et rigtig spændende 2002. mål.
Endelig skal vi også have uddelt dette års OracleEkspert-pris til forfat- PYTHIA Information kan ikke drages til
teren af årets bedste artikel. Endnu en gang er det ikke artiklens længde, ansvar for eventuelle fejl og mangler i
Indholdet af OracleEkspert. Artikler mv
der har gjort udslaget, men en klar, metodisk og systematisk tilgang til
stilles tilrådighed uden garanti af nogen
stoffet, samt emnets generelle relevans og anvendelsesmuligheder. art.
Disse elementer forenes på elegant vis af Rune Mørk i artiklen
Relationsdatabasens Begrænsninger, som beskriver implementeringen
af en relevant tilstandsmaskine i Forms. Artiklen kan læses i dette num- Pris:
mer af OracleEkspert. Prisen er som tidligere tre originaltegninger af Enkeltnummer . . . . . . . . . .DKK 125,00
årets tegneseriestrips Oraclerne tegnet af Jesper Dyjak, indrammet og 1 års abonnement . . . . . . .DKK 600,00
med indgraveret skilt.
Udover OracleEkspert-prisen har vi i år introduceret en ny pris til den per- Ved samtidig køb af minimum 5 kopier til
son, organisation eller virksomhed, som har været mest entusiastisk og samme adresse (enkeltnummer eller
succesfuld i arbejdet med at støtte bladet, hvadenten det er udadrettet abonnement) gives 40% rabat på den
samlede pris.
ved at udbrede kendskabet til bladet blandt læsere, skribenter og annon-
cører, eller indadrettet ved at forbedre bladets indhold, struktur eller pro- Priserne er excl moms.
duktion. Vi kalder prisen for OracleEkspert-støtten.
Selv om der i år har været en del enkeltpersoner og virksomheder, som Annoncer:
har ydet uvurderlig støtte til bladet, så kunne prisen ikke gå til andre end Annoncer til OracleEkspert nr 10 skal
Mogens Nørgaard og Miracle A/S for deres ihærdige leverancer af artik- være PYTHIA Information i hænde sen-
est den 11. januar 2001.
ler, indrykning af annoncer i bladet, og endelig direkte, farverig og sober
kritik af redaktørens holdninger (som blev publiceret i OracleEkspert nr Annoncepriser kan findes på:
6). Uanset om man er enig i Mogens’ tilbedelse af Wait-interface’et eller www.OracleEkspert.dk
ej, så er der ingen tvivl om, at hans artikler har gjort bladet mere under-
holdende.
OracleEkspert-støtten er ligesom OracleEkspert-prisen et sæt på tre
Oraclerne originaltegninger i glas og ramme.
Og med dette vil vi ønske alle vore læsere en rigtig glædelig jul og et godt
nytår. Password: bdamsg
Vandt d u ikke
Ora cleEkspert-
prisen 2001?

Dead line Vi be t aler


er den 700 kr.
11. jan. pr. s ide
2002

Hvis d u skal vinde


Ora cleekspert-
prisen 2002!!!
Tools
RELATIONSDATABASENS BEGRÆNSNINGER
Metode
Rune Mørk, er selvstændig Oracle-konsulent. Rune er uddannet civilingeniør og
Teknisk Artikel har arbejdet med Oracle-produkter siden 1990 inden for developer, designer og
discoverer. Rune kan træffes på rune@borremose.com.
Indledning • På hvilke numre har Paul McCartney gnas-
ket grøntsager (altså som instrument)
Jeg har gennem mange år virket som Oracle kon- • Hvilke numre kan fremfindes som en kombina-
sulent, og ved gentagne lejligheder prist relations- tion af Bach og genren Jazz og som samtidig
databasens principper som værende logiske, er skrevet mellem 1718 og 1722.
forståelige og letanvendelige. På et projekt, jeg gen-
• Hvilke sange har Kim Larsen forfattet og hvor
nemførte for nylig, hvor jeg skulle fremstille skærm-
har han samtidig spillet guitar.
billeder i forms, fandt jeg en af de relationelle prin-
cippers ofre, nemlig brugervenligheden. I denne Design patterns er blevet meget moderne for tiden,
artikel vil jeg beskrive den del af datamodellen det og den datamodel jeg her viser kan med lethed til-
drejer sig om, forklare om andre situationer hvor passes andre registreringssituationer, f. eks. kunne
samme model vil frembringe de samme problemer, man forestille sig at ville registrere oplysninger om
tilbyde en løsningsmodel og i forbindelse med • Tv udsendelser
denne gennemgå lidt teori om tilstandsmaskiner, da • Antologier
de viste sig at være meget anvendelige til dette • Radioprogrammer
problem. • Aviser
Danmarks Radio har verdens største gennemregi- • Personer der indgår i arbejdsopgaver der er
strerede diskotek bestående af ca 1 million fono- tidsmæssigt forbundet.
grammer, og skulle I forbindelse med år 2000
Alt sammen ting hvor der allerede findes en implicit
udfase deres gamle løsning og implementere en ny.
rækkefølge og navngivning af data, der skal regis-
Hver dag modtager diskoteket op til 50 nye fono-
treres. Dette blot for at vise at de efterfølgende
grammer (CD, Bånd, plader (både singler og LP)),
overvejelser kan bruges mange andre steder.
og disse fonogrammer skal personalet gennemlytte
og registrere informationer omkring til brug for plan-
lægningen af radio og tv-udsendelser. Traditionel brugergrænseflade
Jeg går ud fra at alle mine læsere har kigget på et Diskoteket skulle nu bruge et eller flere skærm-
cover på en cd, men næppe overvejet hvilken data- billeder til at registrere disse oplysninger, og som
model der skal til for at repræsentere den informa- opfostret i den relationelle verden foreslog jeg
tion der ligger begravet i denne. Datamodellen brugerne at vi lavede et master detail skræmbillede,
hvor de kunne registrere alle de informationer de
ville. Et screenshot af disse kan ses i figur 2.
Men allerede under diskussionen af disse nye
skærmbilleder, der lå tæt op af den relationelle
tankegang, viste det sig at disse billeder ville være
meget besværlige at arbejde med. Et fonogram er
nemlig kendetegnet ved at det typisk, men ikke
altid, er den samme kunstner der medvirker på alle
skæringer på en CD. Hvis jeg illustrerer det med
cd’en ”let love in” med ”Nick Cave and the bad
seeds”, så optræder Nick Cave om sanger på alle
numre, han spiller piano på 1,8; orgel på 1, 3, 5, 6,
7, 8, 9; Blixa Bargeld (ja det er ham fra Einsturtzne
Neubauten) medvirker på guitar på 1, 2, 3, 4, 5, 6,
7, 8, 9, 10; og synger 2 stemme på 3, 4, 8, 9, 10,
herudover medvirker en håndfuld flere personer
med forskellige instumenter fordelt ud over alle
numrene. Hvis registratorerne nemt skulle kunne
registrere deres informationer, men data samtidig
Figur 1 Datamodel for et fonogram
skulle være i de relationelle tabeller, så skulle der
findes et kompromis.
(simplificeret) for et fonogram er vist i figur 1.
Det vi kan se i figur 1 er at en fonogram består af et Løsningside
antal skæringer, hvor hver skæring har en relation til Hvis vi kunne tillade at brugerne angav deres infor-
et musikstykke, hvilket betyder at hver unikt musik- mationer som en strengangivelse af fundne
stykke er registreret for sig. Derudover er der gemt forekomster, efter en på forhånd aftalt syntaks,
oplysninger om hvilke kunstnere der optræder på f.eks, kunne Nick Cave indsats på piano angives
hvilke skæringer, samt hvilke instrumenter de spiller som 1/1,8, på orgel, 1/1,3,5-9, på samt 1/1-10; Blixa
på og hvilken rolle de indtager (solist, salgskunst- på guitar, 1/1-10; 2.stemme 1/3,4,8-10.
ner, dirigent osv)
Lovlig syntax eksempler kunne således være:
Denne model betyder at diskoteket kan svare på
spørgsmål som: 1/1-4+2/3-8 eller

4 December 2001 OracleEkspert


Figur 2 Alm registrering
1/1-5,7,9-10, beslutte os til hvilken tilstand maskinen skal ændre
hvor tallet foran skråstregen angiver side nummeret sig til. Med en testsekvens på ”1/1-4+2/3-8, vil det
på CD’en, og tallene efter angiver skæringsnum- første tegn være et ”1”, altså vil maskinen bevæge
meret. til til tilstanden ”modtag side b”, her modtages et ”/”
og maskinen ændrer status til ”Modtag skæring 1a”,
Hvis vi ændrede i datamodellen for kun at gemme så kommer et ”1” og vi går til ”modtag skæring 1b,
disse strenge, ville søgemulighederne blive stærkt så et ”-” og tilstanden er ”Modtag skæring 2a”, så et
begrænsede, idet vi senere skulle skrive kode der ”4” medførende tilstand ”Modtag skæring 2b”, så et
skal undersøge en streng, for at kunne svare på ”+”, og vi er tilbage ved start.
spørgsmålet, hvor deltager en given kunstner på
første nummer på et fonogram. Derfor, selvom vi På denne måde kan vi modtage en streng af data
vælger at anvige data som foreslået ovenfor, så skal og bestemme hvad vi skal stille op med data under-
de fortolkes og gemmes i et relationelt system. vejs.

Men for at kunne tolke og forstå denne syntaks Den grafiske fremstilling af en sådan maskine kan
skulle der udvikles en syntax fortolker (en såkaldt overføres til en tabelstruktur som kan ses i figur 4.
parser), et stykke software der kunne modtage en Kasserne med de grå markeringer markerer
streng og fortælle tilbage hvilke kombinationer af hvornår vi har opnået tilstrækkelig med information
sider og skæringer det drejede sig om, således at til at kunne gemme vores data. Hvis vi for eksempel
formen kunne registrere angivelserne korrekt. En har en tekststreng med indholdet ”1/1-4,7-10”, ved
sådan parser laves udfra de pricipper der omhand- vi når kommaet forekommer at vi skal gemme infor-
ler en tilstandsmaskine. mationerne om side på 1/ 1 ; 1/ 2; 1/ 3 ; 1/ 4.
Af tabeller i figur 4 kan vi se at i tilstandene a, 1a og
Tilstandsmaskiner 2a, kun eksisterer for at sikre at tallene består af
Tilstandsmaskiner kan beskrives på forskellig vis, mindst et ciffer. Der er også nemt at se, enten udfra
og kendetegner en indretning vi forestiller os mod- grafen eller tabellen at tilstandsmaskinen er korrekt
tager et tegn ad gangen og på baggrund af dette i en matematisk forstand, idet ingen kasser i tegnin-
beslutter hvilken aktion der skal tages. Egentlig kan gen må have ens pile ind og ud fra tilstanden, mens
det udefra betegnes som en ”black box”, som på i tabellen må ingen af rækkerne være ens, hvis de
baggrund af en modtaget sekvens af data udfører er det, er vores maskine ikke konstrueret korrekt.
en handling.
Tilstandsmaskiner dannede grundlaget for de første
Implementeringen
computere, og blev udviklet af Alan Turing. Med denne maskine på plads er det nu ”relativt”
Maskinen i vores eksempel kan illustreres grafisk enkelt at konstruere kode der validerer at vores
som det ses på figur 3 og det opfylder de krav som tekst streng er korrekt. Konstruktionen gøres ved at
visuelt orienterede personer har. På figuren starter lade en procedure repræsentere hver tilstand mask-
vi i øverste venstre hjørne, og forestiller os at vi har inen kan indtage. Herefter er det enkelt at kode hver
modtaget et tegn, på baggrund af dette tegn kan vi enkelt tilstand idet hver tilstand kun har et muligt

OracleEkspert December 2001 5


Figur 3 Tilstandsmaskinen grafiske repræsentation
udfaldsrum og det er præcist beskrevet hvad der personer der indgår i et fonogram, hvilke lande,
skal ske for hver enkelt tegn der modtages. sprog genrer, arrangører, emner, indspilningdatoer
Den færdige kode, der er vist sidst i artiklen, er samt optagesteder der gælder for de enkelte
udviklet (og der simplificeret) til forms, resultatet skæringer. Alt sammen ved hjælp af den syntaks
bliver gemt i en temporær pl/sql-tabel, og præsen- der er beskrevet i ovennævnte.
teret når hele tekststrengen er kontrolleret. Problemer og kommentarer
Når dette er på plads er det relativt simpelt at bygge Hvordan retter brugerne så i allerede eksisterende
en form med et udseende som i figur 5, hvor data? Her er der bygget et skærmbillede der går
brugerne kan fremfinde data og udfylde tekststren- den modsatte vej, og udfra de relationelle data
gen og gemme data. Herefter bliver data spredt ud opbygger en tekststreng med et indhold der marke-
og gemt i de bagved liggende relationelle tabeller. rer forekomster af data. Selvom dette er en ikke tri-
Koden til dette viser jeg ikke i denne artikel. viel opgave, har har jeg udeladt metodikken fra den-
I dette skærmbillede kan brugerne registrere hvilke ne artikel.

Figur 5 En template form

6 December 2001 OracleEkspert


Figur 4 Tilstandsmaskinen i tabelform
Har denne artikel givet lyst til at lære mere om til- [Nedenstående kode kan hentes fra OracleEksperts
standsmaskiner, så kan der hentes yderligere hjemmeside, Red.]
oplysninger i f. eks. ”Zvi Kohavi: Switching and finite
automata theory”.

PACKAGE cd IS v_c := nextc; end if;


procedure setup (p_st in varchar2); if not is_number(v_c) then fejl; end;
PROCEDURE modtag_side_a; else ----------
PROCEDURE modtag_side_b; v_side := to_number(v_c); procedure modtag_skaering_2b is
PROCEDURE modtag_skaering_1a; modtag_side_b; begin
PROCEDURE modtag_skaering_1b; end if; v_pointer := v_pointer + 1;
PROCEDURE modtag_skaering_2a; end; v_c := nextc;
PROCEDURE modtag_skaering_2b; ----------------------------------- if v_c = 'E' then
procedure vis; PROCEDURE modtag_side_b IS gem;
FUNCTION is_number(p_in varchar2) begin elsif is_number(v_c) then
RETURN boolean ; v_pointer := v_pointer + 1; v_skaering2:= v_skaering2
FUNCTION nextc RETURN varchar2 ; v_c := nextc; * 10 + to_number(v_c);
procedure gem; if is_number(v_c) then modtag_skaering_2b;
procedure fejl ; v_side:= v_side*10+to_number(v_c); elsif v_c = '+' then
END; modtag_side_b; gem;
else modtag_side_a;
PACKAGE BODY cd IS if v_c = '/' then elsif v_c = ',' then
type info_record is modtag_skaering_1a; gem;
record (side pls_integer, else modtag_skaering_1a;
skaering pls_integer); fejl; else
type info_table is table of end if; fejl;
info_record index by binary_integer; end if; end if;
fonogram_info info_table; end; end;
v_no_of_info pls_integer := 0; ----------------------------------- ---------------
v_side pls_integer ; procedure modtag_skaering_1a is procedure gem is
v_skaering1 pls_integer; begin begin
v_skaering2 pls_integer; v_pointer := v_pointer + 1; if v_skaering2 is not null then
v_pointer pls_integer := 0; v_c := nextc; for i in v_skaering1 .. v_skaering2
v_st varchar2(100); if not is_number(v_c) then fejl; loop
v_c char; else v_no_of_info:= v_no_of_info +
----------------------------------- v_skaering1 := to_number(v_c); 1;
procedure setup (p_st in varchar2) modtag_skaering_1b; fonogram_info(v_no_of_info).side:=
is end if; v_side;
begin end; fonogram_info(v_no_of_info).skaering
v_st := p_st; ----------------------------------- := i;
v_side := null; Procedure modtag_skaering_1b is end loop;
v_skaering1 := null; begin v_skaering2:= null;
v_skaering2 := null; v_pointer := v_pointer + 1; else
v_pointer := 0; v_c := nextc; v_no_of_info := v_no_of_info +
modtag_side_a; if v_c = 'E' then 1;
vis; gem; fonogram_info(v_no_of_info).side
end; elsif is_number(v_c) then := v_side;
----------------------------------- v_skaering1 := v_skaering1 * 10 fonogram_info(v_no_of_info).skaering
FUNCTION is_number(p_in varchar2) + to_number(v_c); := v_skaering1;
RETURN boolean IS modtag_skaering_1b; end if;
BEGIN elsif v_c = '+' then end;
if p_in in ('0','1','2','3','4', gem; ----------------------------------
'5','6','7','8','9') modtag_side_a; procedure fejl is
then elsif v_c = ',' then begin
return true; gem; message('fejl');
else return false; modtag_skaering_1a; end;
end if; elsif v_c = '-' then ----------------------------------
END; modtag_skaering_2a;
----------------------------------- else procedure vis is
FUNCTION nextc RETURN varchar2 IS fejl; begin
BEGIN end if; for i in 1 .. v_no_of_info loop
if v_pointer > length(v_st) then end; message(
return 'E'; ------------- 'side '||
else procedure modtag_skaering_2a is fonogram_info(i).side ||
return substr(v_st,v_pointer,1); begin 'skæring '||
end if; v_pointer := v_pointer + 1; fonogram_info(i).skaering);
END; v_c := nextc; end loop;
----------------------------------- if not is_number(v_c) then fejl; end;
PROCEDURE modtag_side_a IS else END;
begin v_skaering2 := to_number(v_c);
v_pointer := v_pointer + 1; modtag_skaering_2b;

OracleEkspert December 2001 7


DBA
STORED OUTLINES
Johannes V. Djernæs & Mogens Nørgaard, begge Miracle A/S.
Teknisk Artikel Indledning mulighed for at undersøge hvad der skal til for at løse
problemerne uden panik.
Vi har i Miracle A/S haft en del fornøjelse ud af Stored
En anden fordel ved stored outlines er at man har en
Outlines. Én af sagerne var affødt af en opgradering
mulighed for at optimere en SQL-sætning hvor man
fra 7.3 til 8.1.6, hvor et bestemt (og meget brugt)
ikke kan ændre på kildeteksten (Black Box Tuning).
statement startede med at have parsetider på nogle få
Hvis man kan ændre på forudsætningerne så den
sekunder og derefter gav sig til at vokse. Når en one-
anvender en mere optimal execution plan, så laver
liner SQL har en parsetid på 800 sekunder bør man
man blot en stored outline under disse forudsætninger
kigge på det – det har nu altid været mit motto!
og anvender denne i den normale drift. Det er yder-
Derudover har vi længe drømt om at lave en automa- mere muligt at modificere de hints der indgår en
tisk opgradering, hvor en trigger checker om hvert nyt stored outline for en SQL-sætning, og så bruge denne
SQL-statement har samme eksekveringsplan som før modificerede stored outline for den oprindelige SQL-
opgraderingen – hvis ikke, så erstattes den nye plan sætning.
med den gamle (bare for en sikkerheds skyld), og den
I Oracle 8i er dette ikke supporteret (det virker fint,
nye plan registreres, så man senere kan checke om
hvis man f.eks. gør det som i eksemplet fra DBF2001
den var bedre end den gamle.
nedenfor), men i 9i er der direkte support for at editere
Vi kalder det Chok-opgradering, men det er ikke rigtigt i de hints der gemmes i en stored outline, dels med en
et navn, der sælger… pakke (DBMS_OUTLN_EDIT) og dels med Outline
Og nu vil jeg så give ordet til Johannes, der har brugt Editor i Enterprise Manager.
stored outlines til lidt af hvert.
- Mogens
Snyd
Til mit indlæg på DBF2001 om stored outlines lavede
jeg en modificeret stored outline på en Oracle 8.1.6
Stored Outlines blev indført i Oracle 8i som en metode database. Denne stored outline brugte jeg til at snyde
til at opnå Plan Stability. Plan Stability sikrer at en tilhørerne til at tro at et kunstigt hint (det kunne være
given query vil have den samme execution plan, også hvad som helst, i dette tilfælde /*+ miracle */) havde
selv om man ændrer parametre, opretter nye index, en ganske imponerende effekt. For at modificere den
analyserer data når datamængde og -fordeling har aktuelle stored outline brugte jeg følgende fremgangs
ændret sig markant - eller opgraderer. Mange af os måde:
har oplevet at performance har ændret sig betydeligt
efter en opgradering og der hvor vi har mærket det Først lavede jeg en stored outline (OL1) for den
tydeligst er nok når performance er blevet dårligere oprindelige SQL-sætning.
fordi der efter opgraderingen anvendes en anden Så modificerede jeg sætningen med et hint for at
execution plan. opnå en anden execution plan og lavede en stored
outline (OL2) for den modificerede, men funktionelt
Fordele ekvivalente, SQL-sætning.

Med stored outlines kan man roligt opgradere og så Endelig deletede jeg rækkerne i OL$HINTS for den
stille og roligt afprøve om der er performance for- oprindelige stored outline (OL1) og opdaterede
ringelser. Hvis der er, anvender man blot de stored rækkerne i OL$HINTS for den "modificerede" stored
outlines man lavede inden opgraderingen og har så outline (OL2) så de i stedet for at referere til OL2 ref-

Figur 1. opdater rækken i OL$

8 December 2001 OracleEkspert


Figur 2. Outline Editor.

ererede til OL1. kender noget til dette problem, så er jeg da meget
Nu virkede det! Min oprindelige SQL-sætning brugte interesseret i at høre om det
et full table scan i stedet for det index opslag den
brugte oprindeligt. Alternativ anvendelse
Egentligt burde jeg have gjort en ting til: Jeg skulle En helt anden måde at bruge stored outlines på, er til
have opdateret rækken i OL$ for den oprindelige at finde hints. Jeg arbejdede på et tidspunkt med et
stored outline, så HINTCOUNT kolonnen indeholdt problem hvor en bestemt gruppe af SQL-sætninger
det rigtige antal. Der var nemlig en række mindre i brugte voldsom lang tid i parse-fasen. Her anvendte
OL$HINTS for den modificerede stored outline. jeg, som workaround, stored outlines til at finde de
hints der skulle til for at få optimizeren til at vælge den
Jeg har samlet det hele i figur 1.
ønskede execution plan, blot meget hurtigere end
hvis den selv skulle finde ud af det.
Den autoriserede metode (i 9i)
Rent praktisk lavede jeg en stored outline for en af de
For at kunne editere (”line mode”) i en stored outline i problematiske SQL-sætninger (som i SQL*Plus
Oracle 9i skal man først oprette en privat kopi (vha. eksemplet ovenfor) og hentede hint_text fra hver
CREATE PRIVATE OUTLINE private_outline FROM række i outln.ol$hints eller USER_OUTLINE_HINTS.
outline;). Derefter kan man opdatere direkte i den Alle disse hints blev så skrevet ind i de problematiske
lokale OL$HINTS tabel. Efter at have modificeret en SQL-sætninger.
stored outline manuelt skal den gen-synkroniseres
(f.eks. vha. DBMS_OUTLN_EDIT.REFRESH_PRI- Ulemper
VATE_OUTLINE) og for at den modificerede stored
outline kan træde i kraft (for andre brugere) skal den De største ulemper ved at anvende stored outlines er
publiceres (vha. CREATE OR REPLACE OUTLINE at kan være svært at se at der anvendes stored out-
outline FROM PRIVATE private_outline;). lines, og det kan være meget frustrende at man ikke
kan få optimizeren til at bruge f.eks. et nyt index man
Alternativet er at man bruger Outline Editor (se figur 2)
har lavet. Det er også muligt at den execution plan der
som man finder i Oracle Enterprise Manager under
var optimal da man oprettede sin stored outline, ikke
Tools – Tuning Pack – Outline Management (bemærk
længere er bare tilnærmelsesvis optimal - og det
dog at Tuning Pack er en option til Enterprise Edition).
hjælper jo hverken at oprette nye index eller at analy-
Her kan man vælge Edit under Outlines menuen og sere data.
man får så forskellige muligheder for at modificere
Man skal huske på at en stored outline kun vedrører
den stored outline, afhængigt af hvilke join og access
den specifikke SQL-sætning – Oracle udregner først
methods der anvendes. Man kan f.eks. vælge access
en hash værdi og laver så en nøjagtig karakter for
method og ændre den tilbage fra ”Full” til ”Index”: Jeg
karakter sammenligning inden den anvender en
valgte først den stored outline JVD_OLT1, Edit…
stored outline. Hvis blot der er eet bogstav der er stort
hvorefter Outline Editor kom frem. Her valgte jeg så
i stedet for småt eller een blank mere eller mindre, så
OLT1 ikonet og Step Properties... (se figur 3)
er det ikke den samme sætning og en stored outline
Når man har lavet en ændring skal den valideres og vil ikke blive anvendt.
hvis ikke Oracle kan validere ændringen bliver den
Den sikreste metode til at undersøge om der anven-
annulleret.
des en stored outline ved afvikling af en SQL-sætning
I skrivende stund kunne det ikke lykkes for mig at lave er at slå sætningen op i V$SQL og se på kolonnen
den samme modifikation som jeg lavede på den usup- OUTLINE_CATEGORY – hvis den er null anvendes
porterede måde i SQL*Plus (at ændre access method der ikke nogen stored outline, ellers gør der.
fra ”Index” til ”Full”), men det virkede fint at ændre det
den anden vej. Hvis der er nogen blandt læserne, der

OracleEkspert December 2001 9


Figur 3.

Forudsætninger fine privilegium ”execute any procedure” – og kan


ydermere gøre det ”as any user”. I kan sikkert selv
Det er ikke alle parametre man bare kan ændre, føl- forestille jer hvad det kan bruges til og hvis ikke, så tro
gende tre parametre må man f.eks. ikke ændre på mig: Det kan give en adgang til hvad som helst i en
hvis man vil være sikker på at stored outlines virker database.
efter hensigten:
QUERY_REWRITE_ENABLED P.S.
STAR_TRANSFORMATION_ENABLED En lille observation der ikke har noget med Stored
OPTIMIZER_FEATURES_ENABLE Outline at gøre:

For at anvende stored outlines skal man enten udføre: Vidste du at ventetid for 'log file sync' IKKE er inklu-
deret i "OVERALL TOTALS FOR ..." i tkprof output, og
alter session set use_stored_outlines = true; heller ikke indgår i elapsed tid i parse/execute/fetch.
Hvorefter der anvendes stored outlines I den aktuelle Det skyldes at 'log file sync' er en del af commit, som
session, eller: ikke redegøres for i tkprof.
alter system set use_stored_outlines = true;
P.P.S.
Hvorefter alle sessioner anvender stored outlines.
En hilsen fra Mogens Nørgaard og Peter Gram:
Det er ikke muligt at slå anvendelse af stored outlines
til ved hjælp af init.ora parametre, kun med alter ses- Nu har vi i årevis forsøgt at lære alle, at Oracle bruger
sion/system. en hash funktion på (file nr, block nr, block class) til at
adressere buffer cache.
Sikkerhed(shul) Dette er forkert ! Hash funktion bruger kun (file nr,
block nr) !
Så er der jo lige en lille detalje som Jonathan Lewis
gjorde mig opmærksom på: Når man har installeret UNDSKYLD!
(eller opgraderet til) en Oracle 8i eller 9i, så skal man Dette vil blive uddybet til vores arrangement 23. - 25.
huske at ændre password for outln brugeren! Ellers januar 2002 med Jonathan Lewis: Optimising Oracle
har man et kæmpe sikkerhedshul idet outln har det - The Seminar.

Helsidesannoncer i
OracleEkspert
fra DKK 6.000 (excl moms)
Læs mere på:
www.OracleEkspert.dk

10 December 2001 OracleEkspert


Disse blade kan stadig købes Emne: Tools, Designer, Web Top-n query - OE nr 6

Artikelindeks 2000-2001
via vores hjemmeside: TFR: Trace File Repository - OE nr 8 At finde de 20 rækker fra en tabel med de
største eller mindste værdier i en given
Torben Holm & Mogens Nørgaard
www.OracleEkspert.dk Det er egentlig Cary Millsaps ide: Tracefiler
kolonne har i mange år ikke været helt lige til.
Denne artikel belyser hvorledes det alligevel
(uanset om de er normale level 1 eller mere kan klares med relativt enkle midler.
Relationsdatabasens begræn-
barske level 4, 8 og 12 typer) hører til i en Martin Jensen
sninger - OE nr 9 database – i et repository, som man ynder at
Rune Mørk kalde en samling tabeller nu om dage. Emne: PL/SQL

Jeg har gennem mange år virket som Oracle Emne: DBA Simulating OPS$ users through a
konsulent, og ved gentagne lejligheder prist Browser - OE nr 6
relationsdatabasens principper som værende ODTUG-konferencen 2001 - OE nr 7
If your business is running an intranet on an
logiske, forståelige og letanvendelige. På et Marc de Oliveira
MS network, it is possible to authenticate MS
projekt, jeg gennemførte for nylig, hvor jeg
Den 24-28 juni 2001 var San Diego stedet at users as Oracle users without prompting
skulle fremstille skærmbilleder i forms, fandt
være for de garvede Oracle-værktøjsfolk. them for a second login name and password.
jeg en af de relationelle princippers ofre, nem-
ODTUG-konferencen er efter min mening Unfortunately, Oracle only supports this for
lig brugervenligheden. I denne artikel vil jeg
klart den mest interessante konference for en client/server applications like Forms and
beskrive den del af datamodellen det drejer
Oracle-udvikler, så derfor vil jeg i det følgende Reports. This presentation will show you how
sig om, forklare om andre situationer hvor
forklare lidt om hvad ODTUG er, og specifikt to authenticate MS users running Web appli-
samme model vil frembringe de samme prob-
hvad man kunne opleve ved dette års cations through a browser as well.
lemer, tilbyde en løsningsmodel og i
ODTUG-konference.
forbindelse med denne gennemgå lidt teori Marc de Oliveira
om tilstandsmaskiner, da de viste sig at være Emne: Tools
Emne: Web
meget anvendelige til dette problem.
Ratio Gaga - OE nr 7 Cutting Code With Style – Part II - OE
Emne: Tools, Metode
Mogens Nørgaard nr 6
Stored Outlines - OE nr 9 Det er opfyldelsen af enhver mands drøm at This article is part II of a two part series that
Johannes V. Djernæs & Mogens Nørgaard kunne sidde i en garage med små bondevin- explains a recommended coding style that is
duer der vender ud mod et smukt, nykon- easy to write, read and maintain. This issue
Vi har i Miracle A/S haft en del fornøjelse ud
strueret kaninanlæg (company rabbits og will focus on various structures of SQL and
af Stored Outlines. Én af sagerne var affødt af
company chickens er en del af standard-kon- PL/SQL including SELECT, INSERT, IF and
en opgradering fra 7.3 til 8.1.6, hvor et
trakten når man ansættes i Miracle A/S) og LOOPS.
bestemt (og meget brugt) statement startede
skrive en artikel om waits, YAPP2, 9i-doku-
med at have parsetider på nogle få sekunder Scott Hollows
mentationen, 10046-eksempler, osv. Så und-
og derefter gav sig til at vokse. Når en one- Emne: Metode
skyld, at denne artikel bliver lidt causeri-agtig.
liner SQL har en parsetid på 800 sekunder
Stemningen er til det.
bør man kigge på det – det har nu altid været Oracle Portal - OE nr 5
mit motto! Emne: DBA
I efteråret 2000 sendte Oracle 2. generation
Emne: DBA Generating XML Applications from af WebDB - Portal 3.0 - på gaden. Dette
Designer - OE nr 7 indlæg gennemgår Portal 3.0, hvor der er
Playing the Library Card - OE nr 9 forskelle i forhold til WebDB 2.% og der
John Caputo James F. Hudson
opbygges en Portal.
Since release 2.1 of Designer, you have been Currently, Designer and XML do not get along
Torben Holm
able to customize WebServer Generator well. But wouldn’t it be nice to be able to
select a module in the Design Editor, go to the Emner: Tools
(WSG) modules by adding your own code for
routines and events that is included in the “Copy With New Language” Utility, and create
a basic XML application?
Tuning Database Reorganizations
generated code. Some page layout cus- for Maximum Speed - OE nr 5
tomization has also been possible by adding Emne: Tools
code to the User Text areas of WSG module Oracle provides a number of options and
pages. Many people are familiar with these Guardian Security and Business parameters to achieve optimal reorganization
two types of WSG module customization. Rules Engine Under The Covers - OE speed in any environment. This paper
This paper explores a method to extend stan- nr 7 reviews these settings and discusses how to
dard WSG module page layout through cus- take advantage of them.
Scott Hollows
tomizing the WebServer Generator Library Heather Compher and Gil Asherie
(WSGL) package. It is divided into the follow- This article will provide a technical look at
Seeristic’s Guardian “Security and Business Emner: DBA
ing sections.
Rules Engine” software to show you how you
Emne: Designer Systemdokumentation uden smerte
can configure it and alter its functionality
using its PL/SQL API.
- OE nr 5
Nyskabende teknikker til mere effek-
Emne: Tools Artiklen giver dels en beskrivelse af, hvad der
tiv Opfyldelse af Datalovgivningens efter forfatterens mening er god system-
bestemmelse om logning af adgang Beregning af Danske helligdage - OE dokumentation, samt et forslag til, hvordan
til personfølsomme informationer - nr 6 man på en overkommelig måde kan imple-
OE nr 8 mentere en brugbar systemdokumentation,
Danske helligdage er ikke noget man bereg- som arbejder direkte på et systems kilde-
Martin Jensen ner. Dem slå man op i en tabel. Eller gør tekst, og derfor er uafhængig af design- og
For første gang er det nu muligt, som en del man? Ta’ årskalenderen fra sekretæren! Her udviklingsværktøjer, og samtidig altid er
af selve databasesystemet, at indbygge får du en PL/SQL løsning, som beregner opdateret.
mekanismer til automatisk logning af access dem. Til og med væsentligt hurtigere end de
til forudbestemte informationer, uden at skulle kan SELECT’es fra en tabel. Jan Ahlberg
ændre i de rapporter og skærmbilleder, der Anders Frandsen Emner: Metode
betjener brugerne af systemet.
Emne: Tools Spatial og PL/SQL - OE nr 5
Emne: DBA
Oracle8 GIS (Geeky Internal Stuff): I dokumentationen for Oracle Spatial er der
Kicking the ASP out of Designer - OE Physical Data Storage Internals - OE masser af eksempler på hvorledes man kan
nr 8 hælde data ind i spatial-objekter, og hvordan
nr 6 man efterfølgende manipulerer dem vha. de
David Schleis This month, Dan will focus on some internals indbyggede funktioner. Men hvad nu, hvis
The Oracle Designer WebServer Generator of the Oracle RDBMS, primarily physical stor- man får lyst til at rode med sine objekter på
(WSG) generates web-based applications age of data. This article will concentrate on egen hånd? – Det er der absolut intet til hin-
designed to run on an Oracle Web data blocks: how they’re created, how space der for…
Application Server. These applications are is really managed inside a tablespace, and Peter Sørensen
generated based on module and database some other geeky internal stuff of interest in
design specifications recorded in the the physical storage of data. Emner: Tools
Repository, and allow users to interact with Dan Hotka
an Oracle database over the internet. This is
Udnyt din redolog information - OE
extremely useful if you are running an Oracle Emne: DBA nr 5
Web Application Server, but what if you are Med Oracle 8i fik Oracologerne mulighed for
restricted to an existing web ASP server? at analysere information i redolog med

12 December 2001 OracleEkspert


Logminer. Computer Associates har i flere år bærende. De to metoder præsenteres og DesignAssist til Forms og Designer -
haft et værktøj Loganalyzer, der kan gøre det forskellene diskuteres i denne artikel, med OE nr 2
samme, og efter min mening, på en betydeligt udgangspunkt i et konkret, enkelt eksempel.
nemmere måde. I denne præsentation af DesignAssist er en avanceret template-pakke
Bodil Feldinger til Forms- og Designer-udviklere. I denne
værktøjet gives en oversigt over dets
muligheder, og hvad man kan benytte den Emner: Metode præsentation gennemgås de væsentligeste
indhentede information til. funktioner i produktet. Her indgår også en
Oracle OpenWorld 2000 - Værktøjer - overordnet sammenligning af DesignAssist
Carl Bruhn OE nr 3 og Headstart.
Emner: DBA Årets Oracle OpenWorld konference blev Marc de Oliveira
afholdt 1. - 5. oktober i San Francisco. Denne Emner: Designer, Tools
Cutting Code With Style – Part 1 - OE
artikel indeholder en relativt kortfattet
nr 4 beskrivelse af de mest interessante nyheder Monitorer længerevarende PL/SQL
You only need to know a few things to be able for Oracle-udviklere, både på kort og langt jobs - OE nr 2
to write guru level code that is easy to read, sigt. I dette nummer gennemgår vi værktø-
comprehend and maintain (do a little happy jerne og i næste nummer ser vi nærmere på Tip.
dance right now if that is what you wanted to Oracle 9i. Rune Mørk
hear). Finn Ellebæk Nielsen og Jens Børre Emner: DBA
Scott Hollows Emner: Tools, Designer Matrix Form Med WSG - OE nr 1
Emner: Metode
Row Level Security i Forms? - OE nr Denne artikel omhandler de muligheder der
10046: Trace for Mandige Mænd og 3 findes i Designer til at generere avancerede
Seje Sild - OE nr 4 matrix billeder med summer, dynamiske
Mange har sikkert prøvet at implementere
prompter og dynamiske links vha. web server
I virkeligheden er den "normale" Row Level Security i Forms, vha. en block
generatoren. Jeg viser trin for trin en metode
SQL_TRACE = TRUE bare en lille del af med et default where udtryk i stil med ”where
der er anvendt i et produktionsmiljø.
Oracle's tracefacilitet, der har fået det username=user”. Artiklen viser hvordan den
mundrette og intuitive navn "10046". Tag med smarte bruger omgår default where – og Rune Mørk
på en tur rundt i hjørnerne af 10046 og lær derved får adgang til fortrolige data – og den Emner: Designer, Web
undervejs at se, hvad der virkelig sker med viser, hvordan den smarte programmør
dine SQL-statements. undgår, at den smarte bruger omgår default Oracle Designer Repository API - OE
Mogens Nørgaard where udtrykket! nr 1
Emner: DBA Anders Frandsen Oracle Designer’s Repository API er et pro-
Emner: Tools grammelt interface til Designer’s Repository,
Oracle OpenWorld 2000 - Databasen der bl.a gør det muligt at lave masseopda-
- OE nr 4 Objektorientering i PL/SQL - OE nr 2 teringer af systemdefinitioner udfra selvval-
Objektorientering er blandt mange udskreget gte kriterier og udenom de grafiske brugerin-
Årets Oracle OpenWorld konference blev
til at være løsningen på alle vore problemer terfaces. API’et er et kraftigt og værdifuldt
afholdt 1. - 5. oktober i San Francisco. Denne
indenfor systemudvikling. Men hvad gør man værktøj, som kan effektivisere systemud-
artikel, som ligger i forlængelse den vi bragte
så, hvis man nu ikke har et objektorienteret viklingsarbejdet, kvalitetssikre og fremme
i sidste nummer af OracleEkspoert, gen-
sprog at udvikle i? I denne artikel gen- ensartetheden i det udviklede systems kode
nemgår den nye database Oracle 9i.
nemgås, hvordan man i PL/SQL kan opnå og funktionalitet.
Finn Ellebæk Nielsen
nogle af de fordele, der er ved objektorien- Bodil Feldinger
Emner: DBA tering. Emner: Designer
Null - OE nr 4 Jacob Steen Due
Effektivt PL/SQL Load Tool - OE nr 1
Vi er jo vandt til, at når vi ikke kender en Emner: Tools, Metode
Virksomheder med forskellige systemer har
egentlig værdi for en attribut, giver vi den i
Hvad er et data warehouse? - OE nr ofte brug for at udveksle oplysninger af fælles
stedet tilstanden Null. Og i grunden burde det
2 interesse (f.eks. en Vare Master). Der findes
jo ikke være så vanskeligt at håndtere, for
avancerede systemer til at replikere sådanne
hvis bare man kunne huske at alle funktioner Et data warehouse kan være løsningen på
– men har man ikke et sådant til rådighed og
hvor Null indgik returnerede Null, så kunne mange forskellige problemer. Artiklen giver et
alligevel har brug for et effektivt load-værktøj
det vel gå an? Eller hvordan er det nu det er? kort historisk tilbageblik på data warehouse
og ikke er tilfreds med de gratis tilbud (f.eks.
Martin Jensen og viser vigtigheden af at fastslå det aktuelle
Oracle Loader) – så er der her et bud på en
formål med at (om)bygge et data warehouse.
Emner: PL/SQL løsningsmodel, som kan bygges op i ren
Erik Haahr PL/SQL.
Ratios er for tabere, Wait-interfacet Emner: Data Warehouse Jacob Dybbro
er konge - OE nr 3
Performace Vurdering af PL/SQL- Emner: DBA
Her argumenteres for anvendelen af Oracles
Wait-Interface frem for de traditionelle Ratio- rutiner - OE nr 2 ChangeGroup PL/SQL Server Pages
lister, som mange stadig holder sig til, når Fra version 8.1.5 af Oracle, har det været - OE nr 1
deres Oracle-applikationer skal optimeres. muligt at foretage performace monitorering af
ChangeGroup PL/SQL Server Pages er et
Mogens Nørgaard plsql-rutiner i kernen. Til dette findes en mere
nyt udviklingsværktøj til Web-projekter, der
eller mindre kendt dbms-pakke ved navn
Emner: DBA har brug for integration mellem en Oracle
dbms_profiler, som jeg gennemgår i denne
database og tynde Web-klienter som f.eks.
artikel.
Asynkron check af Relationer - OE nr HTML, XML, samt WML (WAP). Produktet
3 Rune Mørk gør det på den enkleste og mest brugerven-
Emner: DBA lige måde muligt at Web-enable forret-
Hvis man af den ene eller anden grund ikke
ningslogik udviklet i PL/SQL.
kan anvende database-kernens ‘Primary key
Forslag til Forskellige Afprøvninger - Finn Ellebæk Nielsen
/ foreign key relationship constraints’ (eksem-
pelvis i Data Varehuse), kan det måske være OE nr 2
Emner: Web
en mulighed fra Designers Repository at Her gennemgås problemer ved traditionel
generere et script, der checker i hvor høj test/afprøvning i en seperat fase efter syste- Omgå Y2K-Fejlen I Oracle Installer -
grad de logiske relationer alligevel stemmer mudviklingen, og der foreslås alternativer til OE nr 1
rimeligt i databasen. Dette notat beskriver en seks forkellige typer afprøvninger.
Tip.
mulig løsning. Christian Bastlund
Rasmus Winther Hansen
Martin Jensen Emner: Metode, Designer
Emner: Installation
Emner: DBA, Designer
Om forskellige slags Indexes - OE nr
Lidt om PRIMARY KEYs - OE nr 3 2
Når man foretager en fysisk database-imple- Denne artikel kaster lys over hvilke index-
mentation, skal man blandt meget andet tage varianter der er anvendelige til hvilke slags
stilling til, hvilken slags primærnøgler, man vil operationer.
have på sine tabeller. Der findes
Martin Jensen
grundlæggende to slags primærnøgler:
betydningsbærende og ikke-betydnings- Emner: DBA

OracleEkspert December 2001 13


Designer
PLAYING THE LIBRARY CARD
John Caputo
Teknisk Artikel Reprinted by permission from the ODTUG 2001 Conference Proceedings.

Introduction proportioned columns and rows containing the


prompts and input fields. Under many circumstances,
Since release 2.1 of Designer, you have been able to this may be acceptable, but it makes for a boring form.
customize WebServer Generator (WSG) modules by Although you have sufficient flexibility for adding text
adding your own code for routines and events that is before and after the form in the Top of Form and
included in the generated code. Some page layout Bottom of Form text areas, formatting of prompts and
customization has also been possible by adding code text within the form is not supported by WSG.
to the User Text areas of WSG module pages. Many
people are familiar with these two types of WSG mod- Layout Constraints Of A Standard
ule customization. This paper explores a method to WSG Module View Form
extend standard WSG module page layout through
customizing the WebServer Generator Library Why Custom Layout?
(WSGL) package. It is divided into the following sec-
One of the most notable shortcomings of WSG mod-
tions.
ules is the rigid layout of fields on the generated page.
• A look at a standard WSG Module View Form
Another shortcoming is the lack of control of display
• Constraints of a standard form characteristics that Designer generates, although
• Page layout procedures and functions in the they are easily achievable within HTML. For example,
WSGL package it is highly desirable to change the look of mandatory
• Designer Generation Preferences input prompts from optional input prompts. I have
• Creating custom code driven by preferences always wanted the prompts for mandatory items to
and standard conventions display in a different color than the other prompts,
• Adding a multi-lingual utility to custom code such as red, or alter their font characteristics, or both.
When writing web server PL/SQL by hand, I would
A Standard WSG Module View Form span HTML table columns for input fields whenever
the size of the input area was overly long, e.g.,
First, let’s become familiar with a typical WSG View description fields. Designer has no way to control
Form. Two examples are illustrated in Figure 1 and spanning in layout of a generated web page.
Figure 2. These View Forms were generated using
default formatting preferences. Four primary constraints of WSG module
Layout Items in Table is the default value for the forms
Layout Style generator preference for all the WSG 1. Cannot format prompt text on a per item basis.
forms (as above) and is probably the most commonly 2. Cannot position prompt text in relation to the
used layout preference. Using this style as illustrated input field (above, below, before, after, etc.).
in Figure 1 and 2 produces a nicely laid out form in 3. Cannot span HTML columns for large input

Figure 1. Typical WSG View Form - One Item Per Line (Table Layout Style)

14 December 2001 OracleEkspert


Figure 2. Same WSG View Form – Two Items Per Line (Table Layout Style)

fields. 3. LayoutRowStart
4. Cannot include extended descriptive text 4. LayoutRowEnd
between input fields (instructions or explana- 5. LayoutHeader
tion). 6. LayoutData
These were the driving issues when I first looked into Descriptions of the routines from the source code
customizing layout, but what I really wanted was a comments appear below.
complete custom layout capability using my own
PL/SQL. This meant being able to specify custom lay- WSGL Layout Routines
out at generation time with available Designer module LAYOUTOPEN.
properties. An added bonus would be the ability to
designate a named style, allowing many different cus- See figure 3.
tom layout options. I concluded that modifying the The LayoutOpen procedure initializes variables that
WSGL library layout routines might work. I studied the are used by some of the other routines (see figure 4).
code and found I could make minor modifications to LayoutOpen also sets the opening HTML tags based
the existing code to call custom layout routines.
Furthermore, I could base the calls and layout on the -- Initialise the layout parameters
contents of two Designer preference settings.
LayStyle := p_layout_style;
Page layout procedures and func- LayCustomBullet := p_custom_bullet;
LayBorderTable := p_border;
tions in the WSGL package LayVertBorderChars := ' ';
LayHoriBorderChars := NULL;
Let’s look at the WSGL routines that are used to lay-
LayNumOfCols := 0;
out forms. The following procedures in the WSGL LayCurrentCol := 0;
package are the layout routines.
Figure 4. Layout Parameters – as initialized
1. LayoutOpen
in LayoutOpen procedure
2. LayoutClose

-- Name: LayoutOpen
--
-- Description: This procedure is used to set up information which will
-- control how data/fields are layed out in the generated
-- pages. A number of layout styles are supported, defined
-- by the constants LAYOUT_TABLE, LAYOUT_BULLET etc
--
-- Parameters: p_layout_style IN The layout style
-- p_border IN If layout style is TABLE, should the
-- table have a border
-- p_custom_bullet IN If the layout style is CUSTOM, the
-- expression to use as the custom bullet

Figure 3. LayoutOpen.

OracleEkspert December 2001 15


on the Layout Style generator preference (see figure erated module packages. Figure 11 is a clip from a
5). FormView procedure showing calls to the layout rou-
tines.
if (LayStyle = LAYOUT_BULLET)
then
As can be seen here, there are two calls to the
-- Open List LayoutData procedure for every item displayed. The
htp.ulistOpen; first call to LayoutData is for the leading prompt; the
elsif (LayStyle = LAYOUT_NUMBER) second call is for the item and the trailing prompt, if
then one is included. If the item is an input field, there is an
-- Open List imbedded call to a function that builds the HTML for
htp.olistOpen; the type of input control.

Figure 5. Setting the opening HTML tags Designer Generation Preferences
based on Layout style preferences
Using the Item layout style Preference
LAYOUTCLOSE. All forms of a WSG module have a Layout Style gen-
-- Name: LayoutClose
erator preference. By choosing ‘Layout items in a cus-
-- tom list’ for the View Form preference Item layout style
-- Description: End the layout area. (ZONVLS), the LayStyle variable will be set to CUS-
-- TOM by the LayoutOpen procedure. The purpose of
-- Parameters: None this preference is to indicate the layout should be a list
with a custom bullet. After studying the code, it
Figure 6. LayoutClose became obvious it had potential to be used for a sim-
ilar but different purpose. Minor modifications to the
WSGL code could direct the logic to custom layout
LAYOUTROWSTART. code. If the LayStyle variable value is CUSTOM, then

-- Name: LayoutRowStart
--
-- Description: Starts a 'row' in the current layout style. This may be
-- a real row if it is a table, or a new list item for lists
-- etc.
--
-- Initialises the variable LayOutputLine which is used to
-- build the entire 'row' until it is printed using
-- LayoutRowEnd().
--
-- Parameters: p_valign IN The verical alignment of the row if TABLE
--
Figure 7. LayoutRowStart

LAYOUTROWEND.

-- Name: LayoutRowEnd
--
-- Description: If anything in the current row, it is output using htp.p()
-- procedure, and then LayOutputLine is cleared.
--
-- Parameters: None
--
Figure 8. LayoutRowEnd

LAYOUTHEADER.

-- Name: LayoutHeader
--
-- Description: This is used when layout style is TABLE or PREFORMAT and
-- defines the 'Columns' of the table. Each has a width
-- (not used for TABLE), an alignment and a title. The pl/sql
-- tables LayColumnWidths and LayColumnAlign are initilaised in
-- order that later calls to LayoutData will be correctly
-- position data/fields.
--
-- This procedure has no effect when layout style is not
-- TABLE or PREFORMAT,
Figure 9. LayoutHeader

LAYOUTDATA. custom PL/SQL procedures can be called and the


See figure 10. standard layout logic can be bypassed.
These routines are called from procedures in the gen-

16 December 2001 OracleEkspert


-- Name: LayoutData
--
-- Description: Add the text to LayOutputLine in the current layout style,
-- in prepeartion for being written out by a call to
-- LayoutRowEnd.
--
-- Parameters: p_text IN The text (or field definition etc, any html)
-- to be output.
--
Figure 10. LayoutData

Using the HTML for custom list item Preference 1. CustomOpen


Further investigation of the code executed whenever 2. CustomClose
LayStyle was CUSTOM, showed the use of the vari- 3. CustomRowStart
able LayCustomBullet. LayCustomBullet contains the 4. CustomRowEnd
value of the preference HTML for custom list item 5. CustomData
(MODCLH). A custom bullet would normally be a refe- Initially, I copied the code from the standard proce-
rence to an image path or some other HTML. This dures into the custom ones. Much of the standard
preference is optional and strictly text. Therefore, code was useful as is. I also wanted the custom pro-
interrogating the value of LayCustomBullet for specif- cedures to produce the same custom bulleted list as
ic custom layout properties could be used to direct the the original procedures whenever there were no cus-
output of the custom PL/SQL.

WSGL.LayoutOpen(WSGL.LAYOUT_TABLE);

WSGL.LayoutRowStart;
for i in 1..VF_NUMBER_OF_COLUMNS loop
WSGL.LayoutHeader(7, 'LEFT', NULL);
WSGL.LayoutHeader(14, 'LEFT', NULL);
end loop;
WSGL.LayoutRowEnd;

WSGL.LayoutRowStart('TOP');
WSGL.LayoutData(htf.bold('Deptno:'));
WSGL.LayoutData(FORM_VAL.DEPTNO);
WSGL.LayoutRowEnd;
WSGL.LayoutRowStart('TOP');
WSGL.LayoutData(htf.bold('Dname:'));
WSGL.LayoutData(WSGL.BuildTextControl('DNAME', '14', '1', '14', FORM_VAL.DNAME));
WSGL.LayoutRowEnd;
WSGL.LayoutRowStart('TOP');
WSGL.LayoutData(htf.bold('Loc:'));
WSGL.LayoutData(WSGL.BuildTextControl('LOC', '13', '1', '13', FORM_VAL.LOC));
WSGL.LayoutRowEnd;

WSGL.LayoutClose;
Figure 11. Typical set of calls to the WSGL layout routines in a View Form.

tom layout properties specified.


Creating custom code driven by
Then I modified the standard layout procedures to call
preferences the custom procedures whenever the layout style
To keep the customization of layout consistent with (LayStyle) was CUSTOM, and to replace, bypass or
the structure of the standard WSGL code, I added the ignore, by commenting the lines, the original WSGL
following procedures to the WSGL package. code. Not all procedures had a check for a LayStyle of
CUSTOM, so I added an If LayStyle = LAYOUT_CUS-
TOM statement to any
-- JJC ********* Start Custom Code ************** standard procedures with-
elsif (LayStyle = LAYOUT_CUSTOM) out one (see figure 12).
then
Some code was replaced
-- Open Custom Layout
CustomOpen(Laystyle, LayBorderTable, LayCustomBullet); with a call to a custom rou-
--JJC ***** End Custom Code ***** tine (see figure 13).
Figure 12. - Adding an ‘if’ condition to call the custom routine Formatting prompt
text on a per item
-- JJC ********* Start Custom Code ************** basis
CustomRowStart(p_valign);
-- JJC Remove next original line by commenting Once I could direct the
-- LayOutputLine := LayCustomBullet || ' '; logic to the custom rou-
-- JJC ********* End Custom Code ************** tines, I worked on how to
Figure 13. – Replacing the original code with a call to a custom routine eliminate each of the con-

OracleEkspert December 2001 17


straints described above. I wanted the prompt and input field to have this look:
To get mandatory field prompts to display differently, I
used a convention in the prompt text to identify a
mandatory field. Many web pages indicate mandatory
input fields by placing an asterisk (*) at the start of the
In a similar fashion to ALLOWHTML, a special string
prompt. Using this convention makes detecting a
was added to the HTML preference to indicate the
mandatory field easy. Since the LayoutData proce-
prompt and field position. I used the value STACKED.
dure is called twice for every field on Insert and View
The normal way the WSGL routines build the code for
Forms, the first call is always the leading prompt. A
the prompt is to open an HTML table cell with a <TD>
simple PL/SQL parsing routine finds and removes the
tag, add the prompt enclosed in bold tags, then close
the cell with a </TD> tag. For the
if substr(ptext,1,1) = ‘*’ then STACKED positioning and format, the
ptext = substr(ptext,2); cell is opened, the prompt is enclosed in
ptext = ‘<FONT COLOR=”red”>’||ptext||</FONT>’; font tags reducing the size, and, instead
end if;
of closing the cell, a <BR> tag is
appended. The tag to close the cell
Figure 14. – Displaying a mandatory field prompt in red comes after the field on the second call
to the LayoutData, and in turn,
CustomData, function. There is a caution here when
leading asterisk in the leading prompt, and adds the
using split prompts (some of the prompt text before
HTML to change the color of the prompt.
the field and some after). The second call to
A more flexible option would be to allow the prompt LayoutData includes a string with both the field and
text itself to contain the HTML. The WSG uncondi- the trailing prompt text. It gets a bit tricky parsing this
tionally replaces any HTML reserved characters from string given the many formatting options for the input
the prompt with special HTML strings (e.g. a ‘<’ field (pop lists, radio buttons, check boxes, etc.) or the
becomes &lt;) to render the characters as entered. I display formatting (BOLD, IMAGE, URL, etc) .
added a value to the HTML preference
Fortunately, this STACKED format style virtually elim-
(LayCustomBullet variable) so I could direct the code
inates the need to use split prompts. Instead I can
include all the information
CusPromptString := REPLACE(CusPromptString,'&lt;','<'); in the leading prompt, or,
CusPromptString := REPLACE(CusPromptString,'&gt;','>'); in combination with
Figur 15. – Replacing special strings to re-activate HTML in a prompt ALLOWHTML, I can have
a multi-line leading
prompt by imbedding a
to reverse the effect of the WSG replacement. I used
<BR> tag in the prompt. Again, the limit here is 130
the value, ALLOWHTML. If the preference contained
characters, including the HTML tags.
this string then execute:
Any HTML in the prompt will now be interpreted and Span HTML columns for large input fields
rendered by the browser. This adds the full extent of This requirement only applies to a form that has 2 or
HTML to the prompt text. Each prompt can now be more items per line and uses an HTML table to align
formatted individually. Use your creativity to produce prompts and fields. A form with a long input field will
many different effects, not just formatting the prompt have the field squashed into a single cell by reducing
text. The only limitation is the prompt property’s maxi- its width, or the form requires left and right scrolling.
mum length of 130 characters (why it is this short is Left and right scrolling is HIGHLY undesirable on
odd, since many other module text properties are 240 HTML pages. Down scrolling is much more accept-
characters). able. Spanning is a commonly used <TD> tag
CAUTION attribute to display long fields.
The prompts are also used in the heading of Record The code changes for spanning are applied to the
Lists. If you are trying to be ‘creative’ on the standard WSGL code for a LayStyle of TABLE. I also
Insert/View Forms, the Record List can look very added an additional value, TABLE, for custom layout
strange. Fortunately, there is a separate WSGL rou- in an HTML table. The code copied from the standard
tine for the Record List headers, so you can code procedures to handle 2 or more items per line is left
around this problem by removing the HTML from the intact. Therefore, logic for spanning columns was
prompt in that routine. added to both the standard and the custom proce-
dures.
Position prompt text in relation to the
input field A WSGL package span length variable holds a value
used to determine when to span columns. Another
I had seen many forms on web sites where I pur- variable was defined to indicate the number of
chased products or had to register that had prompts columns to span. The generated code for an
above the input field. The prompt was also smaller <INPUT> tagged field includes a WIDTH value that is
than the normal body text. This was attractive for two compared to the span length. For displayed data, the
reasons: SQL LENGTH function is used to return the length for
1. You can get more fields horizontally on a form to comparison. Some additional exception logic is
minimize any left/right scrolling or wrapping of required in the code for special formatting that may
prompt text. not have bearing on spanning, such as the path to
2. You can have a longer prompt and not worry images. When the width or length of the field exceeds
about wrapping. the span length, a COLSPAN attribute is added to the

18 December 2001 OracleEkspert


<TD> tag, and other control variables for managing gual application, but not insurmountable. The imple-
layout of rows are adjusted accordingly. mentation section below describes how to work with-
in this constraint.
Include extended descriptive text between
input fields Client-side validation error Text
There’s another option available for special formatting On the client-side, validation error text is provided
of prompts and descriptive text for a given item – through JavaScript routines in pop up windows. The
Dynamic SQL. Using another convention in the JavaScript code is generated into a separate module
prompt, you could indicate the name of a function that package that produces the JavaScript for the mod-
would provide the prompt formatted in any way you ule’s web pages. There is no equivalent set of
wish and additionally any text before or after the Designer provided JavaScript message text in multi-
prompt. You can supply instructions or explanations ple languages. Even though Oracle Designer devel-
so users are guided to enter relevant content into the opment has been kind enough to provide server-side
field. This is impossible to do on a standard generat- text in many languages, you still cannot deploy the
ed form, but a very common requirement in self-ser- application in a chosen language simply by using the
vice web applications. server-side versions of WSGLM in that language. You
must also have translations for client-side validation. A
Using Dynamic SQL to execute stored procedures or
method around this problem is also described in the
functions gives you a very powerful way of altering
implementation section.
content well beyond the standard generated code. In
particular, this technique is very attractive for any data Implementing a multi-lingual module
driven content or to display text maintained by the
This is how you put all the pieces above together.
user in a database table. In the latter case, you can
eliminate the need to regenerate and recompile for 1. Build up your module in English until it meets
text changes easily managed by the user with a sim- your requirements. To be able to specify a lan-
ple standard WSG form. guage, set the form’s Item Layout Style to CUS-
TOM using the methods described above.
Adding a multi-lingual utility to 2. Copy and rename the module for each language
you wish to implement.
custom code
3. Add a language parameter to the custom layout
After having looked at the techniques above, it isn’t HTML preference that will trigger your added
much of a stretch to discover a way to translate custom layout code to look up the translation for
prompts. In fact, the translated text can be stored in a the prompts.
translation table. The table contains the original 4. Copy the JavaScript validation function
prompt, the language of the translation and the trans- (Typically the function [module-name]_Validate)
lated prompt. Add an additional value to the custom from the English module’s web pages, and trans-
layout HTML preference to indicate the language. late the English messages into each language.
When a language is specified, you parse the prompt Add this JavaScript to each form as part of the
string from the generated HTML, look up the translat- Top of [form type] text area, to ensure it follows
ed prompt from the translation table, and replace the the generated definition. This effectively replaces
original prompt. the generated JavaScript function definition with
There is more to obtaining a full multi-lingual capabili- yours. If you want the translation to be data driv-
ty than just translating prompts. en, include a call to a function that will do the
1. Server-side validation error text, button text and translation through a look up to a translate table,
other text produced by the generated code as was described for translating prompts above.
needs to be in the desired language. (See Note below).
2. Client-side validation error text needs to be in the 5. Create public synonyms that point to the tables
desired language. and WSGL packages, except WSGLM, in the
original schema, and grant necessary permis-
Server-side validation error Text, etc. sions to the foreign language schema owner
The server-side error text strings are supplied by 6. Create schemas for each language and compile
another WSG library package, WSGLM. This pack- the appropriate WSGLM package into the
age has no package body and is only a set of con- matching schemas.
stants defining various text strings. Designer comes 7. Generate your modules and compile them into
with several versions of this package in a variety of the matching schemas.
languages. They can be found in the folder on your 8. Create a DAD (Database Access Descriptor) in
hard drive with the other WSG library PL/SQL source the web server for the foreign language schema
code, typically [ORACLE_HOME]/cgenw60/cvwetc. owner.
The filenames have a suffix to indicate the language,
Once you complete all of the above, you set up links
e.g.,
to each of the DAD/module combinations. When the
wsglme.pks is Spanish, wsglmi.pks is Italian, user enters data into the fields in their language, the
wsglmd.pks is German, etc. You implement the text in data will be updated in a single table, or any invalid
the chosen language by compiling the code in the file entries will display an equivalent message in that lan-
into your application schema. The WSGLM package guage.
then contains the text in the chosen language. You NOTE:
CANNOT have more than one language in the
WSGLM package at a time. Therefore, each lan- I investigated the use of another Designer feature for
guage version of WSGLM must exist under its own the translation of the client-side (JavaScript) valida-
schema. This presents a small problem for a multi-lin- tion, but found it did not work as documented. Under

OracleEkspert December 2001 19


a module component there is a folder for Application Conclusion
logic, and, under that, there is a folder for Events. If
you chose to create an Event, a dialog box appears Just as you would spend some time working on a tem-
with a list of events for you to chose. Only one is a plate or a library for Oracle Forms, you need to spend
client-side event, Validate. Select this and click Next. some time to build your custom library routines for a
A dialog box appears with two named events already WSG application. Just as you would put in more time
in the box. When you click on either of these, an to ensure the templates are highly reusable, you
Override button becomes active. The help for this but- would want to do the same with your custom PL/SQL
ton is vague and confusing. It says, “To override the for your WSGL library packages. The payback comes
logic that is automatically generated by an Oracle with every module thereafter. It will only require setting
Designer Generator with your own code (user-modi- a couple of Generator Preferences to greatly expand
fied application logic), click this button.” No other help the layout of your forms. This method could be more
describes what to do next or what effect clicking the data driven, since you have the full power of PL/SQL
Override button has on the generated code. If you at your disposal. Instead of using generator prefer-
click the button then add a name for your routine and ences, you could use tables to control the layout. This
click Next, the following dialog box has a pop list acti- would be a nice benefit to a Designer generated soft-
vated to indicate what code will be overridden by your ware product by allowing customization from setting
routine. I chose Client-Side Data Validation. Click on parameters in system configuration tables.
Finish to open the Logic Editor for this routine. I pre- What has been described here is only the tip of the
sumed I should enter client-side native JavaScript iceberg. Once the PL/SQL is written to parse the con-
logic. After generating and compiling, I got a compile tent that WSG passes to the layout routines, you have
error. I could eliminate the compile error if my module complete freedom to produce just about any layout
had both Insert and Update operations set. you want. Try it. You may just like it.
Nevertheless, the automatically generated client-side
validation code was not overridden. Had this feature
worked as documented, it would have been the pre-
ferred method for client-side translation.

20 December 2001 OracleEkspert


Spred det glade budskab!
Referer abonnenter og få
signerede og numererede
tryk af Oraclerne
(se nederst på siden)

Fax eller send kuponen til:

Pythia Information
Kongensvej 3
2000 Frederiksberg

Fax: 26199991

Eller bestil via vores hjemmeside:


ABONNEMENT
http://www.OracleEkspert.dk

Eller e-mail nedenstående oplysninger til:


Ja tak, jeg ønsker:
salg@OracleEkspert.dk
___ stk OracleEkspert nr 1 - DKK 125,00 pr stk ...............................................................................DKK __________
___ stk OracleEkspert nr 2 - DKK 125,00 pr stk ...............................................................................DKK __________
___ stk OracleEkspert nr 3 - DKK 125,00 pr stk ...............................................................................DKK __________
___ stk OracleEkspert nr 4 - DKK 125,00 pr stk ...............................................................................DKK __________
___ stk OracleEkspert nr 5 - DKK 125,00 pr stk ...............................................................................DKK __________
___ stk OracleEkspert nr 6 - DKK 125,00 pr stk ...............................................................................DKK __________
___ stk OracleEkspert nr 7 - DKK 125,00 pr stk ...............................................................................DKK __________
___ stk OracleEkspert nr 8 - DKK 125,00 pr stk ...............................................................................DKK __________
___ stk OracleEkspert nr 9 - DKK 125,00 pr stk ...............................................................................DKK __________

___ stk OracleEkspert nr 1-6 - DKK 600,00 pr stk............................................................................DKK __________

___ stk 1 års abonnement (6 numre) - DKK 600,00 pr stk...............................................................DKK __________


Jeg vil gerne begynde abonnementet med OracleEkspert nr: _____

- 40% ved samtidig køb af minimum 5 ens blade eller abonnementer..........................................................DKK __________
- 45% ved samtidig køb af minimum 10 ens blade eller abonnementer........................................................DKK __________
- 50% ved samtidig køb af minimum 20 ens blade eller abonnementer........................................................DKK __________
- 60% ved samtidig køb af minimum 50 ens blade eller abonnementer........................................................DKK __________

Bemærk: Når abonnementerne købes med mængderabat bliver alle blade


sendt i én samlet forsendelse. Det er altså ikke muligt at få bladene sendt
til individuelle modtagere.

Pris i alt .................................................................................................................................................DKK __________


Priserne er excl moms.
Firma: ____________________________

Navn: ____________________________ Ved hver tegning


af minimum 1 års abon-
Adresse: ____________________________ nement på OracleEkspert
sender vi et stk signeret
Postnr/By: ____________________________ kvalitetskopi af Oraclerne til den
læser, som har refereret den nye
Land: ____________________________ abonnent til os.

E-mail: ____________________________ Kopien er trykt på kraftigt papir. Den er


nummereret og signeret med rød tush.

Refereret af: ____________________________ En OracleEkspert-læser er en person


med eget abonnement eller en per-
Adresse: ____________________________ son ansat i et firma, som har tegnet
abonnement på OracleEkspert.
Postnr/By: ____________________________
Man kan ikke referere et
Som referencegave ønskes en signeret kopi af Oraclerne fra abonnement til sig
selv.
OracleEkspert:

Nr 1 Det er fordi de ikke kan li’ fremmednøgler ................................................................................................ [ ]


Nr 2 Det er jo også vores Designer mand.......................................................................................................... [ ]
Nr 3 Har du prøvet at skifte din Where-clause ud med en Santa clause?...................................................... [ ]
Nr 4 Pro*C.............................................................................................................................................................. [ ]
Nr 5 No more table space.......................................................................................................................................[ ]
Nr 6 Komme i Forms ..............................................................................................................................................[ ]
Nr 7 Rodeo...............................................................................................................................................................[ ]
Nr 8 Joins ................................................................................................................................................................[ ]

OracleEkspert December 2001 21


26. november 2001 19. november 2001 Larry Ellison har udtalt at Oracle

Nyheder
Borland og Oracle samarbejder Oracle9i og HP Superdrome slår ikke er interesseret i at få nogen til
rekord at holde op med at bruge Outlook,
Den nye version af Borlands men han mener, at man ikke bør
JBuilder 6 vil indeholde værktøjer til En ny TPC-C (Transaction gemme sine mails på hundredvis
direkte integration med Oracle9i Processing Council) benchmark af Exchange servere, men hellere
Application Server. Der vil oven i test af Oracle9i på HPs PA-8700 skulle have dem liggende på en
købet være inkluderet en licens til Superdrome server med 64 eller to Oracle databaser.
Oracle9iAS. CPU’er målte 389434 transaktioner
per minut.
6. november 2001
21. november 2001 IBMs beste resultat med DB2 er
på 163776 tpmC, mens Microsoft Oracle ”Help Us Help”
OpenWorld på eBay Foundation
for nyligt offentliggjorde en måling
For dem, som gerne vil støtte af Sql Server 2000 på en Unisys I dag annoncerede Oracle opret-
ofrene fra 11. september, kan man ES7000 på 165219 tpmC. telsen af Oracle ”Help Us Help”
byde på billetter til OpenWorld, et Foundation, som skal forære inter-
Oracles opstilling gav desuden den
sæt af bøger fra Oracle Press og net udstyr til skoler og ungdomsor-
billigste performanceløsning på
tøj fra Henry Lloyd hos eBay. ganisationer i USA og internation-
USD 21.24 /tpmC.
Alle pengene går ubeskåret til det alt, der ikke selv har råd il det.
amerikanske Røde Kors. Udstyret vil være Oracle-software,
15. november 2001
men også net-computere, hubs,
SAP er 65% hurtigere på Oracle laserprinere, kabler mv.
20. november 2001
end på DB2
Oracle OLAP 3-1 over IBM Bestyrrelsen består af fire under-
Begge målinger er overvåget og visere fra Standford University og
I en undersøgelse lavet af certificeret af SAP. tre Oracle-chefer der iblandt Larry
Survey.com vandt Oracle gangne Ellison.
så mange stemmer som IBM i
spørgsmålet om det bedste 13. november 2001 Oracle har afsat USD 6 mill til det
”OnLine Analytical Processing” Oracle vinder undervisningspris første års gaver.
system. Oracle vandt prisen ”2001
Oracle fik over 50% af stemmerne Corporate University of the Year 30. oktober 2001
som den databaseleverandør af Distinguished Performance Award” Small Business Suite på top 100
Datawarehouse og Business uddelt af National Alliance of
Intelligence løsninger. Business. PC Magazine placerede Oracles
Small Business Suite blandt de 100
BC4J-generator i Designer Oracle gør MS Outlook bedste web sites.
Sue Harper, som er Product ‘Unbreakable’
Oracle Small Business Suite vandt
Manager hos Oracle annoncerede Oracle annoncerer Oracle Email også Editor’s Choice Award i begy-
på ODTUGs mailliste at Designer Migration Service. ndelsen af året.
team’et nu arbejder på at lave en Landis ICT er ifærd med at
BC4J-generator til Designer. OSBS er sæt host’et web-applika-
omlægge 44 Microsoft Exchange tioner, der tilbyder små virk-
servere til et Oracle9i Real somheder finansstyring, CRM, ind-
Application Cluster, hvilket vil ned- køb og e-handel.
bringe mængden af software, hard-
ware og administration, mens
sikkerhed og stabilitet styrkes.

22 December 2001 OracleEkspert


Deadline for Artikler til
OracleEkspert nr 10
er den 11. januar 2002

Vi betaler 700 kr pr side

Oracle User Group Denmark er en selvstyrende gruppe for Oracle-brugere. Det er for tiden gratis at være medlem,
dog skal man have en Oracle-databaselicens for at kunne blive medlem.

OUGDK
Gruppen består af en bestyrelse og et antal Special Interest Groups, som afholder møder i Oracle Danmarks lokaler i
Ballerup. Indkaldelse til møderne sker via brugergruppens mailliste og via brugergruppens web-side (www.oug.dk).
OUGDK Stormøde
Koordinator: Lone Aalekjær, loaal@wmdata.com
Møde: 12. december 2001 kl. 13:30
Sted: Oracle Danmark, Lautrupbjerg 2-6, 2750 Ballerup
Emne: Select max(udbytte) from Support - Frank Torreck fortæller om iTar, Metalink og hvordan vi bedst udnytter support-
værktøjerne.
DBA SIG
Koordinator: Jean-Marc Pedersen
Næste møde er endnu ikke fastlagt.
Designer SIG
Koordinator: Marc de Oliveira, Marc@deOliveira.dk. Forslag til mødeemner modtages meget gerne.
Møde: 9. januar 2002 kl. 13:00
Sted: Oracle Danmark, Lautrupbjerg 2-6, 2750 Ballerup
Emner for næste møde (den endelige angenda er ikke helt besluttet. Følg med på www.deoliveira.dk/ougdk):
- JRAD: JDevelopers svar på Oracle Forms
Developer SIG
Koordinator: Lone Aalekjær, loaal@wmdata.com
Næste møde er endnu ikke fastlagt.
Data warehouse SIG
Koordinator: Erik Haar, erh@lundbeck.com
Næste møde er endnu ikke fastlagt.
Web SIG
Koordinator: Måske Benjamin Lund, blf@bellcom.dk (dette er ikke bekræftet endnu)
Næste møde er endnu ikke fastlagt.

Husk at tilmelde dig til møderne hos Christian.Graversen@Oracle.com (ellers får vi for få kager/vand!!)

OracleEkspert December 2001 23


www.seeristic.com

Versionen til Web -U


U de nu!
Templates, biblioteker og værktøjer

til

Designer 6i

&

Forms Builder

You might also like