|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||||||||
|
Invité de passage
![]() Inscription : février 2010 Messages : 5 ![]() |
Bonjour,
J'ai un problème assez étonnant avec une procédure stockée SQL-Server appelée depuis oracle via un dblink. Les données du problème : Je crée une table TEST : Code :
Code :
Là où c'est moins drôle c'est quand j'appelle la procédure depuis Oracle via un dblink : Si j'appelle la procédure en lui passant aParam=0 elle me renvoie bien "-1" comme prévu Si je l'appelle en lui passant 1 j'ai le message d'erreur : Citation:
Code :
Sinon j'ai essayé ça qui fonctionne également dans tous les cas : Code :
Il faut que le nombre de caractères dans le "if 1=2 select 'xxxxxxxxxxxxxx'" soit plus grand que la plus grande chaine de la table TEST. Quelqu'un peut m'expliquer le fonctionnement de SQL-Server ? J'ai l'impression que le code est interpreté au runtime et qu'il se base sur le dernier select pour déterminer la taille du buffer (d'où le message d'erreur "troncation à droite") ? Il est difficile de livrer un code "sérieux" en expliquant qu'il ne faut surtout pas inverser le sens des "if else" ou en ajoutant des "if 1=2" ! Merci. Pour info j'ai mis le code de la procédure oracle : Code :
|
|||||||||||
|
|
00
|
|
|
#2 | ||||
|
Membre éprouvé
![]() ![]() Hamid MIRAIngénieur développement logiciels Inscription : septembre 2003 Messages : 177 ![]() |
Je te suggère, pour éviter (ou limiter) au maximum les problèmes et erreurs, de procéder ainsi :
1 – Respecter les correspondances (ou mappage) des types Oracle /Sql Server Code :
2 – De faire en sorte que, dans la procédure SQL Server dbo.TESTPROC le type de la colonne TEXTE soit toujours le même et ce quel que soit le test effectué sur le paramètre @aParam. Pour cela, il faut « caster » la constante -1 en varchar(50) Conclusion je te propose de tester la solution ci-dessous : Code :
A+ |
||||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2010 Messages : 5 ![]() |
Bonjour hmira,
Merci pour ta réponse. J'ai essayé avec le Code :
SELECT CAST('-1' AS VARCHAR(50)) AS TEXTE ![]() Pour info j'ai essayé en mixant les VarChar et NVarChar ça marche dans tous les cas. Encore merci. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com