Avatar billede dl74 Nybegynder
13. januar 2004 - 10:27 Der er 5 kommentarer og
1 løsning

Tildele dynamisk variabel sin værdi i et loop

Vil gerne have lidt hjælp til hvad det er jeg gør forkert. Jeg har to variable som jeg i et loop skal bruge til dynamisk at give en tredje variabel sin værdi,
men der er en fejl i concateneringen af variablen i IF sætningen ('w_'||w_bygningstype||w_udnyt_plan||'_risk11_samlet_praemie') - please help:

IF 'w_'||w_bygningstype||w_udnyt_plan||'_risk11_samlet_praemie' < w_BEB_risk11_min_praemie THEN
    w_bra_sats := w_bra_sats + (w_BEB_risk11_min_praemie - 'w_'||w_bygningstype||w_udnyt_plan||'_risk11_samlet_praemie'));
END IF;


Lige nu er jeg nødsaget til at gøre følgende, men da jeg har mange andre beregninger af samme slags vil jeg MEGET gerne tildele værdien dynamisk:
IF w_bygningstype = 'BEB' AND w_udnyt_plan = '1' THEN
    IF w_BEB1_risk11_samlet_praemie + w_BEB_risk11_grundpraemie < w_BEB_risk11_min_praemie THEN
        w_bra_sats := w_bra_sats + (w_BEB_risk11_min_praemie - w_BEB1_risk11_samlet_praemie);
    END IF;
ELSIF w_bygningstype = 'BEB' AND w_udnyt_plan = 'F' THEN
    IF w_BEBF_risk11_samlet_praemie + w_BEB_risk11_grundpraemie < w_BEB_risk11_min_praemie THEN
        w_bra_sats := w_bra_sats + (w_BEB_risk11_min_praemie - w_BEBF_risk11_samlet_praemie);
    END IF;
ELSE
    IF w_AND1_risk11_samlet_praemie +  w_BEB_risk11_grundpraemie < w_BEB_risk11_min_praemie THEN
        w_bra_sats := w_bra_sats + (w_BEB_risk11_min_praemie - w_AND1_risk11_samlet_praemie);
    END IF;
END IF;
Avatar billede dancni Nybegynder
13. januar 2004 - 15:32 #1
min umiddelbare vurdering er at du blander nummeriske (+,-) og string operationer (||) i samme statement. Principielt er PL/SQL datatyper "hårde" og skal konverteres eksplicit.

Under forudsætning om at 'w_bra_sats ', 'w_BEB_risk11_min_praemie ' er nummeriske typer burde du skrive to_number('w_'||w_bygningstype||w_udnyt_plan||'_risk11_samlet_praemie')) for at sikre at expression bliver nummerisk type.

Hvis dette ikke er fejlen så prøv at skrive hvilken fejl PL/SQL fejlkode du får samt lav et mindre eksempel
Avatar billede dl74 Nybegynder
13. januar 2004 - 15:38 #2
Har jeg prøvet og så får jeg følgende fejl...
ORA-06502: PL/SQL: numeric or value error: character to number conversion
Avatar billede dl74 Nybegynder
13. januar 2004 - 15:40 #3
Du kan selv generere fejlen ved at oprette de to numeriske variable og skrive
message(to_number('w_'||w_bygningstype||w_udnyt_plan||'_risk11_samlet_praemie'));
Avatar billede dancni Nybegynder
13. januar 2004 - 16:49 #4
Mit tidligere svar var ikke helt gennemtænkt.
Det er helt klart at dit problem skyldes manglende eksplicit typekonvertering.

Hvis du har nedenstående statement:
"message(to_number('w_'||w_bygningstype||w_udnyt_plan||'_risk11_samlet_praemie'));"
og feltet w_bygningstype = 1 og feltet w_udnyt_plan = 2
svarer det jo til at du havde udført kommandoen
"message(to_number('w_12_risk11_samlet_praemie'));"

Da strengen 'w_12_risk11_samlet_praemie' ikke er et validt nummerisk tal kommer der naturligvis en fejl når du udfører to_number
Avatar billede dl74 Nybegynder
01. marts 2004 - 10:05 #5
Lukker sagen da den ikke er aktuel længere, fandt en anden løsning
Avatar billede anders_svejgaard Nybegynder
24. marts 2004 - 16:32 #6
Hvad var løsningen?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester