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