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

Funktion me_to_rgba

Ab Version 25.2.69
Steht nur bei Datenbanken mit MapEdit Datenmodel zur Verfügung.

Wandelt HEX ARGB und HEX RGB Farben in HEX RGBA Farben um.
NULL Werte, Werte die nicht mit # anfangen und Werte die nicht umgewandelt werden können werden nach '#000000FF' (Schwarz) umgewandelt.

Die wird für MapServer benötigt da MapServer RGBA Farben benötigt während im Darstellungsmodell ARGB Farben verwendet werden.

Beispiel:

select me_to_rgba(color_line) from table; 
select me_to_rgba('#FF00FF00');

RGBA = Red-Green-Blue-Alpha

Alpha ist der Transparente Anteil

Beispiel:

FarbeRGBARGBRGBA (Ergebnis)
Rotme_to_rgba('#FF0000')me_to_rgba('#FFFF0000')#FF0000FF
Gruenme_to_rgba('#00FF00')me_to_rgba('#FF00FF00')#00FF00FF
Blaume_to_rgba('#0000FF')me_to_rgba('#FF0000FF')#0000FFFF

Bei Map/Topobase Oracle Datenmodell wird die Funktion wenn Sie nicht vorhanden ist vom Programm angelegt.
Wenn diese fehlt, was vorkommen kann wenn die Verbindung keine Rechte zum anlegen von Funktion hat, dann muss diese händisch angelegt werden.

Hier der SQL zum händischen anlegen der Funktion

--BEGIN SQL
create or replace function me_to_rgba(color IN VARCHAR2)
return VARCHAR2
IS
BEGIN
IF color LIKE '#%' AND LENGTH(color) = 9 THEN
RETURN '#'||SUBSTR(color,4,6)||SUBSTR(color,2,2);
ELSIF color LIKE '#%' AND LENGTH(color) = 7 THEN
RETURN color||'FF';
ELSE
RETURN '#000000FF';
END IF;
EXCEPTION
WHEN OTHERS THEN
return '#000000FF';
END;
--ENDSQL

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

Defekte Trigger finden

Wenn Sie eigene Triogger definieren und diese Fehlermeldung bekommen:

ORA-04098: trigger XY is invalid and failed re-validation

Können Sie mit diesem Befehl ermittel wo genau der Fehler liegt.

SELECT * FROM USER_ERRORS WHERE TYPE = 'TRIGGER' AND NAME = 'NAME des Triggers';