Lekker snel XML met SQL (.nl)



Vergelijkbare documenten
Sparse columns in SQL server 2008

Object geörienteerd Pl/Sql

Zelftest XML Concepten

XMLType DEV. Native XML datatype in de database

SQL manipulatietaal. We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database.

Wijzigingen build 43

MS-Office documenten integratie via SAP PI

Structured Query Language (SQL)

Databases - Inleiding

Koppeling met een database

Thinking of development

SQL Aantekeningen 3. Maarten de Rijke 22 mei 2003

Tien manuals voor PL/SQL ontwikkelaar

APEX en JasperReports

Les 2 Eenvoudige queries

Javascript oefenblad 1

Introductie (relationele) databases

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt.

Organiseer uw verschillende SOAP services in één scenario

Data Manipulatie. Query Talen. / Informatica

BACK-UP PROGRAMMA. M U L T I M E D I A G R O E P H C C H E E R E N V E E N. Multimediagroep HCC Heerenveen HCC Fryslân locatie Heerenvee

Informatica toets vwo 6 Databases

Query SQL Boekje. Fredrik Hamer

Illustration 1. Handleiding Uploaden van foto's in Phoca Gallery

ContentSearch. Deep dive

1. Databanken. Wat is een databank? Verschillende opslagmethodes

Zelftest SQL Workshop

ISO Query By Example

PL/SQL. Declaraties van variabelen. Structuur PL/SQL is een blok-georiënteerde taal: Toekenningen

Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster

Service Data Objects. Wat is SDO? Dynamic data API

De MySQL C API. Variabelen in C Functies in C Pointers in C

Datakwaliteitsborging met Oracle dynamisch SQL


Systeemontwikkeling, Hoofdstuk 4, Tabellen maken in MS Access 2010

ASRemote WebService. Via deze webservice kunt u:

Informatie & Databases

Foto s up- en downloaden naar en van foto.intranet.vub.ac.be

Correctief onderhoud Bug nummers: 958, 960, 867, 977, 978, 979, 980, 981, 983, 984, 985 en 986.

Leaflet Web Maps with qgis2leaf

Handleiding gegevens aanleveren vanuit ASTRAIA

4 Tabellen maken in MS Access In dit hoofdstuk starten we met de bouw van ons informatiesysteem met de belangrijkste bouwstenen: de tabellen.

Handleiding configuratie en gebruik tekenmodule

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

XML Datafeeds. Volledig geautomatiseerd advertenties plaatsen V

1. Inleiding Inleiding SQL Inleiding Database, databaseserver en databasetaal Het relationele model...

XML Datafeeds. Volledig geautomatiseerd advertenties plaatsen V

Workshop 3x. Normaliseren. Normaliseren. Hiëarchische database ODBMS. Relationele database. Workshop 14 oktober A. Snippe ICT Lyceum 1

Secure Application Roles

Gebruikers Handleiding

SEO search engine optimalisatie

XML DB DEV. SQL en XML in hybride Oracle database. Vanaf Oracle9iR2 kun je het Oracle RDBMS met hetzelfde recht een Oracle XDBMS noemen

Macro s. 4.2 Een macro maken

Onderzoek behoeftepeiling. facilitair centrum. Gemeente Leiden

Rapporten. Labels en Rapporten in Atlantis 1. Atlantis heeft twee manieren om output te genereren: 1. labels 2. rapporten (reports)

MS PowerPoint Les 2. Wanneer we niet te veel tijd willen steken in de opmaak van onze presentatie, kunnen we gebruik maken van sjablonen.

Zelftest SQL Workshop

Normaliseren van tabellen Praktische oefeningen

XPath voor beginners. HVA-IAM-V1-TDI Internetstandaarden /2009. Fons van Kesteren

opstarthandleiding mysqlworkbench November 2012 Fons van Kesteren HVA- CMD- V1 Datamodelleren

Draft. Gebruikershandleiding XMLCreator 2013NL

Eindtoets XML: Theorie en toepassingen

Hoofdstuk 6. PHP Data Objects. Cursus PHP & MySQL Groep D

Hoe bouw ik een component? Drs. Arjan Burger

Abstraheren van modellen

DATAMODEL SQL. Middelbare School. Versie 1.0 Datum 30 oktober 2010 Auteur Mark Nuyens, studentnummer: Groep TDI 1

Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64

Gebruikershandleiding

Les 12 : database koppeling, opmaken van template, webstructuur en afdrukken van gegevens. (deel2).

Relationele Databases 2002/2003

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

Puzzelen met SQL DEV. Crash SQL Investigation

TECHNISCHE UNIVERSITEIT EINDHOVEN. Faculteit Wiskunde en Informatica

Formulieren en waarden posten naar een view

[15] Variabelen in functies (of: een woordje over scope)

maakboek In dit Klooikoffer Maakboek vertel je over je werkstuk. Zo leren anderen van jouw werk. Dat is toch gaaf?

ModusOne. ModusOne MOT. Version: 5.2

Technische nota AbiFire5 Rapporten maken via ODBC

Tutorial II : Advanced Shop-owner Haal meer uit je shop.

Gebruikers handleiding. Lizard Configuration Manager ToolTip. Installatie. Instellen. Initieel instellen

Miniles gegevensbanken bevragen met SQL

Hoofdstuk: 1 Principes van databases

Data Warehouse Script Generator Doel

TECHNICAL DESIGN DOCUMENT

Oefenvragen OMI eerste helft

Handleiding Afdrukken samenvoegen

[Microsoft Access 2007 Een eigen database maken] 16 oktober 2009

File Uploads met standaard ASP.NET

Basiskennistoets wiskunde

XML Introductie.

Grafiek en dynamisch bereik

Handleiding voor het maken van een online enquête formulier. Google Drive toepassing

CV EN SOLLICITATIEBRIEF

Transcriptie:

Lekker snel met SQL (.nl In steeds meer opdrachten kom je als requirement tegen. Omdat het lekker makkelijk is of omdat de interface die je moet aanspreken het vereist. Dit is zeker het geval wanneer je web services moet aanroepen. En ook dat komt steeds meer voor. Zelfs vanuit de database (PL/SQL. Maar hoe maak je nu even snel een bestand van gegevens in de database. Je kunt dat lekker op jouw gemakje uitcoderen. Een leuk karweitje als je met jouw wireless laptop in de tuin, in het zonnetje met een wit biertje zit. Maar het kan gemakkelijker. Vanaf Oracle 9i Release 2 kennen we de type. En met de bijbehorende SQL functies is het karweitje zo gepiept. Kun je tenminste gewoon in het zonnetje de Snapshot lezen. Over dit onderwerp is een mooi Technet artikel te lezen ("SQL in, out" door Jonathan Gennick, http://www.oracle.com/technology/oramag/oracle/03-may/o33xml.html. Het gaat eigenlijk om een aantal SQL-functies die je helpen om de job te doen: Element De Element functie zorgt voor een xml-element of een node. Dat kan een rij uit de query omvatten maar ook de waarde uit een kolom. Een en ander ziet er bijvoorbeeld zo uit:, xmlelement( "car-licence", license, xmlelement( "car-category", category, xmlelement( "build-year", year De functie heeft, zoals je ziet, minimaal twee parameters: de eerste is de naam van de tag, en de tweede (en eventueel volgende, is ofwel de output van een andere -functie (bijvoorbeeld een xmlelement, een kolom-waarde of constante dan wel functie-output. Hier zie je meteen ook de hiërarchische opbouw terug. De output van bovenstaande query is alsvolgt: <CAR><car-licence>EJ32JEM</car-licence><car-category>2</car-category><build-year>2001</bui <CAR><car-licence>YJJYR55</car-licence><car-category>3</car-category><build-year>2003</bui <CAR><car-licence>454JQA</car-licence><car-category>4</car-category><build-year>2002</buil <CAR><car-licence>JH5U9471</car-licence><car-category>5</car-category><build-year>2000</bu Attributes Naast Elementen kent ook attributen. Een attribuut is een eigenschap van een element. In een query ziet dat er zo uit: xml Attributes geeft je de mogelijkheid om meerdere attribuut waarden van een element op te

geven, op de manier als in de query aangegeven. Achter het keyword "as" wordt de naam van het attribuut opgegeven. De output van de query is dan als volgt: ------------------------------------------------------- <CAR license="ej32jem" category="2" year="2001"></car> <CAR license="yjjyr55" category="3" year="2003"></car> <CAR license="454jqa" category="4" year="2002"></car> Forest Forest geeft je de mogelijkheid om een Element te vullen met een lijst van relationelewaarden. Op het eerste gezicht is het een andere manier van opbouwen van jouw dan met het gebruik van de Element functie: xml De output hiervan is: <CAR><brand>Peugeot</brand><model>406</model><city>Saint Louis, Missouri</city><country>Un <CAR><brand>Renault</brand><model>Megane</model><city>Saint Louis, Missouri</city><country <CAR><brand>Fiat</brand><model>Stilo</model><city>Saint Louis, Missouri</city><country>Uni Eigenlijk lijkt dit hetzelfde als de eerste query. Het verschil hier is dat in het geval van het gebruik van xmlelement een null waarde altijd leidt tot een lege node: </CITY>. Als je dit nu net niet wilt, dan kun je xmlforest gebruiken: leidt een van de parameters tot null dan geeft Forest die node niet. En daarbij is het een wat nettere en vluggere notatie. Attributes & Forest Deze twee kun je dan ook weer combineren in een query: xml Met als output:

<CAR license="ej32jem" category="2" year="2001"><brand>peugeot</brand><model>406</model><c <CAR license="yjjyr55" category="3" year="2003"><brand>renault</brand><model>megane</model <CAR license="454jqa" category="4" year="2002"><brand>fiat</brand><model>stilo</model><cit Merk ook de gelijkenis in notatie op tussen Attributes en Forest. Een alternatief is de volgende query: ( "Cars" ( license as "License", category as "Category", year as "Year", CASE WHEN brand IS NULL THEN NULL ELSE Element("Brand", brand END, CASE WHEN model IS NULL THEN NULL ELSE Element("Model",model END, CASE WHEN city IS NULL THEN NULL ELSE Element("City", city END, CASE WHEN city IS NULL THEN NULL ELSE Element("Country", country END Agg In bovengenoemde queries zijn de rijen eigenlijk nog afzonderlijke elementen. Die wil je natuurlijk kunnen samenvoegen tot een xmldocument met een omvattende node. Daarvoor is de functie Agg bedoeld: s

where license in ('79-JF-VP', 'JR8GG1' De notatie is vergelijkbaar met xmlelement: eerst een parameter voor de element naam en dan de xml-waarden die dan worden gegroepeerd binnen het element. De output ziet er dan als volgt uit: --------------------------------------------- <CARS><CAR license="79-jf-vp" category="1" year="2002"><brand>bmw</brand><model>320d< year="2003"><brand>renault</brand><model>megane</model><city>london</city><country>united GetClobVal, GetStringval, Extract Bovengenoemde queries leveren feitelijk een Type op, ook al suggereer ik hierboven dat het een tekstuele output is. Wanneer je de queries uitvoert in SQL*Plus, dan herkent SQL*Plus het Type en maakt er een tekstuele output van. In PL/SQL zou het er dan ook zo uit komen te zien: declare l_xml xmltype; l_xml_clob clob; begin s into l_xml where license in ('79-JF-VP', 'JR8GG1'; l_xml_clob := l_xml.getclobval; dbms_output.put_line(dbms_lob.substr( l_xml_clob, 255; dbms_output.put_line(l_xml.extract('/cars/car/@license'.getstringval; end; met als output: <CARS><CAR license="79-jf-vp" category="1" year="2002"><brand>bmw</brand><model>320d</model><city>amsterdam</city><country> The Netherlands</country></CAR><CAR license="jr8gg1" category="3"

year="2003"><brand>renault</brand><model>megane</model><city>londo 79-JF-VPJR8GG1 Met de methode GetClobVal van het Type object is de CLOB Representatie op te vragen van het xmltype. En deze is dan weer te verwerken. Zoals je ziet gaat dat bijzonder makkelijk. De methode Extract geeft je de mogelijkheid om met behulp van een XPATH expressie de Type uit te vragen. XPATH ga ik verder niet behandelen, maar hier zie je een voorbeeldje van het principe van XPATH. Je vraagt met een soort directory-pad-aanduiding aan welke informatie je uit het xmldocument wilt hebben. Met het apestaartje ('@' geef je aan dat je van het bovenliggende element het betreffende attribuut wilt. Extract levert feitelijk weer een Type op, en met getstringval kun je daar dan weer een Varchar2-representatie van opvragen (om het maar in PL/SQL termen te houden. Je ziet in bovenstaand voorbeeld dat de output van het Extract-resultaat een concatenatie is van beide kenteken-nummers. Tenslotte Dit 'how-to'-artikel is uiteraard aan de summiere kant, maar geeft je wel een handreiking om aan de slag te gaan. Eigenlijk kun je met bovengenoemde voorbeelden al bijna de hele wereld aan. Met Type kun je ontzettend veel doen, zo zou je nog eens naar DB kunnen kijken, waarmee je Documenten in een folder structuur kunt opslaan en met bijvoorbeeld een FTP Client uit de database kunt halen of er in kunt plaatsen. Ook heb ik validaties aan de hand van een Schema niet behandeld. Wat ik zelf wel een beetje jammer of onhandig vind, is dat Type geen methodes heeft om procedureel door het document te lopen. Stel nu dat je op volgorde van jaar en merk door een van bovenstaande Type-objecten wilt lopen, dan gaat dat met Type lastig. Eigenlijk heb je alleen maar XPATH om informatie uit te vragen. Wil je dat een beetje handig doen, dan moet je toch naar de -Dom parser grijpen. Dat betekent dan dat je het Type eerst naar een CLOB moet omzetten en vervolgens met de -Dom parser verwerken. Geniet in elk geval van het biertje in het zonnetje in jouw achtertuin na het klussen van een slimme -query. Martien van den Akker Development Specialist