Je contine mon périple avec les procédures stockées et je tombe sur une exception qui me laisse perplexe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Exception : com.inet.tds.Tds4SQLException: [NDSQL02\DEV]Cursorfetch : le nombre de variables déclarées dans la liste INTO doit correspondre à celui des colonnes sélectionnées., Level 16, State 1, Procedure updateAuteur, Line 3201000
Voici mon code incriminé :

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
 
ALTER PROCEDURE [dbo].[updateAuteur]
 
 @Numero_affaire varchar(10) OUTPUT,
 
 @Nom_auteur_plans varchar (500) OUTPUT,
 
 @Adresse_auteur_plans varchar (500) OUTPUT,
 
 @No_telephone_auteur_plans varchar(10) OUTPUT
 
AS
 
BEGIN
 
            /** Locate Auteur Nom + Prenom. */
 
 
 
            DECLARE @nom VARCHAR(100)
 
            DECLARE @prenom VARCHAR(100)
 
            DECLARE curseur_auteur CURSOR FOR SELECT * FROM [dbo].Split (@Nom_auteur_plans,',')
 
            OPEN curseur_auteur
 
            FETCH curseur_auteur INTO @nom, @prenom
 
            WHILE @@FETCH_STATUS = 0
 
            BEGIN
 
                        FETCH curseur_auteur INTO @nom, @prenom
 
            END
 
 
 
            CLOSE curseur_auteur
 
            DEALLOCATE curseur_auteur
 
 
 
            /** Locate Adresse. */
 
            DECLARE @rue VARCHAR(100)
 
            DECLARE @noRue VARCHAR(100)
 
            DECLARE @npa VARCHAR(100)
 
            DECLARE @localite VARCHAR(100)
 
 
 
            DECLARE curseur_adresse CURSOR FOR SELECT * FROM [dbo].Split (@Adresse_auteur_plans,',')
 
            OPEN curseur_adresse
 
            FETCH curseur_adresse INTO @rue, @noRue, @npa, @localite
 
            WHILE @@FETCH_STATUS = 0
 
            BEGIN
 
 
 
                        FETCH curseur_adresse INTO @rue, @noRue, @npa, @localite
 
            END
 
 
 
            CLOSE curseur_auteur
 
            DEALLOCATE curseur_auteur
 
 
 
            DECLARE @affaireId NUMERIC(19)
 
            DECLARE @adresseId NUMERIC(19)
 
            DECLARE @actualAuteurId NUMERIC(19)
 
 
 
 
 
            SET @affaireId = (SELECT (affaireID) FROM Affaire WHERE affaireNum = @Numero_affaire)
 
    SET @actualAuteurId = (SELECT (auteurs_auteurId) FROM Affaire_AuteurPlans WHERE affaire_affaireId = @Numero_affaire)
 
            SET @adresseId = (SELECT (adresseID) FROM Adresse, AuteurPlans WHERE auteurId = @actualAuteurId)
 
 
 
            UPDATE Adresse SET adresseLocalite = @localite, adresseRueNumero = @noRue, adresseNumPostal = @npa , adresseRue = @rue WHERE adresseID = @adresseId
 
            UPDATE AuteurPlans SET  nom = @nom, auteurPrenom = @prenom WHERE auteurId = @actualAuteurId
 
END
 
 
 
 
 
USE [extJaquetA]
 
GO
 
/****** Object:  UserDefinedFunction [dbo].[Split]    Script Date: 03/11/2009 18:02:57 ******/
 
SET ANSI_NULLS ON
 
GO
 
SET QUOTED_IDENTIFIER ON
 
GO
 
 
 
ALTER FUNCTION [dbo].[Split] (    
 
    @RowData NVARCHAR(MAX),
 
    @Delimeter NVARCHAR(MAX)
 
)
 
RETURNS @RtnValue TABLE (
 
    ID INT IDENTITY(1,1),
 
    Data NVARCHAR(MAX)
 
) 
 
AS
 
BEGIN 
 
    DECLARE @Iterator INT
 
    SET @Iterator = 1
 
 
 
    DECLARE @FoundIndex INT
 
    SET @FoundIndex = CHARINDEX(@Delimeter,@RowData)
 
 
 
    WHILE (@FoundIndex>0)
 
    BEGIN
 
        INSERT INTO @RtnValue (data)
 
        SELECT 
 
            Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, @FoundIndex - 1)))
 
 
 
        SET @RowData = SUBSTRING(@RowData,
 
                @FoundIndex + DATALENGTH(@Delimeter) / 2,
 
                LEN(@RowData))
 
 
 
        SET @Iterator = @Iterator + 1
 
        SET @FoundIndex = CHARINDEX(@Delimeter, @RowData)
 
    END
 
 
 
    INSERT INTO @RtnValue (Data)
 
    SELECT Data = LTRIM(RTRIM(@RowData))
 
 
 
    RETURN
 
END
et les données qui de test qui sont passées :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
msProcedure.setString(1, "0910001");
 
msProcedure.setString(2, "Hilton, Paris");
 
msProcedure.setString(3, "rue de l''Hotel, 21, 66650, Paris");
 .....