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:
	
	| 12
 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:
	
	INSERT MA_TABLE values (?,convert(bigint,?))
 Néanmoins, d'après le changelog du module, 
	
	| 12
 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:
	
	| 12
 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 | 
 
						
					
Partager