Valeur
|
Description
|
CF_SQL_CHAR
|
- Oracle : char, nchar
- MSSQL : char
|
CF_SQL_VARCHAR
|
- Oracle : varchar2, nvarchar2
- MSSQL : varchar
|
Valeur
|
Description
|
CF_SQL_INTEGER
|
- Oracle : number
- MSSQL : integer
|
CF_SQL_DECIMAL
|
- Oracle : number
- MSSQL : decimal
|
CF_SQL_FLOAT
|
- Oracle : number
- MSSQL : real
|
CF_SQL_NUMERIC
|
- Oracle : number
- MSSQL : numeric
|
Valeur
|
Description
|
CF_SQL_DATE
|
- Oracle : date
- MSSQL : date
|
CF_SQL_TIMESTAMP
|
- Oracle : date
- MSSQL : timestamp
|
Valeur
|
Description
|
CF_SQL_BLOB
|
- Oracle : blob, bfile
- MSSQL : longvarbinary
|
Valeur
|
Description
|
CF_SQL_CLOB
|
- Oracle : clob,nclob
|
Valeur
|
Description
|
CF_SQL_BIT
|
- MSSQL : bit
|
CF_SQL_TINYINT
|
- MSSQL : tinyint
|
CF_SQL_SMALLINT
|
- MSSQL : smallint
|
CF_SQL_BIGINT
|
- MSSQL : bigint
|
CF_SQL_REAL
|
- MSSQL : real
|
CF_SQL_DOUBLE
|
- MSSQL : double
|
Valeur
|
Description
|
CF_SQL_TIME
|
- MSSQL : time
|
Valeur
|
Description
|
CF_SQL_MONEY
|
- MSSQL : double
|
CF_SQL_MONEY4
|
- MSSQL : double
|
Valeur
|
Description
|
CF_SQL_IDSTAMP
|
|
Valeur
|
Description
|
CF_SQL_REFCURSOR
|
|
Note de performance :
On signale que l'utilisation de cfqueryparam permet d'avoir des gains de performance.
La première chose à savoir est que le gain de performance n'est pas une particularité de ColdFusion mais une option du SGBD, s'il supporte les "bind variables".
Voici un résumé des fonctionnalités du tag cfqueryparam :
-
[du coté ColdFusion] forcer le teste sur le type des valeurs (ce teste peut être aussi effectué avec le tag CFPARAM) ;
-
[du coté ColdFusion] sécuriser les paramètres (attaques par injection SQL), principalement pour les variables qui viennent de l'extérieur du serveur (Scope FORM, URL, …) ;
-
[du coté SGBD] avoir des gains de performances dans le cas des requêtes dynamiques et répétitives (si le SGBD supporte les BIND VARIABLES).
Pour les gains de performances, si on considère une requête qui ramène des informations pour une ressource donnée :
Le tag cfqueryparam va permettre au SGBD (Oracle par exemple) de créer une BIND VARIABLE pour la variable
RES_ID
et dans ce cas il ne sera pas obligé d'établir un nouveau plan d'exécution lors de la prochaine requête (donc éviter de parser la requête, établir le meilleur plan d'exécution, …).
À défaut de ne pas utiliser cfqueryparam, Oracle va considérer que chaque requête, qui vient avec une valeur différente pour
RES_ID
, est unique et donc il va établir un nouveau plan d'exécution.
Par contre, il n'est pas nécessaire d'utiliser le tag cfqueryparam lorsque la valeur d'une variable est statique (et on sait d'avance que la requête ne va pas utiliser une autre valeur pour cette variable) :
Dans ce cas, mieux privilégier :
Il n'y a aucun besoin dans ce cas pour qu'Oracle crée une BIND VARIABLE.