Es mostren els missatges amb l'etiqueta de comentaris ibm. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris ibm. Mostrar tots els missatges

dimarts, 27 de març del 2007

Més db2...

I aquí venen algunes coses més que he anat aprenent sobre el DB2:

La clàusula With:

El db2 incorpora la instrucció WITH, que permet crear com una mena de vistes virtuals (o common table expressions) que poden ser utilitzades directament des del FROM de les consultes. La principal diferencia entre aquestes estructures i una vista, és que aquestes només existeixen durant el temps d'execució de la consulta.

WITH dadesAlumne AS (Select * From Alumne, AlumneCentre)

SELECT *
FROM dadesAlumne

El principal avantatge que els hi trobo, és poder fraccionar les consultes en trocets i fer-les així més comprensibles i manejables.


Optimització de consultes:
A db2 la opció de posar hints a les querys no existeix. Cosa que segons com, fins i tot pot ser un avantatge. Perquè els hints sempre corren el risc de quedar obsolets quan es passen les estadístiques, fent que el mal acabi sent pitjor que la solució.
A canvi, el gestor del db2 incorpora una instrucció que permet indicar l'esforç què és dedicarà a optimitzar el pla d'execució de les consultes abans de llançar-les. I en principi, a més esforç dedicat a calcular el pla d'execució, millors resultats s'obtindran. De manera, que teòricament, aquesta opció ha de permetre obtenint sempre resultats òptims, independentment dels canvis en les estadístiques.

SET CURRENT QUERY OPTIMIZATION nivell

On nivell és un dels valors: 0, 1, 2, 5, 7 i 9. Essent 0 el nivell més baix d'optimització i 9 el nivell més alt. Cal tenir en compte que el nivell 5 utilitza heurístics per a trobar el pla d'accés òptim i en canvi el nivell 7 ja no ho fa.
Aqui el que fan és utilitzar el nivell 5 per les querys que tenen més de 4 Joins...

Per més informació: http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp


Més sobre les expressions condicionals:
Continuant amb el tema de les expressions condicionals, he trobat un link amb les expressions condicionals que hi ha per als principals SGBDs: http://www.ispirer.com/doc/sqlways38/Output/SQLWays-1-040.html

i de fet, hi estan força ben explicats.

dijous, 1 de març del 2007

DB2 tips....

Cosetes de DB2 que estic aprenent ara que hem toca fer servir el SGBD de IBM. Fins ara ho tenia apuntat a la llibreta, però com que me la demanen contiunament o apunto aqui sota:

Obtenir les 10 millors tuples d'una taula:
Aquesta instrucció no se si també estava disponible a Oracle, però va molt bé per obtenir els primers n elements d'una consulta.

SELECT *
FROM ...
WHERE ...
ORDER BY ...
FETCH FIRST 10 ROWS ONLY;

NVL per DB2:
A DB2 el NVL d'Oracle no existeix, i en lloc seu cal utilizar la sentència COALESCE que retorna el primer element no null de la llista de valors

SELECT COALESCE(VAL1, VAL2);
FROM...


que equival a:

if (val1!=null) then val1
else if (val2!=null) then val2

Decode per DB2:
El decode tampoc no existeix a DB2, però com a alternativa es pot utilitzar l'operador CASE, que la veritat trobo molt més comode que el DECODE d'Oracle. Com podeu veure, el decode és casi com un if:

SELECT CASE x WHEN 1 THEN 'un'
WHEN 2 THEN 'dos'
ELSE 'ni un ni dos'
END
FROM ...

sysdate per DB2:
A DB2 tampoc no hi ha el sysdate i en lloc seu hi ha la instrucció: CURRENT DATE.

SELECT ...
FROM ...
WHERE data < CURRENT DATE and any = YEAR(CURRENT DATE)

interessant veure també les consultores que hi ha sobre dates.

Obtenir el següent valor d'una sequència:

SELECT nextval FOR sequencia
FROM SYSIBM.SYSDUMMY1;

El que es pot vaure també en aquesta expressió, és que
SYSIBM.SYSDUMMY1 es l'equivalent a la taula DUAL d'Oracle.

i en fer un insert:

INSERT INTO ... VALUES (
nextval FOR sequencia , ...);

Obtenir el rowid d'una fila:
En db2 la sequència és la següent:

SELECT ..., ROW_NUMBER() OVER(),...
FROM ...


I més coses que aniré afegint en aquesta matèxia entrada o en d'altres.