Mým osobním přáním je vytvořit proměnnou vazby znakové řetězce (VARCHAR2) a nechat Oracle provést převod ze znaku na svůj vlastní interní formát úložiště. Je dost snadné (v C) získat datové hodnoty reprezentované jako null ukončené řetězce v přijatelném formátu.
Takže místo psaní SQL takto:
SET MY_NUMBER_COL = :b1
, MY_DATE_COL = :b2
SQL píšu takto:
SET MY_NUMBER_COL = TO_NUMBER( :b1 )
, MY_DATE_COL = TO_DATE( :b2 , 'YYYY-MM-DD HH24:MI:SS')
a zadejte řetězce znaků jako proměnné vazby.
Tento přístup má několik výhod.
Jedním z nich je, že řeší problémy a chyby, na které narazíte při vázání jiných datových typů.
Další výhodou je, že hodnoty vazeb lze snadněji dešifrovat na trasování události Oracle 10046.
Také EXPLAIN PLAN (domnívám se) očekává, že všechny proměnné vazby budou VARCHAR2, takže to znamená, že vysvětlovaný příkaz se mírně liší od skutečného prováděného příkazu (kvůli implicitním převodům dat, když datové typy argumentů vazby ve skutečném prohlášení nejsou VARCHAR2.)
A (méně důležité) když testuji příkaz v TOAD, je snazší, abych mohl zadávat řetězce do vstupních polí a nemusel se lámat se změnou datového typu v rozevíracím seznamu.
Také jsem nechal funkcemi TO_NUMBER a TO_DATE ověřit data. (Přinejmenším v dřívějších verzích Oracle jsem narazil na problémy s přímou vazbou hodnoty DATE, která obcházela (alespoň část) kontroly platnosti a umožňovala ukládání neplatných hodnot data do databáze.
Jedná se pouze o osobní preference, založené na minulých zkušenostech. Stejný přístup používám s Perl DBD.
Zajímalo by mě, co na toto téma říká Tom Kyte (asktom.oracle.com)?