PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PLSQL - Text herausfiltern und Wert setzen



markwaldhoff
28-06-2005, 06:47
Ich möchte eine ID für Anreden vergeben. Das soll so aussehen das die Anrede "Frau" die ID 0001 hat und "Herr" die ID 0002.

Mir stehen bereits Daten zur Verfügung die so aussehen:

Herr Matthias
Fr. Hildegar
H. Obersdorf
H Hildesheim
Mrs. Ales Chapelle
Mr Hop

Wie Ihr sehen könnt ist das sehr schön gemischt... und sehr gut durchdacht... :mad:
Naja... jedenfalls muss ich jetzt zu jedem Datensatz die richtige ID vergeben (soweit eine Andrede vorhanden ist) und dann später noch jeweils die Anrede (wenn sie da ist) "abschneiden", so das nur noch der Rest im Feld stehen bleibt....

Zum ersten Punkt habe ich mir schon was überlegt, was auch funktioniert. Jedoch weiß ich nicht wie ich ein "oder" in der If Abfrage unterbringe ?!?!?
In Java etc. kann man doch sowas machen:

if var1 = 'test' || var2 = 'test2' || var2 = 'test'
.....

Ist sowas in PLSQL nicht möglich , oder funktioniert das anders ???
Jedenfalls ist das die Funktion die ich bis jetzt habe:


CREATE OR REPLACE FUNCTION RPL_ANREDE (NAME varchar2) RETURN varchar2 IS
anrede varchar2(4);
zaehler integer;
l_name varchar2(50);

BEGIN
anrede := ' ';
l_name := LOWER(NAME);
zaehler := instr(l_name,' ');
zaehler := zaehler - 1;

IF substr(l_name,1,zaehler) = 'frau' THEN
anrede := '0001';
END IF;

IF substr(l_name,1,zaehler) = 'herr' THEN
anrede := '0002';
END IF;


RETURN anrede;
END;
/


Es geht jetzt zunächst mal darum das ich die beiden IF-Zweige jeweils noch mit anderen Werten belege...also beim ersten soll dann z.B. diese Wertemenge geprüft werden: {frau,fr,mrs,mdm,f...}
Wie mache ich das am besten und am einfachsten ?

markwaldhoff
28-06-2005, 07:13
Habs schon gelöst... und zwar so:


CREATE OR REPLACE FUNCTION RPL_ANREDE (NAME varchar2) RETURN varchar2 IS
anrede varchar2(4);
zaehler integer;
l_name varchar2(50);
l_frau varchar2(50);
l_mann varchar2(50);


BEGIN
anrede := ' ';
l_name := LOWER(NAME);
zaehler := instr(l_name,' ');
zaehler := zaehler - 1;

l_frau := 'frau fr. fr mdm. mdm mrs mrs. f. f';
l_mann := 'herr hr. hr h. h mr. mr';
l_name := substr(l_name,1,zaehler);


IF instr(l_frau,l_name)!=0 THEN
anrede := '0001';
END IF;

IF instr(l_mann,l_name)!=0 THEN
anrede := '0002';
END IF;

RETURN anrede;

END;
/

sticky bit
28-06-2005, 19:20
Hmm, auch wenns schon gelöst ist, aber zu der einen Frage, eine Disjunktion (Logische-Oder-Verknüpfung) geht mit dem Schlüsselwort OR, also z. B.


IF var1 = 'test' OR
var2 = 'test2' OR
var2 = 'test' THEN
-- do something...
END IF;

ninguno
30-06-2005, 07:04
und noch ne lösung:



IF substr(l_name,1,zaehler) in ('frau', 'fr.', 'fr') THEN
anrede := '0001';
END IF;