DB Oracle tips.

Scritto il 20-06-2009 da Vito Antonio Bonardi

Pubblicato su : Programming

0

Qualche giorno fa, mentre scrivevo una function Oracle (abbastanza complessa), mi son reso conto che una select all’interno della function non ritornava il risultato che mi aspettavo.
Eppure, eseguendo la query al difuori della function con gli stessi parametri, funzionava.
Dopo una serie di verifiche ho individuato il problema nella tipologia di parametro che passavo alla function. Io passavo un tipo VARCHAR2, il campo sul DB era definito CHAR, per questo la where condition falliva.

Questo perchè Oracle ha due metodi per comparare le stringhe:
• non-blank-padding (la lunghezza dei campi non viene resa uguale prima del confronto) quando almeno uno dei due elementi da comparare è VARCHAR2.
• blank-padding (il campo più corto viene riempito con spazi fino a raggiungere la lunghezza dell’altro prima di confrontarlo) quando entrambi gli elementi sono CHAR.

Inoltre ricordo che la “literal string” che io usavo esternamente (quella che funzionava) è sempre rappresentata internamente come datatype CHAR.