Toon posts:

[oracle] Return waarde wordt niet terug gegeven

Pagina: 1
Acties:

Verwijderd

Topicstarter
hallo,

Op dit moment ben ik bezig om een oracle database in te richten. Ik heb een aantal tabellen aangemaakt zoals de tabel lid. Hierin wordt een postcode geregistereed. Ik wil graag controleren of de postcode die ingevoerd is uit 6 karakters bestaan en begint met 4 cijfers en 2 letters. Ik heb hiervoor de volgende functie geschreven:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
create or replace function formaat_postcode(postcode in varchar2) 
return varchar2
is
    postcode_lengte number(1);
    postcode_cijfers number(4);
    postcode_letters varchar2(2);   
begin
if length(postcode) > 6
then
  return null;
end if;
if length(postcode) < 6
then
  return null;
end if;  
if length(postcode) = 6
then
postcode_cijfers := substr(postcode,1,4);
postcode_letters := substr(postcode,5,2);
 if postcode_cijfers between 0000 and 9999
  then
    return to_char( postcode_cijfers ) || upper( postcode_letters );
  else
    return null;
  end if;
end if;
end;


Ik krijg nu telkens de volgende melding:

functie FORMAAT_POSTCODE wordt zonder waarde op regel 27 geretouneerd

Ik heb gezocht op internet maar kon hierover nog niet bruikbaars vinden. Weet iemand toevallig wat ik vergeet of verkeerd doe? De code is overigens nog niet helemaal af maar voordat ik verder ga met extra contolles e.d. wil dit eerst werkend hebben.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 05:21

momania

iPhone 30! Bam!

Zet onder je laatste 'end if;' nog eens 'return null;' ;)



Trouwens is het netter om 1 exit point te hebben.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create or replace function formaat_postcode(postcode in varchar2) 
return varchar2
is
    postcode_lengte number(1);
    postcode_cijfers number(4);
    postcode_letters varchar2(2);    
    result varchar2(6);
begin
if length(postcode) = 6 then
  postcode_cijfers := substr(postcode,1,4);
  postcode_letters := substr(postcode,5,2);
  if postcode_cijfers between 0000 and 9999 then
      result := to_char( postcode_cijfers ) || upper( postcode_letters );
  end if;
end if;
return result;
end;


Doet precies hetzelfde :Y)

[ Voor 84% gewijzigd door momania op 23-01-2007 23:17 ]

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
momania schreef op dinsdag 23 januari 2007 @ 23:13:
Zet onder je laatste 'end if;' nog eens 'return null;' ;)
Oww haha bedankt, Had ik niet gezien. Sorry |:(

  • momania
  • Registratie: Mei 2000
  • Laatst online: 05:21

momania

iPhone 30! Bam!

Zie edit btw ^^^ ;)

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

'between 0000 and 9999' is trouwens geen goede check op alle karakters cijfers zijn: 0ABC bijvoorbeeld valt daar ook tussen...