Theoneask Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) Heisann. Sitter her og skal jobbe med pl/sql oppgåver. Men sitt litt fast. Er nok egentlig veldig lett stoff, men trur ikkje eg har lært nok til å komme i mål. loenn3(p_prosent IN NUMBER, p_ansnr IN NUMBER) skal auka timelønnen med p_prosent for ansatt med ansattnummer lik p_ansnr Test prosedyren ved å auke lønna til Kari med 7 % og lønna til Lars med 4%. Er oppgåva eg skal løyse. Har komt fram til dette, men blir ikkje heilt rett. CREATE OR REPLACE procedure loenn3(p_prosent IN NUMBER, p_ansnr IN NUMBER) IS BEGIN UPDATE ansatt SET timeloenn=timeloenn*p_prosent WHERE p_ansnr=navn; END; Dersom det finst noken bra guider på nettet hadde det vore fint om noken kunne vise det. Takk på forhånd. Rekner med at noko er feil med WHERE setninga, men veit ikkje kva. Endret 24. oktober 2007 av TheOneAsk Lenke til kommentar
j000rn Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 WHERE p_ansnr=navn; 483 = 'Kari' ? Lenke til kommentar
Theoneask Skrevet 22. oktober 2007 Forfatter Del Skrevet 22. oktober 2007 Jau fant ut av det. Tok berre WHERE p_ansnr=ansnr; Blir jo sånn at eg må vete ansnr til personen men får berre bli sånn. Lenke til kommentar
siDDis Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) Hjelper dette? create or replace procedure loenn3(p_prosent IN NUMBER, p_ansnr IN NUMBER) AS gammelTimeLonn NUMBER(10,2); nyTimeLonn NUMBER(10,2); BEGIN -- Google NVL for å skjønne hva den gjør SELECT NVL(timeloenn,0) INTO gammelTimeLonn FROM ansatt WHERE ansnr = p_ansnr; -- Regne med at p_prosent er 1.04 eller 1.07 SELECT (gammelTimeLonn*p_prosent) INTO nyTimeLonn FROM dual; -- Så sjekker me om personen faktisk har timelønn IF gammelTimeLonn > 0 THEN -- Person har timelønn og vi auker den UPDATE ansatt SET timeloenn = nyTimeLonn WHERE ansnr = p_ansnr; END IF; END loenn3; Har ikkje testa om det fungerer though Endret 22. oktober 2007 av siDDIs Lenke til kommentar
Theoneask Skrevet 22. oktober 2007 Forfatter Del Skrevet 22. oktober 2007 (endret) Fekk til den. Men sliter meir med neste.: Lag ein funksjon mloenn som reknar ut og returnerer månadslønna til ein tilsett. Ansattnummer til den tilsatte skal være innparameter.Månadslønna vert rekna ut etter følgjande formel: (65% av timelønn) * 7,5 * 20. Dersom timelønna for ein tilsett ikkje er kjent , skal retur verdien være 0. Fått til dinna. CREATE OR REPLACE FUNCTION mloenn(p_ansnr IN NUMBER) RETURN NUMBER IS v_timeloenn ansatt.timeloenn%TYPE; BEGIN SELECT NVL(timeloenn,'0') INTO v_timeloenn FROM ansatt WHERE ansnr=p_ansnr; RETURN (v_timeloenn*0.65)*7.5*20; END mloenn; / Takk for svar. Endret 22. oktober 2007 av TheOneAsk Lenke til kommentar
siDDis Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 (endret) Den ser rimeleg korrekt ut bortsett frå at eg ville ha gjort det må denne måten CREATE OR REPLACE FUNCTION mloenn(p_ansnr IN NUMBER) RETURN NUMBER IS v_timeloenn NUMBER(20,2); BEGIN SELECT NVL(timeloenn,0) INTO v_timeloenn FROM ansatt WHERE ansnr=p_ansnr; RETURN (v_timeloenn*0.65)*7.5*20; END mloenn; / Endret 23. oktober 2007 av siDDIs Lenke til kommentar
roac Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 Personlig vil jeg vel si at å bruke %TYPE er å foretrekke i Oracle, da holder det med deklarasjon av datatype ett sted. Ved senere endringer kan det redusere faren for feil ganske så betydelig. Lenke til kommentar
siDDis Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 Når du først nevner det så har du faktisk heilt rett. Ein bør bruke det så ofte som det faktisk er mogleg. Så eg må bare skjerpe meg Lenke til kommentar
Crowly Skrevet 24. oktober 2007 Del Skrevet 24. oktober 2007 (endret) Dette er vel en gammel måte å gjøre det på SELECT (gammelTimeLonn*p_prosent) INTO nyTimeLonn FROM dual; Kan vel gjøres slik ? nyTimeLonn:=gammelTimeLonn*p_prosent; Men jeg har for det meste kun brukt Oracle Forms 6.0 og PL/Sql i det, så jeg for ta forbehold om litt begrenset kunnskap på området Endret 24. oktober 2007 av Crowly Lenke til kommentar
siDDis Skrevet 24. oktober 2007 Del Skrevet 24. oktober 2007 Hehe, fint tips. Eg burde få meg ein bok om pl/sql og ikkje google halvdårlege eksempler. Får mange stygge vaner med seg då Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå