Bonjour,

J'utilise DBD::Sybase pour effectuer des opérations avec une base de donnée Sybase.

Je suis passé à la version 15.0.2 de ASE et j'utilise maintenant le type BIGINT.
Plus particulièrement certains champs existants sont passés du type INT au type BIGINT.

Concernant les modules perl, j'utilise
  • DBI 1.607
  • DBD::Sybase 1.09


Malheureusement le code perl actuellement ne fonctionne plus.
En effet, j'ai des erreurs du type:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Can't execute the SQL statement [INSERT MA_TABLE values (?,?)][250 0]:
Server message number=257 severity=16 state=1 line=0 server=SYBSAC2
procedure=DBD9 text=Implicit conversion from datatype 'VARCHAR' to 'BIGINT' is
not allowed.  Use the CONVERT function to run this query.
J'ai la même erreur que je passe directement une valeur ou que j'utilise Math::BigInt.

La première solution que je vois est d'utiliser un convert.
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
INSERT MA_TABLE values (?,convert(bigint,?))
Néanmoins, d'après le changelog du module,

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
[...]
 
Release 1.08
 
	[...]
	Added handling of UNSIGNED INT and BIGINT (ASE 15 and later).
Je pensais que le bigint était géré de manière transparent.

1/ Que signifie alors 'handling of UNSIGNED INT and BIGINT'
2/ Existe-t-il une méthode plus transparente pour gérer les BIGINT que le convert? (en permettant si possible de faire un code le plus générique possible)

Par avance, merci pour vos réponses.



PS: en affichant les types sql DBI, je constate que certains types dont le BIGINT ont des valeurs négatives:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
SQL_GUID=-11                                             
SQL_WLONGVARCHAR=-10                                     
SQL_WVARCHAR=-9                                          
SQL_WCHAR=-8                                             
SQL_BIGINT=-5                                            
SQL_BIT=-7                                               
SQL_TINYINT=-6                                           
SQL_LONGVARBINARY=-4                                     
SQL_VARBINARY=-3                                         
SQL_BINARY=-2                                            
SQL_LONGVARCHAR=-1                                       
SQL_UNKNOWN_TYPE=0                                       
SQL_ALL_TYPES=0
SQL_CHAR=1
SQL_NUMERIC=2
SQL_DECIMAL=3
SQL_INTEGER=4
SQL_SMALLINT=5
SQL_FLOAT=6
SQL_REAL=7
SQL_DOUBLE=8
SQL_DATETIME=9
SQL_DATE=9
SQL_INTERVAL=10
SQL_TIME=10
SQL_TIMESTAMP=11
SQL_VARCHAR=12
SQL_BOOLEAN=16
SQL_UDT=17
SQL_UDT_LOCATOR=18
SQL_ROW=19
SQL_REF=20
SQL_BLOB=30
SQL_BLOB_LOCATOR=31
SQL_CLOB=40
SQL_CLOB_LOCATOR=41
SQL_ARRAY=50
SQL_ARRAY_LOCATOR=51
SQL_MULTISET=55
SQL_MULTISET_LOCATOR=56
SQL_TYPE_DATE=91
SQL_TYPE_TIME=92
SQL_TYPE_TIMESTAMP=93
SQL_TYPE_TIME_WITH_TIMEZONE=94
SQL_TYPE_TIMESTAMP_WITH_TIMEZONE=95
SQL_INTERVAL_YEAR=101
SQL_INTERVAL_MONTH=102
SQL_INTERVAL_DAY=103
SQL_INTERVAL_HOUR=104
SQL_INTERVAL_MINUTE=105
SQL_INTERVAL_SECOND=106
SQL_INTERVAL_YEAR_TO_MONTH=107
SQL_INTERVAL_DAY_TO_HOUR=108
SQL_INTERVAL_DAY_TO_MINUTE=109
SQL_INTERVAL_DAY_TO_SECOND=110
SQL_INTERVAL_HOUR_TO_MINUTE=111
SQL_INTERVAL_HOUR_TO_SECOND=112
SQL_INTERVAL_MINUTE_TO_SECOND=113