24
December 2001 Nr 9, Årgang 2 ISSN 1600-5147 Pris: kr. 125,00 ex moms www.OracleEkspert.dk RELATIONSDATABASENS BEGRÆNSNINGER 4 Rune Mørk Jeg har gennem mange år virket som Oracle konsulent, og ved gentagne lej- ligheder prist relationsdatabasens principper som værende logiske, forståelige og letanvendelige. På et projekt, jeg gennemførte for nylig, hvor 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 del af datamodellen det drejer sig om, forklare om andre situationer hvor samme model vil frembringe de samme problemer, tilbyde en løsningsmodel og i forbindelse med denne gennemgå lidt teori om tilstandsmaskiner, da de viste sig at være meget anvendelige til dette problem. STORED OUTLINES 8 Johannes V. Djernæs & Mogens Nørgaard Vi har i Miracle A/S haft en del fornøjelse ud af Stored Outlines. Én af sagerne 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! PLAYING THE LIBRARY CARD 14 John Caputo Since release 2.1 of Designer, you have been able to customize WebServer Generator (WSG) mod- ules by adding your own code for routines and events that is included in the generated code. Some page layout customization has also been possible by adding code to the User Text areas of WSG module pages. Many people are familiar with these two types of WSG module cus- tomization. This paper explores a method to extend standard WSG module page layout through cus- tomizing the WebServer Generator Library (WSGL) package. It is divid- ed into the following sections. NYHEDER 22 Borland og Oracle samarbejder OpenWorld på eBay Oracle OLAP 3-1 over IBM BC4J-generator i Designer Oracle9i og HP Superdrome slår rekord SAP er 65% hurtigere på Oracle end på DB2 Oracle vinder undervisningspris Oracle gør MS Outlook ‘Unbreakable’ Oracle ”Help Us Help” Foundation Small Business Suite på top 100 OUGDK 23 OUGDK Stormøde Møde: 12. december 2001 kl. 13:30 DBA SIG Næste møde er endnu ikke fastlagt. Designer SIG Møde: 9. januar 2002 kl. 13:30 Developer SIG Næste møde er endnu ikke fastlagt. Data warehouse SIG Næste møde er endnu ikke fastlagt. Web SIG Næste møde er endnu ikke fastlagt. #9 Glædelig Jul! Klip ud og hæng op Se side 11

#9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

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

RELATIONSDATABASENS BEGRÆNSNINGER 4Rune Mørk Jeg har gennem mange år virket som Oracle konsulent, og ved gentagne lej-ligheder prist relationsdatabasens principper som værende logiske,forståelige og letanvendelige. På et projekt, jeg gennemførte for nylig, hvorjeg skulle fremstille skærmbilleder i forms, fandt jeg en af de relationelle prin-cippers ofre, nemlig brugervenligheden. I denne artikel vil jeg beskrive dendel af datamodellen det drejer sig om, forklare om andre situationer hvorsamme model vil frembringe de samme problemer, tilbyde en løsningsmodelog i forbindelse med denne gennemgå lidt teori om tilstandsmaskiner, da deviste sig at være meget anvendelige til dette problem.

STORED OUTLINES 8Johannes V. Djernæs & Mogens NørgaardVi har i Miracle A/S haft en del fornøjelse ud af Stored Outlines. Én af sagernevar 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 dereftergav sig til at vokse. Når en one-liner SQL har en parsetid på 800 sekunder børman kigge på det – det har nu altid været mit motto!

PLAYING THELIBRARY CARD 14John Caputo Since release 2.1 of Designer, youhave been able to customizeWebServer Generator (WSG) mod-ules by adding your own code forroutines and events that is includedin the generated code. Some pagelayout customization has also beenpossible by adding code to the UserText areas of WSG module pages.Many people are familiar with thesetwo types of WSG module cus-tomization. This paper explores amethod to extend standard WSGmodule page layout through cus-tomizing the WebServer GeneratorLibrary (WSGL) package. It is divid-ed into the following sections.

NYHEDER 22Borland og Oracle samarbejder OpenWorld på eBay Oracle OLAP 3-1 over IBM BC4J-generator i Designer Oracle9i og HP Superdrome slår rekord SAP er 65% hurtigere på Oracle endpå DB2 Oracle vinder undervisningspris Oracle gør MS Outlook ‘Unbreakable’Oracle ”Help Us Help” Foundation Small Business Suite på top 100

OUGDK 23OUGDK Stormøde

Møde: 12. december 2001 kl. 13:30

DBA SIG Næste møde er endnu ikke fastlagt.

Designer SIG Møde: 9. januar 2002 kl. 13:30

Developer SIG Næste møde er endnu ikke fastlagt.

Data warehouse SIG Næste møde er endnu ikke fastlagt.

Web SIG Næste møde er endnu ikke fastlagt.

#9

Glædelig Jul!

Klip ud og

hæng op

Se side 11

Administrator
Bemærk: Dette tidsskrift må kun distribueres i virksomheder med OracleEkspert medlemskab
Page 2: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

ORACLEEKSPERT-PRISEN 2001Marc de Oliveira, ansvarshavende redaktør.Julen er en tid for hensyn, omsorg og gaver. Om det er baggrunden forat Oracle (ud over sine eBay-auktioner og Help Us Help Foundation) harbesluttet at udvikle en ny generator til Designer, er nok ikke sandsynligt,men ikke desto mindre sender det et signal om, at Oracle ikke helt harafskrevet Designer endnu.Jeg refererer her til Product Manager Sue Harpers offentliggørrelse påODTUGs mailliste af en ny BC4J generator, som er på tegnebrættet tilOracle9i Developer Suite release 2 (sidst i 2002). Den danske Designer SIG arrangerede straks en telekonference medhendes chef, Simon Day, den 28. november (hvor der alligevel varDesigner SIG møde), hvor han fortalte om, hvad vi kan vente os af BC4Jgeneratoren. Han bekræftede det, som Sue Harper havde sagt, oguddybede at der i første omgang kun er tale om at generere BC4J kom-ponenter (dvs ikke nogen brugergrænseflade). Ledelsesgruppen er dogopmærksom på at der vil være et stort ønske om dette, hvorfor man reg-ner med, på et senere tidspunkt, måske at kunne generere en bruger-grænseflade i det nye JRAD-produkt, som man arbejder på(JDevelopers svar på Forms). JRAD er først planlagt til at være færdigtom 18 måneder, så en Designer-generator til JRAD er ikke på tegne-brættet endnu. Næste Designer SIG-møde vil have et indlæg om JRAD.Simon Day svarede også på de udvidelsesønsker til Designer, han mod-tog ved OUGDKs Designer SIG møde den 19. september. Den 19.september var hans budskab at Designer hovedsageligt vil blive udvidetift datamodellering, mens applikationsgenerering ikke ville få megen pri-oritet. Ved telekonferencen den 28. november var forbedringer til bådeForms-generatoren og Web Server generatoren også kommet med.Også OUGDK er begyndt at røre på sig. De har inviteret til stormøde den12. december (se programmet på side 23), og noget tyder på athjemmesiden (www.oug.dk) når at komme op at køre inden mødet! Det er Miracle A/S, som har tilbudt at sørge for at hjemmesiden kommertil at virke igen. Det lader dog til, at planerne om at bruge WebDB til atlave en mere dynamisk hjemmeside er blevet udskudt.Alt i alt tyder det på, at vi får et rigtig spændende 2002.Endelig skal vi også have uddelt dette års OracleEkspert-pris til forfat-teren af årets bedste artikel. Endnu en gang er det ikke artiklens længde,der har gjort udslaget, men en klar, metodisk og systematisk tilgang tilstoffet, samt emnets generelle relevans og anvendelsesmuligheder.Disse elementer forenes på elegant vis af Rune Mørk i artiklenRelationsdatabasens Begrænsninger, som beskriver implementeringenaf en relevant tilstandsmaskine i Forms. Artiklen kan læses i dette num-mer af OracleEkspert. Prisen er som tidligere tre originaltegninger afårets tegneseriestrips Oraclerne tegnet af Jesper Dyjak, indrammet ogmed indgraveret skilt.Udover OracleEkspert-prisen har vi i år introduceret en ny pris til den per-son, organisation eller virksomhed, som har været mest entusiastisk ogsuccesfuld i arbejdet med at støtte bladet, hvadenten det er udadrettetved at udbrede kendskabet til bladet blandt læsere, skribenter og annon-cører, eller indadrettet ved at forbedre bladets indhold, struktur eller pro-duktion. Vi kalder prisen for OracleEkspert-støtten.Selv om der i år har været en del enkeltpersoner og virksomheder, somhar ydet uvurderlig støtte til bladet, så kunne prisen ikke gå til andre endMogens Nørgaard og Miracle A/S for deres ihærdige leverancer af artik-ler, indrykning af annoncer i bladet, og endelig direkte, farverig og soberkritik af redaktørens holdninger (som blev publiceret i OracleEkspert nr6). Uanset om man er enig i Mogens’ tilbedelse af Wait-interface’et ellerej, 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å treOraclerne originaltegninger i glas og ramme.Og med dette vil vi ønske alle vore læsere en rigtig glædelig jul og et godtnytår.

Oplag: . . . . . . . . . . . . . . . .250 kopier

Udgives af: . . . . . . . . . . . . . .PYTHIA Information . . . . . . . . . . . . . . . . . . .Kongensvej 3 . . . . . . . . . . . . . .2000 Frederiksberg

. . . . . . . . . . . . . . . . . . . . . . .Danmark

Telefon: . . . . . . . . . . . . . . . .26279991Fax: . . . . . . . . . . . . . . . . . . .26199991Email: . . . . . [email protected]: . . . . . . .www.OracleEkspert.dk

Ansvarshavende redaktør: . . . . . . . . . . . . . . . . .Marc de Oliveira . . . . . . . . . . [email protected]

Rettigheder:PYTHIA Information ejer alle rettighedertil indholdet af OracleEkspert. Kopiering af bladet i dele eller helhedmå kun ske efter skriftligt samtykke fraPYTHIA Information.PYTHIA Information forbeholder sig ret-tigheder til at offentliggøre og genudgivede trykte artikler, tips mv, samt at tilladebladets læsere at anvende indholdet tilsåvel personlige som kommercielle for-mål.PYTHIA Information kan ikke drages tilansvar for eventuelle fejl og mangler iIndholdet af OracleEkspert. Artikler mvstilles tilrådighed uden garanti af nogenart.

Pris:Enkeltnummer . . . . . . . . . .DKK 125,001 års abonnement . . . . . . .DKK 600,00

Ved samtidig køb af minimum 5 kopier tilsamme adresse (enkeltnummer ellerabonnement) gives 40% rabat på densamlede pris.Priserne er excl moms.

Annoncer:Annoncer til OracleEkspert nr 10 skalvære PYTHIA Information i hænde sen-est den 11. januar 2001.Annoncepriser kan findes på:

www.OracleEkspert.dk

Leder

Password: bdamsg

Page 3: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

DeadDeadlineline

er dener den

11. jan.11. jan.

20022002

Hvis dHvis du skal vindeu skal vinde

OraOracleekcleekspertspert--

prisen 2002!!!prisen 2002!!!

Vi beVi bettaleraler

700 kr.700 kr.

pr. spr. sideide

VandVandt dt du ikkeu ikke

OraOracleEkcleEkspertspert--

prisen 2001?prisen 2001?

Page 4: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

4 OracleEkspertDecember 2001

IndledningJeg har gennem mange år virket som Oracle kon-sulent, og ved gentagne lejligheder prist relations-databasens principper som værende logiske,forståelige og letanvendelige. På et projekt, jeg gen-nemførte for nylig, hvor jeg skulle fremstille skærm-billeder i forms, fandt jeg en af de relationelle prin-cippers ofre, nemlig brugervenligheden. I denneartikel vil jeg beskrive den del af datamodellen detdrejer sig om, forklare om andre situationer hvorsamme model vil frembringe de samme problemer,tilbyde en løsningsmodel og i forbindelse meddenne gennemgå lidt teori om tilstandsmaskiner, dade viste sig at være meget anvendelige til detteproblem.Danmarks Radio har verdens største gennemregi-strerede diskotek bestående af ca 1 million fono-grammer, og skulle I forbindelse med år 2000udfase deres gamle løsning og implementere en ny.Hver dag modtager diskoteket op til 50 nye fono-grammer (CD, Bånd, plader (både singler og LP)),og disse fonogrammer skal personalet gennemlytteog registrere informationer omkring til brug for plan-lægningen af radio og tv-udsendelser. Jeg går ud fra at alle mine læsere har kigget på etcover på en cd, men næppe overvejet hvilken data-model der skal til for at repræsentere den informa-tion der ligger begravet i denne. Datamodellen

(simplificeret) for et fonogram er vist i figur 1.Det vi kan se i figur 1 er at en fonogram består af etantal skæringer, hvor hver skæring har en relation tilet musikstykke, hvilket betyder at hver unikt musik-stykke er registreret for sig. Derudover er der gemtoplysninger om hvilke kunstnere der optræder påhvilke skæringer, samt hvilke instrumenter de spillerpå og hvilken rolle de indtager (solist, salgskunst-ner, dirigent osv)Denne model betyder at diskoteket kan svare påspørgsmål som:

• På hvilke numre har Paul McCartney gnas-ket grøntsager (altså som instrument)

• Hvilke numre kan fremfindes som en kombina-tion af Bach og genren Jazz og som samtidiger skrevet mellem 1718 og 1722.

• Hvilke sange har Kim Larsen forfattet og hvorhar han samtidig spillet guitar.

Design patterns er blevet meget moderne for tiden,og den datamodel jeg her viser kan med lethed til-passes andre registreringssituationer, f. eks. kunneman forestille sig at ville registrere oplysninger om

• Tv udsendelser• Antologier• Radioprogrammer• Aviser• Personer der indgår i arbejdsopgaver der er

tidsmæssigt forbundet.Alt sammen ting hvor der allerede findes en implicitrækkefølge og navngivning af data, der skal regis-treres. Dette blot for at vise at de efterfølgendeovervejelser kan bruges mange andre steder.

Traditionel brugergrænsefladeDiskoteket skulle nu bruge et eller flere skærm-billeder til at registrere disse oplysninger, og somopfostret i den relationelle verden foreslog jegbrugerne at vi lavede et master detail skræmbillede,hvor de kunne registrere alle de informationer deville. Et screenshot af disse kan ses i figur 2.Men allerede under diskussionen af disse nyeskærmbilleder, der lå tæt op af den relationelletankegang, viste det sig at disse billeder ville væremeget besværlige at arbejde med. Et fonogram ernemlig kendetegnet ved at det typisk, men ikkealtid, er den samme kunstner der medvirker på alleskæringer på en CD. Hvis jeg illustrerer det medcd’en ”let love in” med ”Nick Cave and the badseeds”, så optræder Nick Cave om sanger på allenumre, han spiller piano på 1,8; orgel på 1, 3, 5, 6,7, 8, 9; Blixa Bargeld (ja det er ham fra EinsturtzneNeubauten) 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 personermed forskellige instumenter fordelt ud over allenumrene. Hvis registratorerne nemt skulle kunneregistrere deres informationer, men data samtidigskulle være i de relationelle tabeller, så skulle derfindes et kompromis.

Løsningside Hvis vi kunne tillade at brugerne angav deres infor-mationer som en strengangivelse af fundneforekomster, efter en på forhånd aftalt syntaks,f.eks, kunne Nick Cave indsats på piano angivessom 1/1,8, på orgel, 1/1,3,5-9, på samt 1/1-10; Blixapå guitar, 1/1-10; 2.stemme 1/3,4,8-10.Lovlig syntax eksempler kunne således være:1/1-4+2/3-8 eller

RELATIONSDATABASENS BEGRÆNSNINGERRune Mørk, er selvstændig Oracle-konsulent. Rune er uddannet civilingeniør oghar arbejdet med Oracle-produkter siden 1990 inden for developer, designer ogdiscoverer. Rune kan træffes på [email protected].

Tools

Teknisk Artikel

Figur 1 Datamodel for et fonogram

Metode

Page 5: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

1/1-5,7,9-10,hvor tallet foran skråstregen angiver side nummeretpå CD’en, og tallene efter angiver skæringsnum-meret.Hvis vi ændrede i datamodellen for kun at gemmedisse strenge, ville søgemulighederne blive stærktbegrænsede, idet vi senere skulle skrive kode derskal undersøge en streng, for at kunne svare påspørgsmålet, hvor deltager en given kunstner påførste nummer på et fonogram. Derfor, selvom vivælger at anvige data som foreslået ovenfor, så skalde fortolkes og gemmes i et relationelt system. Men for at kunne tolke og forstå denne syntaksskulle der udvikles en syntax fortolker (en såkaldtparser), et stykke software der kunne modtage enstreng og fortælle tilbage hvilke kombinationer afsider og skæringer det drejede sig om, således atformen kunne registrere angivelserne korrekt. Ensådan parser laves udfra de pricipper der omhand-ler en tilstandsmaskine.

TilstandsmaskinerTilstandsmaskiner kan beskrives på forskellig vis,og kendetegner en indretning vi forestiller os mod-tager et tegn ad gangen og på baggrund af dettebeslutter hvilken aktion der skal tages. Egentlig kandet udefra betegnes som en ”black box”, som påbaggrund af en modtaget sekvens af data udføreren handling.Tilstandsmaskiner dannede grundlaget for de førstecomputere, og blev udviklet af Alan Turing.Maskinen i vores eksempel kan illustreres grafisksom det ses på figur 3 og det opfylder de krav somvisuelt orienterede personer har. På figuren startervi i øverste venstre hjørne, og forestiller os at vi harmodtaget et tegn, på baggrund af dette tegn kan vi

beslutte os til hvilken tilstand maskinen skal ændresig til. Med en testsekvens på ”1/1-4+2/3-8, vil detførste tegn være et ”1”, altså vil maskinen bevægetil til tilstanden ”modtag side b”, her modtages et ”/”og maskinen ændrer status til ”Modtag skæring 1a”,så kommer et ”1” og vi går til ”modtag skæring 1b,så et ”-” og tilstanden er ”Modtag skæring 2a”, så et”4” medførende tilstand ”Modtag skæring 2b”, så et”+”, og vi er tilbage ved start.På denne måde kan vi modtage en streng af dataog bestemme hvad vi skal stille op med data under-vejs.Den grafiske fremstilling af en sådan maskine kanoverføres til en tabelstruktur som kan ses i figur 4.Kasserne med de grå markeringer markererhvornår vi har opnået tilstrækkelig med informationtil at kunne gemme vores data. Hvis vi for eksempelhar en tekststreng med indholdet ”1/1-4,7-10”, vedvi når kommaet forekommer at vi skal gemme infor-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 og2a, kun eksisterer for at sikre at tallene består afmindst et ciffer. Der er også nemt at se, enten udfragrafen eller tabellen at tilstandsmaskinen er korrekti en matematisk forstand, idet ingen kasser i tegnin-gen må have ens pile ind og ud fra tilstanden, mensi tabellen må ingen af rækkerne være ens, hvis deer det, er vores maskine ikke konstrueret korrekt.

ImplementeringenMed denne maskine på plads er det nu ”relativt”enkelt at konstruere kode der validerer at vorestekst streng er korrekt. Konstruktionen gøres ved atlade en procedure repræsentere hver tilstand mask-inen kan indtage. Herefter er det enkelt at kode hverenkelt tilstand idet hver tilstand kun har et muligt

5OracleEkspert December 2001

Figur 2 Alm registrering

Page 6: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

6 OracleEkspertDecember 2001

udfaldsrum og det er præcist beskrevet hvad derskal ske for hver enkelt tegn der modtages.Den færdige kode, der er vist sidst i artiklen, erudviklet (og der simplificeret) til forms, resultatetbliver gemt i en temporær pl/sql-tabel, og præsen-teret når hele tekststrengen er kontrolleret.Når dette er på plads er det relativt simpelt at byggeen form med et udseende som i figur 5, hvorbrugerne kan fremfinde data og udfylde tekststren-gen og gemme data. Herefter bliver data spredt udog gemt i de bagved liggende relationelle tabeller.Koden til dette viser jeg ikke i denne artikel.I dette skærmbillede kan brugerne registrere hvilke

personer der indgår i et fonogram, hvilke lande,sprog genrer, arrangører, emner, indspilningdatoersamt optagesteder der gælder for de enkelteskæringer. Alt sammen ved hjælp af den syntaksder er beskrevet i ovennævnte.

Problemer og kommentarerHvordan retter brugerne så i allerede eksisterendedata? Her er der bygget et skærmbillede der gården modsatte vej, og udfra de relationelle dataopbygger en tekststreng med et indhold der marke-rer forekomster af data. Selvom dette er en ikke tri-viel opgave, har har jeg udeladt metodikken fra den-ne artikel.

Figur 3 Tilstandsmaskinen grafiske repræsentation

Figur 5 En template form

Page 7: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

Har denne artikel givet lyst til at lære mere om til-standsmaskiner, så kan der hentes yderligereoplysninger i f. eks. ”Zvi Kohavi: Switching and finiteautomata theory”.

[Nedenstående kode kan hentes fra OracleEkspertshjemmeside, Red.]

7OracleEkspert December 2001

Figur 4 Tilstandsmaskinen i tabelform

PACKAGE cd ISprocedure setup (p_st in varchar2);PROCEDURE modtag_side_a;PROCEDURE modtag_side_b;PROCEDURE modtag_skaering_1a;PROCEDURE modtag_skaering_1b;PROCEDURE modtag_skaering_2a;PROCEDURE modtag_skaering_2b;procedure vis;FUNCTION is_number(p_in varchar2)RETURN boolean ;

FUNCTION nextc RETURN varchar2 ;procedure gem;procedure fejl ;END;

PACKAGE BODY cd IStype info_record isrecord (side pls_integer,

skaering pls_integer);type info_table is table ofinfo_record index by binary_integer;

fonogram_info info_table;v_no_of_info pls_integer := 0; v_side pls_integer ;v_skaering1 pls_integer;v_skaering2 pls_integer;v_pointer pls_integer := 0;v_st varchar2(100);v_c char; -----------------------------------procedure setup (p_st in varchar2)isbegin

v_st := p_st;v_side := null;v_skaering1 := null;v_skaering2 := null; v_pointer := 0;modtag_side_a;vis;

end;-----------------------------------FUNCTION is_number(p_in varchar2)RETURN boolean IS

BEGINif p_in in ('0','1','2','3','4',

'5','6','7','8','9')then

return true;else return false;end if;

END;-----------------------------------FUNCTION nextc RETURN varchar2 ISBEGINif v_pointer > length(v_st) thenreturn 'E';

elsereturn substr(v_st,v_pointer,1);

end if;END;-----------------------------------PROCEDURE modtag_side_a ISbegin

v_pointer := v_pointer + 1;

v_c := nextc;if not is_number(v_c) then fejl;else

v_side := to_number(v_c);modtag_side_b;

end if;end;-----------------------------------PROCEDURE modtag_side_b ISbeginv_pointer := v_pointer + 1;v_c := nextc;if is_number(v_c) then v_side:= v_side*10+to_number(v_c);modtag_side_b;

elseif v_c = '/' thenmodtag_skaering_1a;

elsefejl;

end if;end if;

end;----------------------------------- procedure modtag_skaering_1a isbeginv_pointer := v_pointer + 1;v_c := nextc;if not is_number(v_c) then fejl;elsev_skaering1 := to_number(v_c);modtag_skaering_1b;

end if;end;----------------------------------- Procedure modtag_skaering_1b isbeginv_pointer := v_pointer + 1;v_c := nextc;if v_c = 'E' thengem;

elsif is_number(v_c) then v_skaering1 := v_skaering1 * 10

+ to_number(v_c);modtag_skaering_1b;

elsif v_c = '+' thengem;modtag_side_a;

elsif v_c = ',' thengem;modtag_skaering_1a;

elsif v_c = '-' thenmodtag_skaering_2a;

elsefejl;

end if;end;------------- procedure modtag_skaering_2a isbeginv_pointer := v_pointer + 1;v_c := nextc;if not is_number(v_c) then fejl;elsev_skaering2 := to_number(v_c);modtag_skaering_2b;

end if;end;----------procedure modtag_skaering_2b isbeginv_pointer := v_pointer + 1;v_c := nextc;if v_c = 'E' thengem;

elsif is_number(v_c) then v_skaering2:= v_skaering2

* 10 + to_number(v_c);modtag_skaering_2b;

elsif v_c = '+' thengem;modtag_side_a;

elsif v_c = ',' thengem;modtag_skaering_1a;

elsefejl;

end if;end;--------------- procedure gem isbeginif v_skaering2 is not null thenfor i in v_skaering1 .. v_skaering2loopv_no_of_info:= v_no_of_info +

1;fonogram_info(v_no_of_info).side:=

v_side;fonogram_info(v_no_of_info).skaering

:= i; end loop;v_skaering2:= null;

elsev_no_of_info := v_no_of_info +

1;fonogram_info(v_no_of_info).side

:= v_side;fonogram_info(v_no_of_info).skaering

:= v_skaering1;end if;

end;----------------------------------procedure fejl isbegin

message('fejl');end;----------------------------------

procedure vis isbeginfor i in 1 .. v_no_of_info loopmessage('side '||fonogram_info(i).side ||'skæring '|| fonogram_info(i).skaering);

end loop;end;END;

Page 8: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

8 OracleEkspertDecember 2001

DBA

Teknisk Artikel Indledning

Vi har i Miracle A/S haft en del fornøjelse ud af StoredOutlines. Én af sagerne var affødt af en opgraderingfra 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 mankigge på det – det har nu altid været mit motto!Derudover har vi længe drømt om at lave en automa-tisk opgradering, hvor en trigger checker om hvert nytSQL-statement har samme eksekveringsplan som føropgraderingen – hvis ikke, så erstattes den nye planmed den gamle (bare for en sikkerheds skyld), og dennye plan registreres, så man senere kan checke omden var bedre end den gamle.Vi kalder det Chok-opgradering, men det er ikke rigtigtet navn, der sælger…Og nu vil jeg så give ordet til Johannes, der har brugtstored outlines til lidt af hvert.- Mogens

Stored Outlines blev indført i Oracle 8i som en metodetil at opnå Plan Stability. Plan Stability sikrer at engiven query vil have den samme execution plan, ogsåselv om man ændrer parametre, opretter nye index,analyserer data når datamængde og -fordeling harændret sig markant - eller opgraderer. Mange af oshar oplevet at performance har ændret sig betydeligtefter en opgradering og der hvor vi har mærket dettydeligst er nok når performance er blevet dårligerefordi der efter opgraderingen anvendes en andenexecution plan.

FordeleMed stored outlines kan man roligt opgradere og såstille og roligt afprøve om der er performance for-ringelser. Hvis der er, anvender man blot de storedoutlines man lavede inden opgraderingen og har så

mulighed for at undersøge hvad der skal til for at løseproblemerne uden panik.En anden fordel ved stored outlines er at man har enmulighed for at optimere en SQL-sætning hvor manikke kan ændre på kildeteksten (Black Box Tuning).Hvis man kan ændre på forudsætningerne så denanvender en mere optimal execution plan, så laverman blot en stored outline under disse forudsætningerog anvender denne i den normale drift. Det er yder-mere muligt at modificere de hints der indgår enstored outline for en SQL-sætning, og så bruge dennemodificerede stored outline for den oprindelige SQL-sætning.I Oracle 8i er dette ikke supporteret (det virker fint,hvis man f.eks. gør det som i eksemplet fra DBF2001nedenfor), men i 9i er der direkte support for at editerei de hints der gemmes i en stored outline, dels med enpakke (DBMS_OUTLN_EDIT) og dels med OutlineEditor i Enterprise Manager.

SnydTil mit indlæg på DBF2001 om stored outlines lavedejeg en modificeret stored outline på en Oracle 8.1.6database. Denne stored outline brugte jeg til at snydetilhørerne til at tro at et kunstigt hint (det kunne værehvad som helst, i dette tilfælde /*+ miracle */) havdeen ganske imponerende effekt. For at modificere denaktuelle stored outline brugte jeg følgende fremgangsmåde:Først lavede jeg en stored outline (OL1) for denoprindelige SQL-sætning.Så modificerede jeg sætningen med et hint for atopnå en anden execution plan og lavede en storedoutline (OL2) for den modificerede, men funktioneltekvivalente, SQL-sætning.Endelig deletede jeg rækkerne i OL$HINTS for denoprindelige stored outline (OL1) og opdaterederækkerne i OL$HINTS for den "modificerede" storedoutline (OL2) så de i stedet for at referere til OL2 ref-

STORED OUTLINESJohannes V. Djernæs & Mogens Nørgaard, begge Miracle A/S.

Figur 1. opdater rækken i OL$

Page 9: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

9OracleEkspert December 2001

ererede til OL1.Nu virkede det! Min oprindelige SQL-sætning brugteet full table scan i stedet for det index opslag denbrugte oprindeligt.Egentligt burde jeg have gjort en ting til: Jeg skullehave opdateret rækken i OL$ for den oprindeligestored outline, så HINTCOUNT kolonnen indeholdtdet rigtige antal. Der var nemlig en række mindre iOL$HINTS for den modificerede stored outline.Jeg har samlet det hele i figur 1.

Den autoriserede metode (i 9i)For at kunne editere (”line mode”) i en stored outline iOracle 9i skal man først oprette en privat kopi (vha.CREATE PRIVATE OUTLINE private_outline FROMoutline;). Derefter kan man opdatere direkte i denlokale OL$HINTS tabel. Efter at have modificeret enstored outline manuelt skal den gen-synkroniseres(f.eks. vha. DBMS_OUTLN_EDIT.REFRESH_PRI-VATE_OUTLINE) og for at den modificerede storedoutline kan træde i kraft (for andre brugere) skal denpubliceres (vha. CREATE OR REPLACE OUTLINEoutline FROM PRIVATE private_outline;).Alternativet er at man bruger Outline Editor (se figur 2)som man finder i Oracle Enterprise Manager underTools – Tuning Pack – Outline Management (bemærkdog at Tuning Pack er en option til Enterprise Edition).Her kan man vælge Edit under Outlines menuen ogman får så forskellige muligheder for at modificereden stored outline, afhængigt af hvilke join og accessmethods der anvendes. Man kan f.eks. vælge accessmethod og ændre den tilbage fra ”Full” til ”Index”: Jegvalgte først den stored outline JVD_OLT1, Edit…hvorefter Outline Editor kom frem. Her valgte jeg såOLT1 ikonet og Step Properties... (se figur 3)Når man har lavet en ændring skal den valideres oghvis ikke Oracle kan validere ændringen bliver denannulleret.I skrivende stund kunne det ikke lykkes for mig at laveden samme modifikation som jeg lavede på den usup-porterede måde i SQL*Plus (at ændre access methodfra ”Index” til ”Full”), men det virkede fint at ændre detden anden vej. Hvis der er nogen blandt læserne, der

kender noget til dette problem, så er jeg da megetinteresseret i at høre om det

Alternativ anvendelseEn helt anden måde at bruge stored outlines på, er tilat finde hints. Jeg arbejdede på et tidspunkt med etproblem hvor en bestemt gruppe af SQL-sætningerbrugte voldsom lang tid i parse-fasen. Her anvendtejeg, som workaround, stored outlines til at finde dehints der skulle til for at få optimizeren til at vælge denønskede execution plan, blot meget hurtigere endhvis den selv skulle finde ud af det.Rent praktisk lavede jeg en stored outline for en af deproblematiske SQL-sætninger (som i SQL*Pluseksemplet ovenfor) og hentede hint_text fra hverrække i outln.ol$hints eller USER_OUTLINE_HINTS.Alle disse hints blev så skrevet ind i de problematiskeSQL-sætninger.

UlemperDe største ulemper ved at anvende stored outlines erat kan være svært at se at der anvendes stored out-lines, og det kan være meget frustrende at man ikkekan få optimizeren til at bruge f.eks. et nyt index manhar lavet. Det er også muligt at den execution plan dervar optimal da man oprettede sin stored outline, ikkelængere er bare tilnærmelsesvis optimal - og dethjælper jo hverken at oprette nye index eller at analy-sere data.Man skal huske på at en stored outline kun vedrørerden specifikke SQL-sætning – Oracle udregner førsten hash værdi og laver så en nøjagtig karakter forkarakter sammenligning inden den anvender enstored outline. Hvis blot der er eet bogstav der er storti stedet for småt eller een blank mere eller mindre, såer det ikke den samme sætning og en stored outlinevil ikke blive anvendt.Den sikreste metode til at undersøge om der anven-des en stored outline ved afvikling af en SQL-sætninger at slå sætningen op i V$SQL og se på kolonnenOUTLINE_CATEGORY – hvis den er null anvendesder ikke nogen stored outline, ellers gør der.

Figur 2. Outline Editor.

Page 10: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

10 OracleEkspertDecember 2001

ForudsætningerDet er ikke alle parametre man bare kan ændre, føl-gende tre parametre må man f.eks. ikke ændre påhvis man vil være sikker på at stored outlines virkerefter hensigten:QUERY_REWRITE_ENABLED STAR_TRANSFORMATION_ENABLED OPTIMIZER_FEATURES_ENABLE For at anvende stored outlines skal man enten udføre:alter session set use_stored_outlines = true;Hvorefter der anvendes stored outlines I den aktuellesession, eller:alter system set use_stored_outlines = true;Hvorefter alle sessioner anvender stored outlines.Det er ikke muligt at slå anvendelse af stored outlinestil ved hjælp af init.ora parametre, kun med alter ses-sion/system.

Sikkerhed(shul)Så er der jo lige en lille detalje som Jonathan Lewisgjorde mig opmærksom på: Når man har installeret(eller opgraderet til) en Oracle 8i eller 9i, så skal manhuske at ændre password for outln brugeren! Ellershar man et kæmpe sikkerhedshul idet outln har det

fine privilegium ”execute any procedure” – og kanydermere gøre det ”as any user”. I kan sikkert selvforestille jer hvad det kan bruges til og hvis ikke, så tromig: Det kan give en adgang til hvad som helst i endatabase.

P.S.En lille observation der ikke har noget med StoredOutline at gøre:Vidste du at ventetid for 'log file sync' IKKE er inklu-deret i "OVERALL TOTALS FOR ..." i tkprof output, ogheller ikke indgår i elapsed tid i parse/execute/fetch.Det skyldes at 'log file sync' er en del af commit, somikke redegøres for i tkprof.

P.P.S.En hilsen fra Mogens Nørgaard og Peter Gram:Nu har vi i årevis forsøgt at lære alle, at Oracle brugeren hash funktion på (file nr, block nr, block class) til atadressere buffer cache.Dette er forkert ! Hash funktion bruger kun (file nr,block nr) !UNDSKYLD!Dette vil blive uddybet til vores arrangement 23. - 25.januar 2002 med Jonathan Lewis: Optimising Oracle- The Seminar.

Helsidesannoncer iOracleEkspert

fra DKK 6.000 (excl moms)Læs mere på:

www.OracleEkspert.dk

Figur 3.

Page 11: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets
Page 12: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

12 OracleEkspertDecember 2001

Disse blade kan stadig købesvia vores hjemmeside:

www.OracleEkspert.dkRelationsdatabasens begræn-sninger - OE nr 9Rune Mørk Jeg har gennem mange år virket som Oraclekonsulent, og ved gentagne lejligheder pristrelationsdatabasens principper som værendelogiske, forståelige og letanvendelige. På etprojekt, jeg gennemførte for nylig, hvor jegskulle fremstille skærmbilleder i forms, fandtjeg en af de relationelle princippers ofre, nem-lig brugervenligheden. I denne artikel vil jegbeskrive den del af datamodellen det drejersig om, forklare om andre situationer hvorsamme model vil frembringe de samme prob-lemer, tilbyde en løsningsmodel og iforbindelse med denne gennemgå lidt teoriom tilstandsmaskiner, da de viste sig at væremeget anvendelige til dette problem.Emne: Tools, Metode

Stored Outlines - OE nr 9Johannes V. Djernæs & Mogens NørgaardVi har i Miracle A/S haft en del fornøjelse udaf Stored Outlines. Én af sagerne var affødt afen opgradering fra 7.3 til 8.1.6, hvor etbestemt (og meget brugt) statement startedemed at have parsetider på nogle få sekunderog derefter gav sig til at vokse. Når en one-liner SQL har en parsetid på 800 sekunderbør man kigge på det – det har nu altid væretmit motto!Emne: DBA

Playing the Library Card - OE nr 9John Caputo Since release 2.1 of Designer, you have beenable to customize WebServer Generator(WSG) modules by adding your own code forroutines and events that is included in thegenerated code. Some page layout cus-tomization has also been possible by addingcode to the User Text areas of WSG modulepages. Many people are familiar with thesetwo types of WSG module customization.This paper explores a method to extend stan-dard WSG module page layout through cus-tomizing the WebServer Generator Library(WSGL) package. It is divided into the follow-ing sections. Emne: Designer

Nyskabende teknikker til mere effek-tiv Opfyldelse af Datalovgivningensbestemmelse om logning af adgangtil personfølsomme informationer -OE nr 8Martin JensenFor første gang er det nu muligt, som en delaf selve databasesystemet, at indbyggemekanismer til automatisk logning af accesstil forudbestemte informationer, uden at skulleændre i de rapporter og skærmbilleder, derbetjener brugerne af systemet.Emne: DBA

Kicking the ASP out of Designer - OEnr 8David SchleisThe Oracle Designer WebServer Generator(WSG) generates web-based applicationsdesigned to run on an Oracle WebApplication Server. These applications aregenerated based on module and databasedesign specifications recorded in theRepository, and allow users to interact withan Oracle database over the internet. This isextremely useful if you are running an OracleWeb Application Server, but what if you arerestricted to an existing web ASP server?

Emne: Tools, Designer, Web

TFR: Trace File Repository - OE nr 8Torben Holm & Mogens NørgaardDet er egentlig Cary Millsaps ide: Tracefiler(uanset om de er normale level 1 eller merebarske level 4, 8 og 12 typer) hører til i endatabase – i et repository, som man ynder atkalde en samling tabeller nu om dage.Emne: DBA

ODTUG-konferencen 2001 - OE nr 7Marc de OliveiraDen 24-28 juni 2001 var San Diego stedet atvære for de garvede Oracle-værktøjsfolk.ODTUG-konferencen er efter min meningklart den mest interessante konference for enOracle-udvikler, så derfor vil jeg i det følgendeforklare lidt om hvad ODTUG er, og specifikthvad man kunne opleve ved dette årsODTUG-konference.Emne: Tools

Ratio Gaga - OE nr 7Mogens NørgaardDet er opfyldelsen af enhver mands drøm atkunne sidde i en garage med små bondevin-duer der vender ud mod et smukt, nykon-strueret kaninanlæg (company rabbits ogcompany chickens er en del af standard-kon-trakten når man ansættes i Miracle A/S) ogskrive en artikel om waits, YAPP2, 9i-doku-mentationen, 10046-eksempler, osv. Så und-skyld, at denne artikel bliver lidt causeri-agtig.Stemningen er til det.Emne: DBA

Generating XML Applications fromDesigner - OE nr 7James F. HudsonCurrently, Designer and XML do not get alongwell. But wouldn’t it be nice to be able toselect a module in the Design Editor, go to the“Copy With New Language” Utility, and createa basic XML application?Emne: Tools

Guardian Security and BusinessRules Engine Under The Covers - OEnr 7Scott HollowsThis article will provide a technical look atSeeristic’s Guardian “Security and BusinessRules Engine” software to show you how youcan configure it and alter its functionalityusing its PL/SQL API.Emne: Tools

Beregning af Danske helligdage - OEnr 6Danske helligdage er ikke noget man bereg-ner. Dem slå man op i en tabel. Eller gørman? Ta’ årskalenderen fra sekretæren! Herfår du en PL/SQL løsning, som beregnerdem. Til og med væsentligt hurtigere end dekan SELECT’es fra en tabel.Anders FrandsenEmne: Tools

Oracle8 GIS (Geeky Internal Stuff):Physical Data Storage Internals - OEnr 6This month, Dan will focus on some internalsof the Oracle RDBMS, primarily physical stor-age of data. This article will concentrate ondata blocks: how they’re created, how spaceis really managed inside a tablespace, andsome other geeky internal stuff of interest inthe physical storage of data.Dan HotkaEmne: DBA

Top-n query - OE nr 6At finde de 20 rækker fra en tabel med destørste eller mindste værdier i en givenkolonne har i mange år ikke været helt lige til.Denne artikel belyser hvorledes det alligevelkan klares med relativt enkle midler.Martin JensenEmne: PL/SQL

Simulating OPS$ users through aBrowser - OE nr 6If your business is running an intranet on anMS network, it is possible to authenticate MSusers as Oracle users without promptingthem for a second login name and password.Unfortunately, Oracle only supports this forclient/server applications like Forms andReports. This presentation will show you howto authenticate MS users running Web appli-cations through a browser as well.Marc de OliveiraEmne: Web

Cutting Code With Style – Part II - OEnr 6This article is part II of a two part series thatexplains a recommended coding style that iseasy to write, read and maintain. This issuewill focus on various structures of SQL andPL/SQL including SELECT, INSERT, IF andLOOPS.Scott HollowsEmne: Metode

Oracle Portal - OE nr 5I efteråret 2000 sendte Oracle 2. generationaf WebDB - Portal 3.0 - på gaden. Detteindlæg gennemgår Portal 3.0, hvor der erforskelle i forhold til WebDB 2.% og deropbygges en Portal.Torben HolmEmner: Tools

Tuning Database Reorganizationsfor Maximum Speed - OE nr 5Oracle provides a number of options andparameters to achieve optimal reorganizationspeed in any environment. This paperreviews these settings and discusses how totake advantage of them. Heather Compher and Gil AsherieEmner: DBA

Systemdokumentation uden smerte- OE nr 5Artiklen giver dels en beskrivelse af, hvad derefter forfatterens mening er god system-dokumentation, samt et forslag til, hvordanman på en overkommelig måde kan imple-mentere en brugbar systemdokumentation,som arbejder direkte på et systems kilde-tekst, og derfor er uafhængig af design- ogudviklingsværktøjer, og samtidig altid eropdateret.Jan AhlbergEmner: Metode

Spatial og PL/SQL - OE nr 5I dokumentationen for Oracle Spatial er dermasser af eksempler på hvorledes man kanhælde data ind i spatial-objekter, og hvordanman efterfølgende manipulerer dem vha. deindbyggede funktioner. Men hvad nu, hvisman får lyst til at rode med sine objekter påegen hånd? – Det er der absolut intet til hin-der for…Peter SørensenEmner: Tools

Udnyt din redolog information - OEnr 5Med Oracle 8i fik Oracologerne mulighed forat analysere information i redolog med

Artikelindeks 2000-2001

Page 13: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

13OracleEkspert December 2001

Logminer. Computer Associates har i flere århaft et værktøj Loganalyzer, der kan gøre detsamme, og efter min mening, på en betydeligtnemmere måde. I denne præsentation afværktøjet gives en oversigt over detsmuligheder, og hvad man kan benytte denindhentede information til.Carl BruhnEmner: DBA

Cutting Code With Style – Part 1 - OEnr 4You only need to know a few things to be ableto write guru level code that is easy to read,comprehend and maintain (do a little happydance right now if that is what you wanted tohear).Scott HollowsEmner: Metode

10046: Trace for Mandige Mænd ogSeje Sild - OE nr 4I virkeligheden er den "normale"SQL_TRACE = TRUE bare en lille del afOracle's tracefacilitet, der har fået detmundrette og intuitive navn "10046". Tag medpå en tur rundt i hjørnerne af 10046 og lærundervejs at se, hvad der virkelig sker meddine SQL-statements.Mogens NørgaardEmner: DBA

Oracle OpenWorld 2000 - Databasen- OE nr 4Årets Oracle OpenWorld konference blevafholdt 1. - 5. oktober i San Francisco. Denneartikel, som ligger i forlængelse den vi bragtei sidste nummer af OracleEkspoert, gen-nemgår den nye database Oracle 9i.Finn Ellebæk NielsenEmner: DBA

Null - OE nr 4Vi er jo vandt til, at når vi ikke kender enegentlig værdi for en attribut, giver vi den istedet tilstanden Null. Og i grunden burde detjo ikke være så vanskeligt at håndtere, forhvis bare man kunne huske at alle funktionerhvor Null indgik returnerede Null, så kunnedet vel gå an? Eller hvordan er det nu det er?Martin JensenEmner: PL/SQL

Ratios er for tabere, Wait-interfaceter konge - OE nr 3Her argumenteres for anvendelen af OraclesWait-Interface frem for de traditionelle Ratio-lister, som mange stadig holder sig til, nårderes Oracle-applikationer skal optimeres.Mogens NørgaardEmner: DBA

Asynkron check af Relationer - OE nr3Hvis man af den ene eller anden grund ikkekan anvende database-kernens ‘Primary key/ foreign key relationship constraints’ (eksem-pelvis i Data Varehuse), kan det måske væreen mulighed fra Designers Repository atgenerere et script, der checker i hvor højgrad de logiske relationer alligevel stemmerrimeligt i databasen. Dette notat beskriver enmulig løsning.Martin JensenEmner: DBA, Designer

Lidt om PRIMARY KEYs - OE nr 3Når man foretager en fysisk database-imple-mentation, skal man blandt meget andet tagestilling til, hvilken slags primærnøgler, man vilhave på sine tabeller. Der findesgrundlæggende to slags primærnøgler:betydningsbærende og ikke-betydnings-

bærende. De to metoder præsenteres ogforskellene diskuteres i denne artikel, medudgangspunkt i et konkret, enkelt eksempel.Bodil FeldingerEmner: Metode

Oracle OpenWorld 2000 - Værktøjer -OE nr 3Årets Oracle OpenWorld konference blevafholdt 1. - 5. oktober i San Francisco. Denneartikel indeholder en relativt kortfattetbeskrivelse af de mest interessante nyhederfor Oracle-udviklere, både på kort og langtsigt. I dette nummer gennemgår vi værktø-jerne og i næste nummer ser vi nærmere påOracle 9i.Finn Ellebæk Nielsen og Jens BørreEmner: Tools, Designer

Row Level Security i Forms? - OE nr3Mange har sikkert prøvet at implementereRow Level Security i Forms, vha. en blockmed et default where udtryk i stil med ”whereusername=user”. Artiklen viser hvordan densmarte bruger omgår default where – ogderved får adgang til fortrolige data – og denviser, hvordan den smarte programmørundgår, at den smarte bruger omgår defaultwhere udtrykket!Anders FrandsenEmner: Tools

Objektorientering i PL/SQL - OE nr 2Objektorientering er blandt mange udskregettil at være løsningen på alle vore problemerindenfor systemudvikling. Men hvad gør manså, hvis man nu ikke har et objektorienteretsprog at udvikle i? I denne artikel gen-nemgås, hvordan man i PL/SQL kan opnånogle af de fordele, der er ved objektorien-tering.Jacob Steen DueEmner: Tools, Metode

Hvad er et data warehouse? - OE nr2Et data warehouse kan være løsningen påmange forskellige problemer. Artiklen giver etkort historisk tilbageblik på data warehouseog viser vigtigheden af at fastslå det aktuelleformål med at (om)bygge et data warehouse.Erik HaahrEmner: Data Warehouse

Performace Vurdering af PL/SQL-rutiner - OE nr 2Fra version 8.1.5 af Oracle, har det væretmuligt at foretage performace monitorering afplsql-rutiner i kernen. Til dette findes en mereeller mindre kendt dbms-pakke ved navndbms_profiler, som jeg gennemgår i denneartikel.Rune MørkEmner: DBA

Forslag til Forskellige Afprøvninger -OE nr 2Her gennemgås problemer ved traditioneltest/afprøvning i en seperat fase efter syste-mudviklingen, og der foreslås alternativer tilseks forkellige typer afprøvninger.Christian BastlundEmner: Metode, Designer

Om forskellige slags Indexes - OE nr2Denne artikel kaster lys over hvilke index-varianter der er anvendelige til hvilke slagsoperationer.Martin JensenEmner: DBA

DesignAssist til Forms og Designer -OE nr 2DesignAssist er en avanceret template-pakketil Forms- og Designer-udviklere. I dennepræsentation gennemgås de væsentligestefunktioner i produktet. Her indgår også enoverordnet sammenligning af DesignAssistog Headstart.Marc de OliveiraEmner: Designer, Tools

Monitorer længerevarende PL/SQLjobs - OE nr 2Tip.Rune MørkEmner: DBA

Matrix Form Med WSG - OE nr 1Denne artikel omhandler de muligheder derfindes i Designer til at generere avanceredematrix billeder med summer, dynamiskeprompter og dynamiske links vha. web servergeneratoren. Jeg viser trin for trin en metodeder er anvendt i et produktionsmiljø.Rune MørkEmner: Designer, Web

Oracle Designer Repository API - OEnr 1Oracle Designer’s Repository API er et pro-grammelt interface til Designer’s Repository,der bl.a gør det muligt at lave masseopda-teringer af systemdefinitioner udfra selvval-gte kriterier og udenom de grafiske brugerin-terfaces. API’et er et kraftigt og værdifuldtværktøj, som kan effektivisere systemud-viklingsarbejdet, kvalitetssikre og fremmeensartetheden i det udviklede systems kodeog funktionalitet. Bodil FeldingerEmner: Designer

Effektivt PL/SQL Load Tool - OE nr 1Virksomheder med forskellige systemer harofte brug for at udveksle oplysninger af fællesinteresse (f.eks. en Vare Master). Der findesavancerede systemer til at replikere sådanne– men har man ikke et sådant til rådighed ogalligevel har brug for et effektivt load-værktøjog ikke er tilfreds med de gratis tilbud (f.eks.Oracle Loader) – så er der her et bud på enløsningsmodel, som kan bygges op i renPL/SQL.Jacob DybbroEmner: DBA

ChangeGroup PL/SQL Server Pages- OE nr 1ChangeGroup PL/SQL Server Pages er etnyt udviklingsværktøj til Web-projekter, derhar brug for integration mellem en Oracledatabase og tynde Web-klienter som f.eks.HTML, XML, samt WML (WAP). Produktetgør det på den enkleste og mest brugerven-lige måde muligt at Web-enable forret-ningslogik udviklet i PL/SQL.Finn Ellebæk NielsenEmner: Web

Omgå Y2K-Fejlen I Oracle Installer -OE nr 1Tip.Rasmus Winther HansenEmner: Installation

Page 14: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

14 OracleEkspertDecember 2001

Teknisk Artikel

Designer

IntroductionSince release 2.1 of Designer, you have been able tocustomize WebServer Generator (WSG) modules byadding your own code for routines and events that isincluded in the generated code. Some page layoutcustomization has also been possible by adding codeto the User Text areas of WSG module pages. Manypeople are familiar with these two types of WSG mod-ule customization. This paper explores a method toextend standard WSG module page layout throughcustomizing the WebServer Generator Library(WSGL) package. It is divided into the following sec-tions.

• A look at a standard WSG Module View Form• Constraints of a standard form• Page layout procedures and functions in the

WSGL package• Designer Generation Preferences• Creating custom code driven by preferences

and standard conventions• Adding a multi-lingual utility to custom code

A Standard WSG Module View FormFirst, let’s become familiar with a typical WSG ViewForm. Two examples are illustrated in Figure 1 andFigure 2. These View Forms were generated usingdefault formatting preferences.Layout Items in Table is the default value for theLayout Style generator preference for all the WSGforms (as above) and is probably the most commonlyused layout preference. Using this style as illustratedin Figure 1 and 2 produces a nicely laid out form in

proportioned columns and rows containing theprompts and input fields. Under many circumstances,this may be acceptable, but it makes for a boring form.Although you have sufficient flexibility for adding textbefore and after the form in the Top of Form andBottom of Form text areas, formatting of prompts andtext within the form is not supported by WSG.

Layout Constraints Of A StandardWSG Module View FormWhy Custom Layout?One of the most notable shortcomings of WSG mod-ules is the rigid layout of fields on the generated page.Another shortcoming is the lack of control of displaycharacteristics that Designer generates, althoughthey are easily achievable within HTML. For example,it is highly desirable to change the look of mandatoryinput prompts from optional input prompts. I havealways wanted the prompts for mandatory items todisplay in a different color than the other prompts,such as red, or alter their font characteristics, or both.When writing web server PL/SQL by hand, I wouldspan HTML table columns for input fields wheneverthe size of the input area was overly long, e.g.,description fields. Designer has no way to controlspanning in layout of a generated web page.

Four primary constraints of WSG moduleforms

1. Cannot format prompt text on a per item basis.2. Cannot position prompt text in relation to the

input field (above, below, before, after, etc.).3. Cannot span HTML columns for large input

PLAYING THE LIBRARY CARDJohn CaputoReprinted by permission from the ODTUG 2001 Conference Proceedings.

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

Page 15: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

15OracleEkspert December 2001

fields.4. Cannot include extended descriptive text

between input fields (instructions or explana-tion).

These were the driving issues when I first looked intocustomizing layout, but what I really wanted was acomplete custom layout capability using my ownPL/SQL. This meant being able to specify custom lay-out at generation time with available Designer moduleproperties. An added bonus would be the ability todesignate a named style, allowing many different cus-tom layout options. I concluded that modifying theWSGL library layout routines might work. I studied thecode and found I could make minor modifications tothe existing code to call custom layout routines.Furthermore, I could base the calls and layout on thecontents of two Designer preference settings.

Page layout procedures and func-tions in the WSGL packageLet’s look at the WSGL routines that are used to lay-out forms. The following procedures in the WSGLpackage are the layout routines.

1. LayoutOpen2. LayoutClose

3. LayoutRowStart4. LayoutRowEnd5. LayoutHeader6. LayoutData

Descriptions of the routines from the source codecomments appear below.

WSGL Layout RoutinesLAYOUTOPEN.See figure 3.The LayoutOpen procedure initializes variables thatare used by some of the other routines (see figure 4). LayoutOpen also sets the opening HTML tags based

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

-- 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.

-- Initialise the layout parameters

LayStyle := p_layout_style;LayCustomBullet := p_custom_bullet;LayBorderTable := p_border;LayVertBorderChars := ' ';LayHoriBorderChars := NULL;LayNumOfCols := 0;LayCurrentCol := 0;

Figure 4. Layout Parameters – as initializedin LayoutOpen procedure

Page 16: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

16 OracleEkspertDecember 2001

on the Layout Style generator preference (see figure5).

LAYOUTCLOSE.

LAYOUTROWSTART.

LAYOUTROWEND.

LAYOUTHEADER.

LAYOUTDATA.See figure 10.These routines are called from procedures in the gen-

erated module packages. Figure 11 is a clip from aFormView procedure showing calls to the layout rou-tines.As can be seen here, there are two calls to theLayoutData procedure for every item displayed. Thefirst call to LayoutData is for the leading prompt; thesecond call is for the item and the trailing prompt, ifone is included. If the item is an input field, there is animbedded call to a function that builds the HTML forthe type of input control.

Designer Generation PreferencesUsing the Item layout style PreferenceAll forms of a WSG module have a Layout Style gen-erator preference. By choosing ‘Layout items in a cus-tom list’ for the View Form preference Item layout style(ZONVLS), the LayStyle variable will be set to CUS-TOM by the LayoutOpen procedure. The purpose ofthis preference is to indicate the layout should be a listwith a custom bullet. After studying the code, itbecame obvious it had potential to be used for a sim-ilar but different purpose. Minor modifications to theWSGL code could direct the logic to custom layoutcode. If the LayStyle variable value is CUSTOM, then

custom PL/SQL procedures can be called and thestandard layout logic can be bypassed.

if (LayStyle = LAYOUT_BULLET)then

-- Open Listhtp.ulistOpen;

elsif (LayStyle = LAYOUT_NUMBER)then

-- Open Listhtp.olistOpen;

Figure 5. Setting the opening HTML tagsbased on Layout style preferences

-- Name: LayoutClose---- Description: End the layout area.---- Parameters: None

Figure 6. LayoutClose

-- 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

-- 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

-- 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

Page 17: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

17OracleEkspert December 2001

Using the HTML for custom list item PreferenceFurther investigation of the code executed wheneverLayStyle was CUSTOM, showed the use of the vari-able LayCustomBullet. LayCustomBullet contains thevalue of the preference HTML for custom list item(MODCLH). A custom bullet would normally be a refe-rence to an image path or some other HTML. Thispreference is optional and strictly text. Therefore,interrogating the value of LayCustomBullet for specif-ic custom layout properties could be used to direct theoutput of the custom PL/SQL.

Creating custom code driven bypreferencesTo keep the customization of layout consistent withthe structure of the standard WSGL code, I added thefollowing procedures to the WSGL package.

1. CustomOpen2. CustomClose3. CustomRowStart4. CustomRowEnd5. CustomData

Initially, I copied the code from the standard proce-dures into the custom ones. Much of the standardcode was useful as is. I also wanted the custom pro-cedures to produce the same custom bulleted list asthe original procedures whenever there were no cus-

tom layout properties specified. Then I modified the standard layout procedures to callthe custom procedures whenever the layout style(LayStyle) was CUSTOM, and to replace, bypass orignore, by commenting the lines, the original WSGLcode. Not all procedures had a check for a LayStyle ofCUSTOM, so I added an If LayStyle = LAYOUT_CUS-

TOM statement to anystandard procedures with-out one (see figure 12).Some code was replacedwith a call to a custom rou-tine (see figure 13).

Formatting prompttext on a per itembasisOnce I could direct thelogic to the custom rou-tines, I worked on how toeliminate each of the con-

-- 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

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.

-- JJC ********* Start Custom Code **************elsif (LayStyle = LAYOUT_CUSTOM)then

-- Open Custom LayoutCustomOpen(Laystyle, LayBorderTable, LayCustomBullet);

--JJC ***** End Custom Code *****

Figure 12. - Adding an ‘if’ condition to call the custom routine

-- JJC ********* Start Custom Code **************CustomRowStart(p_valign);

-- JJC Remove next original line by commenting-- LayOutputLine := LayCustomBullet || ' ';-- JJC ********* End Custom Code **************

Figure 13. – Replacing the original code with a call to a custom routine

Page 18: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

18 OracleEkspertDecember 2001

straints described above.To get mandatory field prompts to display differently, Iused a convention in the prompt text to identify amandatory field. Many web pages indicate mandatoryinput fields by placing an asterisk (*) at the start of theprompt. Using this convention makes detecting amandatory field easy. Since the LayoutData proce-dure is called twice for every field on Insert and ViewForms, the first call is always the leading prompt. Asimple PL/SQL parsing routine finds and removes the

leading asterisk in the leading prompt, and adds theHTML to change the color of the prompt. A more flexible option would be to allow the prompttext itself to contain the HTML. The WSG uncondi-tionally replaces any HTML reserved characters fromthe prompt with special HTML strings (e.g. a ‘<’becomes &lt;) to render the characters as entered. Iadded a value to the HTML preference(LayCustomBullet variable) so I could direct the code

to reverse the effect of the WSG replacement. I usedthe value, ALLOWHTML. If the preference containedthis string then execute:Any HTML in the prompt will now be interpreted andrendered by the browser. This adds the full extent ofHTML to the prompt text. Each prompt can now beformatted individually. Use your creativity to producemany different effects, not just formatting the prompttext. The only limitation is the prompt property’s maxi-mum length of 130 characters (why it is this short isodd, since many other module text properties are 240characters).CAUTION

The prompts are also used in the heading of RecordLists. If you are trying to be ‘creative’ on theInsert/View Forms, the Record List can look verystrange. Fortunately, there is a separate WSGL rou-tine for the Record List headers, so you can codearound this problem by removing the HTML from theprompt in that routine.

Position prompt text in relation to theinput fieldI had seen many forms on web sites where I pur-chased products or had to register that had promptsabove the input field. The prompt was also smallerthan the normal body text. This was attractive for tworeasons:

1. You can get more fields horizontally on a form tominimize any left/right scrolling or wrapping ofprompt text.

2. You can have a longer prompt and not worryabout wrapping.

I wanted the prompt and input field to have this look:

In a similar fashion to ALLOWHTML, a special stringwas added to the HTML preference to indicate theprompt and field position. I used the value STACKED.The normal way the WSGL routines build the code forthe prompt is to open an HTML table cell with a <TD>tag, add the prompt enclosed in bold tags, then close

the cell with a </TD> tag. For theSTACKED positioning and format, thecell is opened, the prompt is enclosed infont tags reducing the size, and, insteadof closing the cell, a <BR> tag isappended. The tag to close the cellcomes after the field on the second callto the LayoutData, and in turn,

CustomData, function. There is a caution here whenusing split prompts (some of the prompt text beforethe field and some after). The second call toLayoutData includes a string with both the field andthe trailing prompt text. It gets a bit tricky parsing thisstring given the many formatting options for the inputfield (pop lists, radio buttons, check boxes, etc.) or thedisplay formatting (BOLD, IMAGE, URL, etc) .Fortunately, this STACKED format style virtually elim-inates the need to use split prompts. Instead I can

include all the informationin the leading prompt, or,in combination withALLOWHTML, I can havea multi-line leadingprompt by imbedding a

<BR> tag in the prompt. Again, the limit here is 130characters, including the HTML tags.

Span HTML columns for large input fieldsThis requirement only applies to a form that has 2 ormore items per line and uses an HTML table to alignprompts and fields. A form with a long input field willhave the field squashed into a single cell by reducingits width, or the form requires left and right scrolling.Left and right scrolling is HIGHLY undesirable onHTML pages. Down scrolling is much more accept-able. Spanning is a commonly used <TD> tagattribute to display long fields.The code changes for spanning are applied to thestandard WSGL code for a LayStyle of TABLE. I alsoadded an additional value, TABLE, for custom layoutin an HTML table. The code copied from the standardprocedures to handle 2 or more items per line is leftintact. Therefore, logic for spanning columns wasadded to both the standard and the custom proce-dures.A WSGL package span length variable holds a valueused to determine when to span columns. Anothervariable was defined to indicate the number ofcolumns to span. The generated code for an<INPUT> tagged field includes a WIDTH value that iscompared to the span length. For displayed data, theSQL LENGTH function is used to return the length forcomparison. Some additional exception logic isrequired in the code for special formatting that maynot have bearing on spanning, such as the path toimages. When the width or length of the field exceedsthe span length, a COLSPAN attribute is added to the

if substr(ptext,1,1) = ‘*’ thenptext = substr(ptext,2);ptext = ‘<FONT COLOR=”red”>’||ptext||</FONT>’;

end if;

Figure 14. – Displaying a mandatory field prompt in red

CusPromptString := REPLACE(CusPromptString,'&lt;','<');CusPromptString := REPLACE(CusPromptString,'&gt;','>');

Figur 15. – Replacing special strings to re-activate HTML in a prompt

Page 19: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

19OracleEkspert December 2001

<TD> tag, and other control variables for managinglayout of rows are adjusted accordingly.

Include extended descriptive text betweeninput fieldsThere’s another option available for special formattingof prompts and descriptive text for a given item –Dynamic SQL. Using another convention in theprompt, you could indicate the name of a function thatwould provide the prompt formatted in any way youwish and additionally any text before or after theprompt. You can supply instructions or explanationsso users are guided to enter relevant content into thefield. This is impossible to do on a standard generat-ed form, but a very common requirement in self-ser-vice web applications. Using Dynamic SQL to execute stored procedures orfunctions gives you a very powerful way of alteringcontent well beyond the standard generated code. Inparticular, this technique is very attractive for any datadriven content or to display text maintained by theuser in a database table. In the latter case, you caneliminate the need to regenerate and recompile fortext changes easily managed by the user with a sim-ple standard WSG form.

Adding a multi-lingual utility tocustom codeAfter having looked at the techniques above, it isn’tmuch of a stretch to discover a way to translateprompts. In fact, the translated text can be stored in atranslation table. The table contains the originalprompt, the language of the translation and the trans-lated prompt. Add an additional value to the customlayout HTML preference to indicate the language.When a language is specified, you parse the promptstring from the generated HTML, look up the translat-ed prompt from the translation table, and replace theoriginal prompt.There is more to obtaining a full multi-lingual capabili-ty than just translating prompts.

1. Server-side validation error text, button text andother text produced by the generated codeneeds to be in the desired language.

2. Client-side validation error text needs to be in thedesired language.

Server-side validation error Text, etc.The server-side error text strings are supplied byanother WSG library package, WSGLM. This pack-age has no package body and is only a set of con-stants defining various text strings. Designer comeswith several versions of this package in a variety oflanguages. They can be found in the folder on yourhard drive with the other WSG library PL/SQL sourcecode, typically [ORACLE_HOME]/cgenw60/cvwetc.The filenames have a suffix to indicate the language,e.g., wsglme.pks is Spanish, wsglmi.pks is Italian,wsglmd.pks is German, etc. You implement the text inthe chosen language by compiling the code in the fileinto your application schema. The WSGLM packagethen contains the text in the chosen language. YouCANNOT have more than one language in theWSGLM package at a time. Therefore, each lan-guage version of WSGLM must exist under its ownschema. This presents a small problem for a multi-lin-

gual application, but not insurmountable. The imple-mentation section below describes how to work with-in this constraint.

Client-side validation error TextOn the client-side, validation error text is providedthrough JavaScript routines in pop up windows. TheJavaScript code is generated into a separate modulepackage that produces the JavaScript for the mod-ule’s web pages. There is no equivalent set ofDesigner provided JavaScript message text in multi-ple languages. Even though Oracle Designer devel-opment has been kind enough to provide server-sidetext in many languages, you still cannot deploy theapplication in a chosen language simply by using theserver-side versions of WSGLM in that language. Youmust also have translations for client-side validation. Amethod around this problem is also described in theimplementation section.

Implementing a multi-lingual moduleThis is how you put all the pieces above together.

1. Build up your module in English until it meetsyour requirements. To be able to specify a lan-guage, set the form’s Item Layout Style to CUS-TOM using the methods described above.

2. Copy and rename the module for each languageyou wish to implement.

3. Add a language parameter to the custom layoutHTML preference that will trigger your addedcustom layout code to look up the translation forthe prompts.

4. Copy the JavaScript validation function(Typically the function [module-name]_Validate)from the English module’s web pages, and trans-late the English messages into each language.Add this JavaScript to each form as part of theTop of [form type] text area, to ensure it followsthe generated definition. This effectively replacesthe generated JavaScript function definition withyours. If you want the translation to be data driv-en, include a call to a function that will do thetranslation through a look up to a translate table,as was described for translating prompts above.(See Note below).

5. Create public synonyms that point to the tablesand WSGL packages, except WSGLM, in theoriginal schema, and grant necessary permis-sions to the foreign language schema owner

6. Create schemas for each language and compilethe appropriate WSGLM package into thematching schemas.

7. Generate your modules and compile them intothe matching schemas.

8. Create a DAD (Database Access Descriptor) inthe web server for the foreign language schemaowner.

Once you complete all of the above, you set up linksto each of the DAD/module combinations. When theuser enters data into the fields in their language, thedata will be updated in a single table, or any invalidentries will display an equivalent message in that lan-guage.NOTE:I investigated the use of another Designer feature forthe translation of the client-side (JavaScript) valida-tion, but found it did not work as documented. Under

Page 20: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

20 OracleEkspertDecember 2001

a module component there is a folder for Applicationlogic, and, under that, there is a folder for Events. Ifyou chose to create an Event, a dialog box appearswith a list of events for you to chose. Only one is aclient-side event, Validate. Select this and click Next.A dialog box appears with two named events alreadyin the box. When you click on either of these, anOverride button becomes active. The help for this but-ton is vague and confusing. It says, “To override thelogic that is automatically generated by an OracleDesigner Generator with your own code (user-modi-fied application logic), click this button.” No other helpdescribes what to do next or what effect clicking theOverride button has on the generated code. If youclick the button then add a name for your routine andclick Next, the following dialog box has a pop list acti-vated to indicate what code will be overridden by yourroutine. I chose Client-Side Data Validation. Click onFinish to open the Logic Editor for this routine. I pre-sumed I should enter client-side native JavaScriptlogic. After generating and compiling, I got a compileerror. I could eliminate the compile error if my modulehad both Insert and Update operations set.Nevertheless, the automatically generated client-sidevalidation code was not overridden. Had this featureworked as documented, it would have been the pre-ferred method for client-side translation.

ConclusionJust as you would spend some time working on a tem-plate or a library for Oracle Forms, you need to spendsome time to build your custom library routines for aWSG application. Just as you would put in more timeto ensure the templates are highly reusable, youwould want to do the same with your custom PL/SQLfor your WSGL library packages. The payback comeswith every module thereafter. It will only require settinga couple of Generator Preferences to greatly expandthe layout of your forms. This method could be moredata driven, since you have the full power of PL/SQLat your disposal. Instead of using generator prefer-ences, you could use tables to control the layout. Thiswould be a nice benefit to a Designer generated soft-ware product by allowing customization from settingparameters in system configuration tables.What has been described here is only the tip of theiceberg. Once the PL/SQL is written to parse the con-tent that WSG passes to the layout routines, you havecomplete freedom to produce just about any layoutyou want. Try it. You may just like it.

Page 21: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

21OracleEkspert December 2001

ABONN EMEN T

Ja tak, jeg ønsker:

___ 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 bladesendt 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: ____________________________

Adresse: ____________________________

Postnr/By: ____________________________

Land: ____________________________

E-mail: ____________________________

Refereret af: ____________________________

Adresse: ____________________________

Postnr/By: ____________________________

Som referencegave ønskes en signeret kopi af Oraclerne fra

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 ................................................................................................................................................................[ ]

Fax eller send kuponen til:

Pythia InformationKongensvej 32000 Frederiksberg

Fax: 26199991

Eller bestil via vores hjemmeside:

http://www.OracleEkspert.dk

Eller e-mail nedenstående oplysninger til:

[email protected]

Ved hver tegningaf minimum 1 års abon-

nement på OracleEkspertsender vi et stk signeret

kvalitetskopi af Oraclerne til denlæser, som har refereret den nye

abonnent til os.

Kopien er trykt på kraftigt papir. Den ernummereret og signeret med rød tush.

En OracleEkspert-læser er en personmed eget abonnement eller en per-son ansat i et firma, som har tegnet

abonnement på OracleEkspert.

Man kan ikke referere etabonnement til sig

selv.

Spred det glade budskab!

Referer abonnenter og fåsignerede og numereredetryk af OraclerneOraclerne

(se nederst på siden)

Page 22: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

22 OracleEkspertDecember 2001

26. november 2001Borland og Oracle samarbejderDen nye version af BorlandsJBuilder 6 vil indeholde værktøjer tildirekte integration med Oracle9iApplication Server. Der vil oven ikøbet være inkluderet en licens tilOracle9iAS.

21. november 2001OpenWorld på eBayFor dem, som gerne vil støtteofrene fra 11. september, kan manbyde på billetter til OpenWorld, etsæt af bøger fra Oracle Press ogtøj fra Henry Lloyd hos eBay.Alle pengene går ubeskåret til detamerikanske Røde Kors.

20. november 2001Oracle OLAP 3-1 over IBMI en undersøgelse lavet afSurvey.com vandt Oracle gangneså mange stemmer som IBM ispørgsmålet om det bedste”OnLine Analytical Processing”system.Oracle fik over 50% af stemmernesom den databaseleverandør afDatawarehouse og BusinessIntelligence løsninger.BC4J-generator i DesignerSue Harper, som er ProductManager hos Oracle annonceredepå ODTUGs mailliste at Designerteam’et nu arbejder på at lave enBC4J-generator til Designer.

19. november 2001Oracle9i og HP Superdrome slårrekordEn ny TPC-C (TransactionProcessing Council) benchmarktest af Oracle9i på HPs PA-8700Superdrome server med 64CPU’er målte 389434 transaktionerper minut.IBMs beste resultat med DB2 erpå 163776 tpmC, mens Microsoftfor nyligt offentliggjorde en målingaf Sql Server 2000 på en UnisysES7000 på 165219 tpmC.Oracles opstilling gav desuden denbilligste performanceløsning påUSD 21.24 /tpmC.

15. november 2001SAP er 65% hurtigere på Oracleend på DB2Begge målinger er overvåget ogcertificeret af SAP.

13. november 2001Oracle vinder undervisningsprisOracle vandt prisen ”2001Corporate University of the YearDistinguished Performance Award”uddelt af National Alliance ofBusiness.Oracle gør MS Outlook‘Unbreakable’Oracle annoncerer Oracle EmailMigration Service. Landis ICT er ifærd med atomlægge 44 Microsoft Exchangeservere til et Oracle9i RealApplication Cluster, hvilket vil ned-bringe mængden af software, hard-ware og administration, menssikkerhed og stabilitet styrkes.

Larry Ellison har udtalt at Oracleikke er interesseret i at få nogen tilat holde op med at bruge Outlook,men han mener, at man ikke børgemme sine mails på hundredvisaf Exchange servere, men hellereskulle have dem liggende på eneller to Oracle databaser.

6. november 2001Oracle ”Help Us Help”FoundationI dag annoncerede Oracle opret-telsen af Oracle ”Help Us Help”Foundation, som skal forære inter-net udstyr til skoler og ungdomsor-ganisationer i USA og internation-alt, der ikke selv har råd il det.Udstyret vil være Oracle-software,men også net-computere, hubs,laserprinere, kabler mv.Bestyrrelsen består af fire under-visere fra Standford University ogtre Oracle-chefer der iblandt LarryEllison.Oracle har afsat USD 6 mill til detførste års gaver.

30. oktober 2001Small Business Suite på top 100PC Magazine placerede OraclesSmall Business Suite blandt de 100bedste web sites. Oracle Small Business Suite vandtogså Editor’s Choice Award i begy-ndelsen af året.OSBS er sæt host’et web-applika-tioner, der tilbyder små virk-somheder finansstyring, CRM, ind-køb og e-handel.

Nyheder

Page 23: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

23OracleEkspert December 2001

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. Gruppen består af en bestyrelse og et antal Special Interest Groups, som afholder møder i Oracle Danmarks lokaler iBallerup. Indkaldelse til møderne sker via brugergruppens mailliste og via brugergruppens web-side (www.oug.dk).

OUGDK StormødeKoordinator: Lone Aalekjær, [email protected]øde: 12. december 2001 kl. 13:30Sted: Oracle Danmark, Lautrupbjerg 2-6, 2750 BallerupEmne: Select max(udbytte) from Support - Frank Torreck fortæller om iTar, Metalink og hvordan vi bedst udnytter support-værktøjerne.

DBA SIGKoordinator: Jean-Marc PedersenNæste møde er endnu ikke fastlagt.

Designer SIGKoordinator: Marc de Oliveira, [email protected]. Forslag til mødeemner modtages meget gerne.Møde: 9. januar 2002 kl. 13:00Sted: Oracle Danmark, Lautrupbjerg 2-6, 2750 BallerupEmner 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 SIGKoordinator: Lone Aalekjær, [email protected]æste møde er endnu ikke fastlagt.

Data warehouse SIGKoordinator: Erik Haar, [email protected]æste møde er endnu ikke fastlagt.

Web SIGKoordinator: Måske Benjamin Lund, [email protected] (dette er ikke bekræftet endnu)Næste møde er endnu ikke fastlagt.

Husk at tilmelde dig til møderne hos [email protected] (ellers får vi for få kager/vand!!)

OUGDK

Deadline for Artikler tilOracleEkspert nr 10

er den 11. januar 2002

*

Vi betaler 700 kr pr side

Page 24: #9 - Simplify Sysmedia.simplifysys.dk/images/pythia/articles/oe/oe0112Pythia002.pdfOracle gør MS Outlook ‘Unbreakable’ ... de trykte artikler, tips mv, samt at tillade bladets

Templates, biblioteker og værktøjerTemplates, biblioteker og værktøjer

tiltil

Designer 6iDesigner 6i

&&

Forms BuilderForms Builder

Versionen til Web -UUde nu!Versionen til Web -UUde nu!

www.seeristic.comwww.seeristic.com