Gå til innhold

Pl/sql, treng hjelp med procedyrer o.l [løst]


Anbefalte innlegg

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 av TheOneAsk
Lenke til kommentar
Videoannonse
Annonse

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 av siDDIs
Lenke til kommentar

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 av TheOneAsk
Lenke til kommentar

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 av siDDIs
Lenke til kommentar

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 av Crowly
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...