db2, sql, xml, ifs, odbc

40
Andreas Prouza 2010 1 DB2, SQL, XML, IFS, ODBC Andreas Prouza 2010 IBM i 7.1

Upload: alden

Post on 12-Jan-2016

85 views

Category:

Documents


1 download

DESCRIPTION

IBM i 7.1. DB2, SQL, XML, IFS, ODBC. Andreas Prouza 2010. ODBC. 128-byte schema names Support for the IBM i XML Data Type Connection property to configure Concurrent Access Resolution Support for multi-row UPDATE, DELETE, and MERGE statements. .NET Provider. 128-byte schema names - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 1

DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010

IBM i 7.1

Page 2: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 2

ODBC

128-byte schema names Support for the IBM i XML Data Type Connection property to configure

Concurrent Access Resolution Support for multi-row UPDATE, DELETE,

and MERGE statements

Page 3: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 3

.NET Provider

128-byte schema names Support for the IBM i XML Data Type Connection property to configure Concurrent

Access Resolution Support for multi-row UPDATE, DELETE, and

MERGE statements Support Visual Studio 2008 Online help now available in Visual Studio

Page 4: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 4

Temporary user-defined file systemsBefehle:

Erstellen des Filesystems:CRTUDFS UDFS('/dev/QASP01/myfs.tmpudfs')

Erstellen des Verzeichnis im IFSMKDIR DIR('/home/test1')

Filesystem an das Verzeichnis anhängenMOUNT TYPE(*UDFS) MFS('/dev/QASP01/myfs.tmpudfs') MNTOVRDIR('/home/test1')

Filesystem abhängenUNMOUNT TYPE(*UDFS) MNTOVRDIR('/home/test1')

Page 5: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 5

Erklärung zum TMPUDFS

Können nur im System ASP erstellt werden (QASP01) Höhere Performance durch geringen Overhead:

Kein Journal möglich Kein Sichern oder Wiederherstellen Für Objekte kann keine Berechtigungsliste erstellt werden Maximal-Speicher des Users kann überschritten werden Durch den Befehl Unmount geht auch der Inhalt verloren (daher

auch beim IPL)

Page 6: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 6

Adaptive Query Processing

Erweiterung der SQL Query EngineBei Abfragen > 1 sek. kann das WÄHREND der

Ausführung Änderungen am Zugriffsplan vornehmen.

Beispiel:Wenn während der Abfrage ein neuer Index

erstellt wurde.Wenn die Abfrage länger als geplant dauert und

ein Temporärer Index benötigt wird.

Page 7: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 7

Expression Evaluator(SQL Procedures & Functions) SQL Proceduren werden teils in C-Code,

teils in SQL-Code geschrieben. C-Code ist schneller als SQL-Code Mit jedem Release werden immer mehr

Anweisungen in C unterstützt Neu erstellen der Procedure oder Function, nach einem Releasewechsel, kann zur Steigerung der Performance führen

Page 8: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 8

Expression EvaluatorBeispiel: IF v1 > 1 AND v1 < 100 Vor V5R4:

SELECT 1 INTO :H FROM QSYS2.QSQPTABL WHERE :H:H > :H:H AND :H:H < :H:H

Nach V5R4:VALUES ( CASE WHEN :H:H > :H:H AND :H:H < :H:H THEN 0 ELSE 1 END ) INTO :H

AND und OR wird in C nicht unterstützt jedoch wird ab V5R4 keine Dummy-Tabelle benötigt bessere Performance

Page 9: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 9

SQL Merge-Statements

Beispiel: Synchronisation 2er TabellenMerge into tab1 using tab11 on tab1.sp1 = tab11.sp1 when matched then update set tab1.sp2 = tab11.sp2 when not matched then insert (sp1, sp2) values (tab11.sp1, tab11.sp2)

Page 10: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 10

Bevorzugte Speichereinheit SSD

CHGPF FILE(TAB5) UNIT(*SSD)

UNIT SSD Klausel im Create/Alter Table und Create Index

Page 11: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 11

Progress status monitors

Beim ändern einer großen Tabelle, kann im iSeries Navigator angezeigt werden welche Änderungen noch durchgeführt werden müssen, Index Rebuild, wie lange es noch dauert, usw.

Page 12: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 12

Page 13: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 13

DB2 concurrent access resolution

USE CURRENTLY COMMITTEDLiest die zuletzt bestätigten Sätze aus einer Tabelle

WAIT FOR OUTCOMEWartet bis Satzsperre aufgehoben ist

SKIP LOCKED DATA (schon ab 6.1)Überliest gesperrte setze

SQL_CONCURRENT_ACCESS_RESOLUTION QAQQINI CONACC pre-compiler option

Page 14: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 14

Create or Replace

Create or Replace Index Tab1_I1 … Create or Replace Variable v1 char(50)

Page 15: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 15

Globale Variablen

Create Variable Var1 char(50)

Es können globale Variablen mit allen DB2 Datentypen erstellt werden

Der Inhalt einer globalen Variable ist JobbezogenBeispiel: Job1: Set var1 = ‚Hallo‘ Job2: Set var1 = ‚Welt‘ Job2: Values (var1) Welt Job1: Values (var1) Hallo

Bei globale Variablen gibt es kein Commitmen Control

Page 16: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 16

EVI mit Aggregation

CREATE ENCODED VECTOR INDEX idx1 ON sales(region) INCLUDE ( SUM(saleamt), COUNT(*) )

SELECT region, SUM(saleamt) FROM sales GROUP BY region

Page 17: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 17

Expressions in SQL Call

Funktionsaufrufe sind können jetzt innerhalb eines Procedure-Calls angewendet werden.

CALL myprocedure('ABC', UPPER(MyName), MyNumber*100 )

Page 18: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 18

Neue Funktionen in RPG

Neue Funktionen in RPG werden im SEU ab 7.1 nicht mehr unterstützt.

IBM will uns dazu zwingen, weg vom SEU, hin zum Rational zu gehen.Denn dort gibt es die Unterstützung.

Page 19: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 19

XML & DB2

Man kann XML-Files in eine Tabelle hinzufügen.

Man kann die Werte eines XML-Files in ein oder mehrere Tabellen importieren lassen

Es können einfach und schnell XML-Files mit Daten aus der DB2 erstellt werden.

Page 20: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 20

<?xml version="1.0"?><!-- Generated using Flame-Ware Solutions XML-2-XSD v2.0 at http://www.flame-ware.com/Products/XML-2-XSD/ --><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="ArrayOfLogIn"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="LogIn"> <xs:complexType> <xs:sequence> <xs:element name="User" type="xs:string" minOccurs="0" /> <xs:element name="Password" type="xs:string" minOccurs="0" /> <xs:element name="System" type="xs:string" minOccurs="0" /> <xs:element name="Library" type="xs:string" minOccurs="0" /> <xs:element name="DSN" type="xs:string" minOccurs="0" /> <xs:element name="Signon" type="xs:string" minOccurs="0" /> <xs:element name="OpsNav" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element></xs:schema>

XSD: login.xsd

Page 21: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 21

XSD: login_db2.xsd<?xml version="1.0"?><!-- Generated using Flame-Ware Solutions XML-2-XSD v2.0 at http://www.flame-ware.com/Products/XML-2-XSD/ --><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:db2-xdb="http://www.ibm.com/xmlns/prod/db2/xdb1"> <xs:annotation><xs:appinfo> <db2-xdb:defaultSQLSchema>PRANLIB</db2-xdb:defaultSQLSchema> </xs:appinfo></xs:annotation> <xs:element name="ArrayOfLogIn"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="LogIn"> <xs:complexType> <xs:sequence> <xs:element name="User" type="xs:string" minOccurs="0" db2-xdb:rowSet="LOGIN" db2-xdb:column="USERNAME" db2-xdb:condition="$DECOMP_CONTENT IS NOT NULL"/> <xs:element name="Password" type="xs:string" minOccurs="0" /> <xs:element name="System" type="xs:string" minOccurs="0" db2-xdb:rowSet="LOGIN" db2-xdb:column="SYSTEMNAME" db2-xdb:condition="$DECOMP_CONTENT IS NOT NULL"/> <xs:element name="Library" type="xs:string" minOccurs="0" db2-xdb:rowSet="LOGIN" db2-xdb:column="LIB" db2-xdb:condition="$DECOMP_CONTENT IS NOT NULL"/> <xs:element name="DSN" type="xs:string" minOccurs="0" /> <xs:element name="Signon" type="xs:string" minOccurs="0" /> <xs:element name="OpsNav" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element></xs:schema>

Page 22: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 22

XML: login.xml<?xml version="1.0" encoding="utf-8"?><ArrayOfLogIn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <LogIn> <User>pran</User> <Password /> <System>192.168.0.10</System> <Library>MyLib</Library> <Signon>-1</Signon> <OpsNav>false</OpsNav> </LogIn> <LogIn> <User>andi</User> <Password /> <System>192.168.0.201</System> <Library /> <Signon>-1</Signon> <OpsNav>false</OpsNav> </LogIn></ArrayOfLogIn>

Page 23: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 23

XML-Daten in Tabelle importieren

XSD-File in eine globale Variable hinzufügenset pranlib.var1 = GET_xml_FILE('/home/prouza/login_db2.xsd‚ XSD in der XML-Repository registrierenCALL SYSPROC.XSR_REGISTER('PRANLIB', 'ArrayOfLogin', null,

pranlib.var1 , null) Registrierung vervollständigencall sysproc.xsr_complete ('PRANLIB', 'ArrayOfLogin', null, 1) XML-File in die globale Variable hinzufügenset pranlib.var1 = GET_xml_FILE('/home/prouza/login.xml') XML-Daten in der Datenbank übernehmencall sysproc.XDBDECOMPXML ('PRANLIB', 'ArrayOfLogin',

pranlib.var1, null)

Page 24: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 24

Ergebnis 1

Page 25: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 25

DB2 XML

Daten aus einer Tabelle als XML darstellen.

Page 26: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 26

Beispiel 1

select sp1, xmlserialize (

xmlelement (NAME "LogIn",

xmlforest (c.sp1 as "System", c.sp2 as "Text"))

as varchar (50))

from pranlib.tab1 c

Page 27: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 27

Ergebnis 1

Page 28: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 28

Erklärung 1

XMLSERIALIZE: Damit kann ich einen XML-Typ in ein lesbares Character umwandeln

XMLELEMENT: Hier wird ein XML-Element definiert. (Erstes Element ist IMMER root!)

XMLFOREST: Angabe der verwendeten Spalten

Page 29: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 29

Beispiel 2

Select xmlserialize (

xmlelement (NAME "ArrayOfLogIn",

xmlnamespaces (DEFAULT 'http://example.org'),

xmlagg (xmlelement (NAME "login",

xmlforest (c.sp1 as "System",

c.sp2 as "User")))) as

varchar (9999)) "XML-FILE"

From pranlib.tab1 c

Page 30: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 30

Ergebnis 2

<ArrayOfLogIn xmlns="http://example.org"><login>

<System>1</System> <User>FFFFF</User>

</login><login>

<System>10</System><User>hallo123456</User>

</login><login>

<System>12</System><User>du da</User>

</login></ArrayOfLogIn>

Page 31: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 31

Erklärung 2

XMLNAMESPACES: Für Angabe eines Namespaces in einem Element

XMLAGG: Aggregation von Datensätzen (XMLFOREST)

Page 32: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 32

Beispiel 3

Select xmlserialize (

xmlelement (NAME "ArrayOfLogIn",

xmlnamespaces (DEFAULT 'http://example.org'),

xmlagg (xmlelement (NAME "login",

xmlattributes (sp1 as "id"),

xmlforest (c.sp1 as "System",

c.sp2 as "User")))) as

varchar (9999)) "XML-FILE"

From pranlib.tab1 c

Page 33: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 33

Ergebnis 3<ArrayOfLogIn xmlns="http://example.org">

<login id="1">

<System>1</System>

<User>FFFFF</User>

</login>

<login id="10">

<System>10</System>

<User>hallo123456</User>

</login>

<login id="12">

<System>12</System>

<User>du da</User>

</login>

</ArrayOfLogIn>

Page 34: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 34

Erklärung 3

XMLATTRIBUTES: Mit dieser Funktion kann ein Wert aus einer Spalte als Attribut in einem Element verwendet werden.

Page 35: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 35

Beispiel 4

values (xmlserialize

(xmltext ('Sonderzeichen < > &‚) as varchar (50)))

Ergebnis:Sonderzeichen &lt; &gt; &amp;

Erklärung: Die XMLTEXT-Funktion kann auch für Verarbeitung von HTML verwendet werden.

Page 36: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 36

Stored Procedure Resultsets

Resultsets aus Stored Procedures können nun in RPG oder anderen Stored Procedures verarbeitet werden.

Page 37: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 37

Stored ProcedureCREATE PROCEDURE PRANLIB.TEST1 (

IN SPNR INTEGER ) DYNAMIC RESULT SETS 1 LANGUAGE SQL SPECIFIC PRANLIB.TEST2

BEGIN

DECLARE C2 CURSOR WITH RETURN TO CLIENT FOR SELECT * FROM PRANLIB . TAB1 WHERE SP1 > SPNR;

OPEN C2; END;

Page 38: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 38

Code-BeispielDtab1ds E DS extname (tab1)Dc1 S SQLTYPE(RESULT_SET_LOCATOR)

/Free Exec Sql Call Test1 (10); Exec Sql ASSOCIATE LOCATORS (:c1) WITH PROCEDURE Test1;

Exec Sql ALLOCATE mycur1 CURSOR FOR RESULT SET :c1;

Exec Sql Fetch mycur1 Into :tab1ds;/End-Free

Page 39: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 39

Erklärung

Hier wird ein Result-Set-Locator definiert.SQLTYPE(RESULT_SET_LOCATOR)

Der Result-Set-Locator wird mit den Resultset der Procedure verknüpft.Exec Sql ASSOCIATE LOCATORS (:c1) WITH PROCEDURE Test1;

Es kann nun ein Cursor erstellt werden, welcher den Resultset einliest.Exec Sql ALLOCATE mycur1 CURSOR FOR RESULT SET :c1;

Page 40: DB2, SQL, XML, IFS, ODBC

Andreas Prouza 2010 40

Viel Spaß noch!

Andreas [email protected]