SQL, maar dan gebruikersvriendelijk

Vandaag liep ik tegen een interessant stukje lichte frustratie op. Al jaren ben ik vooral bezig met postgresql/postgis. Een database die me zeer goed bevalt. Niet omdat het de beste/snelste/veiligste/stabielste database is, maar gewoon, omdat ik er fijn mee kan werken.

Case 1: geometry naar wkt

Vandaag moest ik weer met Oracle aan de slag. Vanuit een Java webservice haal ik gegevens uit Oracle die vervolgens via Rest worden ontsloten. Dan maar even zelf queries bakken en de geometrie omzetten naar WKT (Well known text) zodat ik niet allerlei bibliotheken moet downloaden voor java, maar de data gewoon kan benaderen als tekst.

Oracle:

select SDO_GEOMETRY( 
    o.geometry.sdo_gtype, 
    NULL,
    o.geometry.sdo_point,
    o.geometry.sdo_elem_info,
    o.geometry.sdo_ordinates).get_wkt() 
from onderdelen o;

PostGIS:

select asWKT(geometry) from onderdelen;

Case 2: md5 hash

Mijn database gebruikt wachtwoorden uit andere systemen. Omdat ik geen veiligheids issue wil introduceren, wilde ik proberen de wachtwoorden versleuteld op te slaan. De meest eenvoudige manier hiervoor is in mySQL en Postgresql md5. Ik wil dus met sql een md5 hash genereren voor een wachtwoord zodat wachtwoorden niet zichtbaar in een database hoeven te worden opgeslagen

Oracle:

create or replace function md5(input varchar2) 
  return sys.dbms_obfuscation_toolkit.varchar2_checksum as 
    begin 
        return lower(
            rawtohex(utl_raw.cast_to_raw(
                sys.dbms_obfuscation_toolkit.md5( 
                  input_string => input 
                )
            ))
        ); 
    end;

select md5('mijnwachtwoord') from dual;

PostGres:

select md5('mijnwachtwoord);

Met de pet op van SQL ontwikkelaar is het duidelijk; de queries van postgresql zijn intuitief en lijken op echte mensentaal. De queries van Oracle zijn onnodig complex, ontbreken soms en moeten dan via functies worden herbouwd en zijn absoluut niet in een oogopslag door een leek te lezen. Wanneer ik het aantal uren bij elkaar optel dat ik per jaar door de eenvoudige SQL van Postgresql bespaar met zoeken en prutsen, dan kan ik zelf al snel concluderen dat postgresql voor mij op dit vlak de absolute winnaar is.

About these ads
3 reacties
  1. Voor Oracle SDO/WKT/WKB conversies zou je ook de SDO_UTIL space kunnen gebruiken: http://docs.oracle.com/cd/B19306_01/appdev.102/b14255/sdo_util.htm qua licentie zit het in de locator licentie, dus ook met XE te gebruiken. :)

  2. Dit kan een stuk eenvoudiger in Oracle (al weet ik niet hoe je de geometrie in ‘onderdelen’ hebt opgeslagen)
    Voorbeeldje:

    select p.geom.get_wkt() from pand p where rownum<2;
    levert:
    P.GEOM.GET_WKT() ———————————–
    POLYGON ((253616.391 593037.337, 253614.121 593027.958, 253603.286 593030.58, 253602.433 593026.984, 253590.133 593029.902, 253589.722 593028.171, 253586.782 593015.782, 253583.35 593016.596, 253581.668 593009.508, 253579.991 593009.905, 253577.641 593000.0, 253576.596 592995.598, 253590.697 592992.185, 253589.87 592988.77, 253604.303 592985.276, 253604.593 592986.473, 253611.334 592984.842, 253607.974 592970.962, 253615.146 592969.226, 253614.86 592968.043, 253629.264 592964.557, 253630.165 592968.281, 253644.11 592964.906, 253647.653 592979.545, 253645.886 592979.973, 253647.547 592986.836, 253644.06 592987.68, 253647.042 593000.0, 253647.438 593001.637, 253634.951 593004.659, 253635.746 593007.944, 253624.768 593010.601, 253623.101 593003.712, 253621.414 593004.121, 253626.503 593025.148, 253630.137 593024.268, 253632.906 593035.71, 253627.72 593036.965, 253627.178 593034.726, 253616.391 593037.337), (253602.645 593015.808, 253603.97 593021.537, 253611.953 593019.691, 253609.047 593007.125, 253603.484 593008.412, 253605.065 593015.248, 253602.645 593015.808), (253630.858 593000.326, 253629.502 592994.829, 253627.382 592995.352, 253625.6 592988.13, 253614.622 592990.839, 253616.723 592999.355, 253621.946 592998.067, 253622.983 593002.269, 253630.858 593000.326))

    Probeer eens: select o.geometry.get_wkt() from onderdelen o;

    Niet heel veel complexer dan in Postgis….

    • miblon zei:

      Dank je wel Harm voor het antwoord. (Jij uiteraard ook Casper!)

      Ik moet stiekum toegeven dat ik ondertussen voor een ander vraagstuk al wel de GET_WKT() functie heb gebruikt. Deze plaatsing is dus eigenlijk al weer achterhaald!

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s

%d bloggers like this: