Bonjour à tous
J'ai une requête de ce type :
où Table.Col2 est un VARCHAR(20)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT Table.Col1 FROM Table WHERE Table.Col2 = SUBSTRING(:Param FROM 1 FOR 20)
et Param un VARCHAR(200)
Syntaxiquement c'est bon, non ?
Si :param = 'aaaaaa' (moins de 20 caractères)
mais si :param contient plus de 20 caractères, je reçois l'erreur :
Par contre si je remplace :param par la chaine de caractères :Incompatible column/host variable data type.
Dynamic SQL Error.
SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.
Ca fonctionne. Est normal qu'en affectant un paramètre cela ne fonctionne plus ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT FIRST 1 Table.Col1 FROM Table WHERE Table.Col2 = SUBSTRING('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' FROM 1 FOR 20)
et si oui, je connais la solution. Je vais devoir :
*soit créer une variable intermédiaire
Soit utilisez un EXECUTE STATEMENT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Chaine1 = SUBSTRING(:param FROM 1 TO 20); SELECT FIRST 1 Table.Col1 FROM Table WHERE Table.Col2 = :Chaine1 INTO :blabla ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 EXECUTE STATEMENT 'SELECT FIRST 1 Table.Col1 FROM Table WHERE Table.Col2 = ''' || SUBSTRING(:param FROM 1 FOR 20) || ''''; INTO :blabla
Partager