Archive of ‘Oracle SQL’ category

Lync und OC mit APEX

persönlich finde ich ja XML-Telefone von SNOM und Aastra klasse. Man kan als Entwickler die Interaktion des Telefons mit seinen Business-Applikationen selbst bestimmen und auf Anforderungen der Anwender perfekt abstimmen.
VoIP-XML ist relativ einfach zu erlernen.

Lync ist aus meiner Sicht nur eine standartisierte Kopplung der PBX mit Exchange um Firmenintern Vorteile zu erhalten.

Für die Aastra-Telefone hatte ich mal eine eigene Applikations-Integration (Oracle-DB) als Modell entwickelt. .. Link ..

Eine Integration kann aber auch direkt auf dem Desktop erfolgen: Scupa koppelt den Lync-Client mit Snom-Telefonen.
http://www.sinc.de/de/loesungen/scupa/features.html

Zur Integration des LYNC-Clients mit APEX reicht eine passende Formatierung der Rufnummer als E.164-konforme Rufnummer.

Mit einer einfachen PL/SQL-Funktion kann man in APEX  einfach Telefonnummern in Hyperlinks konvertieren.

By Default formatiert die Funktion einfach nur die telefonnummer, so dass sie “lesbarer” wird und unterschiedliche Trennzeichen entfallen. Erst durch setzen des Parameters p_format auf 2 wird eine E.164-konforme Rufnummer gebildet und mit Hyperlink ausgegeben.

Für Reporting-Zwecke wird der “Reporting”-User ausgeschlossen:

CREATE OR REPLACE FUNCTION dbfun$format_tel ( p_number in Varchar2
 , p_format in Number   default 1)
return varchar2
as

 v_ret2 Varchar2(4000):= substr(trim(p_number),1,4000);

 begin

 v_ret2 := replace(v_ret2,chr(9),'');
 v_ret2 := replace(v_ret2,'-',' ');
 v_ret2 := replace(v_ret2,'_',' ');
 v_ret2 := replace(v_ret2,'.',' ');
 v_ret2 := replace(v_ret2,'\',' ');
 v_ret2 := replace(v_ret2,':',' ');
 v_ret2 := replace(v_ret2,';',' ');
 v_ret2 := replace(v_ret2,',',' ');
 v_ret2 := replace(v_ret2,'#',' ');
 v_ret2 := replace(v_ret2,'(',' ');
 v_ret2 := replace(v_ret2,')',' ');
 v_ret2 := replace(v_ret2,'{',' ');
 v_ret2 := replace(v_ret2,'}',' ');
 v_ret2 := replace(v_ret2,'  ',' ');

 if length(v_ret2) > 20 then
  v_ret2 := replace(v_ret2,' ','');
 end if;

 if p_format = 2 then
  v_ret2 := replace(v_ret2,' ','');
  v_ret2 := replace(v_ret2,'/','');

 -- nationale Nummern
  if substr(  v_ret2,1,1)='0' and   substr(  v_ret2,1,2)!='00' then
     v_ret2 :='+49'|| substr(v_ret2,2);
  end if;
   --internationale Nummern
  if substr(  v_ret2,1,2)='00'  then
     v_ret2 :='+'|| substr(v_ret2,3);
  end if;
end if;

if p_format = 2
   anduser  != 'REPORTING' then  -- Generate Link to E.164-Numer
   v_ret2 := '<a href="tel:'||v_ret2||'" title="click to dial with Lync">'||p_number||'</a>';
end if;

return v_ret2;

end;
/

GREATEST und LEAST

Manchmal hat man das Problem, dass DECODE nicht richtig passt und CASE zu aufwändig ist. .. und man will ja nicht immer neue Oracle-Funktionen selbst schreiben
Hier helfen noch die Oracle-Funktionen GREATEST und LEAST

greatest(e1[,e2] …) größter Wert der Ausdrücke
least(e1[,e2] …) kleinster Wert der Ausdrücke

bei einem Vergleich von Strings gilt:

  • greatest (‘abc’,’cbe’) = ‘cbe’
  • greatest (‘ABC’,’cbe’) = ‘cbe’
  • greteast(‘ABC’,’987′) = ‘ABC’

Die Funktionen bitte nicht mit den Gruppierfunktionen MIN und MAX verwechseln!

SQL – Like-Suche nach Wildcard-Zeichen unter Oracle

Aktuell werden auch schon teilweise REGEX-Funktionen in Datenbanken etabliert.
Oftmals reicht aber eine einfache Suche mit vorgegebenen Mustern
Select * from Mitarbeiter
where nachname like ‘H%mann‘;
Liefert Heinemann, Heynemann und auch Hoffmann
Select * from Mitarbeiter
where nachname like ‘He_nemann‘;
Liefert nur Heinemann, Heynemann
Zum ignorieren von Klein – und Großschrift kann man beides klein setzen
Select * from Mitarbeiter where lower(nachname) like lower(‘He_nemann‘);
Escape-Zeichen ermöglichen die Suche von Datensätzen, die einen eigentlichen Wildcard enthalten.
Die nachfolgende Suche liefert alle Tabelle, die auch ein “_” enthalten:
Select * from all_tables
where table_name like ‘%\_%’ ESCAPE ‘\’

Oracle, Alternative zu DECODE ist CASE

Decode ist eine einfache Funktion, in der man eine Expression beschreibt und dann fast beliebig viele Ersetzungen durchführen kann.
Leider werden die Expressions, Search und Result-Ketten aber manchmal zu komplex oder Decode mehrfach geschachtelt.
Einfacher ist es hier, direkt Case einzusetzen.

DECODE
Syntax: decode( expression , search , result [, search , result]… [, default] ) as label

select
decode(POSTLEITZAHL, 70599, ‘Stuttgart – Asemwald’, 70499, ‘Stuttgart – Bergheim’, ‘UNBEKANNT’) from ADRESSE;

 

 

CASE – Funktion, längere Schreibweise, – aber flexibler

Syntax: case when expression then result
when expression then result
when expression then result
else default
end as label

Beispiel in einer Geräteliste

select
case
when substr(name, -2)=’RH’ then ‘Router‘
when device_id between 1015544 and 1015600 then ‘MURXS’
else ‘sonstiges’
end as Zusatz
, e.* from my_cmdb_devices  e;