Zum Hauptinhalt springen

Tips zu Oracle

Funktion me_to_char

Verfügbar ab Version 23.1.81 Steht nur bei Datenbanken mit MapEdit Datenmodel zur Verfügung.

Bietet eine Funktion an die einen Zahlenwert gerundet und formatiert ausgibt.

Hierbei kann gewählt werden welche Zeichen als Dezimal und Tausender Trenner verwendet werden sollen.

Wird die Angabe von Punkt und Komma weg gelassen dann wird '.,' angenommen. Bei dem Parameter sind nur wertde zulässig die der Oracle "NLS_NUMERIC_CHARACTERS" Parameter erlaubt. Im Normalfall also ',.' oder '.,'

Beispiel:

select me_to_char(hoehe,2) from punkte;
select me_to_char(hoehe,2,'.,') from punkte;

Ausgabe:
1.002,12

Beispiel:

select me_to_char(hoehe,2,',.') from punkte;

Ausgabe:
1,002.12

Beispiel:

select me_to_char(hoehe,2,' .') from punkte;

Ausgabe:
1 002.12

Umwandeln von Texte in Zahlen

Problem: Man hat ein Textfeld (varchar2) in dem Zahlen und Texte stehen. Man will nun nur die Zahlenwerte in ein Numerisches Feld (number) kopieren. Ein Einfaches TO_NUMBER funktioniert hier nicht und laeuft auf einen Fehler da das Feld auch Texte enthaelt.

Lösung:

update strassen
set hausnummer = TO_NUMBER(hausnummer_als_text DEFAULT null ON CONVERSION ERROR)
where hausnummer_als_text is not null

Statt "null" kann auch ein zahlenwert angegeben werden der genutzt werden soll wenn keine Zahl vorhanden ist.

Beispiel zum anlegen fehlender Labels

Diese Beispiel nimmt als Geometrie den Zentroid eines Linien Features (Strasse) und fügt diesen in die Label Tabelle ein.

insert into STRASSEN_LBL (FID_PARENT, LABEL_TEXT, GEOM) select FID, strname, SDO_GEOM.SDO_CENTROID(SDO_GEOM.SDO_MBR(geom)) as GEOM from STRASSEN

Passwort Ablauf verhindern

Anmelden mit SYSTEM User

alter profile "DEFAULT" limit  password_life_time unlimited;

Dies gilt nur für neue User. Bei vorhandenen Usern muss das Passwort nochmal gesetzt werden (kann das gleiche sein)

alter user MEIN_USER identified by mein_password

UNION von Tabellen mit Geometry Feldern

Wenn Sie Tabellen in einem SQL kombinieren wollen dann immer "UNION ALL" verwenden und nicht "UNION" da ansonsten Oracle einen Fehler wirft.

Richtig:

select fid,geom from park    
union all
select fid,geom from library

Falsch:

select fid,geom from park    
union
select fid,geom from library

ORA-22901: cannot compare VARRAY or LOB attributes of an object type