Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/07/2006, 16h39   #1
Membre habitué
 
Avatar de agougeon
 
Inscription : mai 2005
Messages : 253
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 253
Points : 106
Points : 106
Par défaut [TSQL][ASE]debutant procedure stocké

bonjour je suis débutant en procedure stocké... je travail avec une base sybase
pour commencer je chercher a réaliser une procedure simple qui prend en parametre des dates (date de debut et date de fin) et une frequence et dans une boucle while d'afficher toutes les dates qui sont entre date de debut et date de fin à la bonne frequence.
voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
CREATE procedure proc_test
(
	@DATE_DEBUT		datetime,
	@DATE_FIN		datetime,
	@COD_FREQ		varchar(4)
)
AS
begin
declare	@DATE_EVT	datetime
SELECT @DATE_EVT=@DATE_FIN
 
	while (datediff(day,@DATE_EVT,@DATE_FIN) <> 0)
	begin
		SET @DATE_EVT = dateadd(@COD_FREQ, 1, @DATE_EVT)
		print 'date evt : ' + @DATE_EVT
	end
end
la procedure ne passe pas...
Mon probleme ensuite sera d'appeler cette procedure... comment faire
Mon idée :
Code :
1
2
3
4
 
execute proc_test @DATE_DEBUT=(SELECT date_debut FROM TABLE WHERE id=1),
@DATE_FIN=(SELECT date_fin FROM TABLE WHERE id=1),
@COD_FREQ=(SELECT cod_freq FROM TABLE WHERE id=1)
Bon, je suis conscient d'etre vraiment débutant, alors n'hesité pas a m'insulter sur le code


Merci.
agougeon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 16h59   #2
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
Sans me pencher sur la logique ... ca semble venir de MS-SQL...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE procedure proc_test
(
	@DATE_DEBUT		datetime,
	@DATE_FIN		datetime,
	@COD_FREQ		varchar(4)
)
AS
begin
declare	@DATE_EVT	datetime
declare	@DATE_EVT_V	varchar(30)
 
 
SELECT @DATE_EVT=@DATE_FIN
 
	while (datediff(day,@DATE_EVT,@DATE_FIN) <> 0)
	begin
		SELECT @DATE_EVT = dateadd(@COD_FREQ, 1, @DATE_EVT)
		SELECT @DATE_EVT_V = 'date evt : ' + convert(varchar(30),  @DATE_EVT, 114)
 
		print @DATE_EVT_V
	end
end
Puis l'appel

Code :
1
2
3
4
5
6
7
8
declare @DD, @DF datetime
 
SELECT @DD = date_debut, 
       @DF = date_fin ,
       @CF = code_freq
FROM TABLE WHERE id=1
 
exec proc_test @DATE_DEBUT=@DD, @DATE_FIN=@DF, @COD_FREQ=@CF
__________________
Sr DBA Oracle / Sybase / MS-SQL / DB2 / Informix / Postgresql
Administrateur SAP
Mes articles

Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 17h05   #3
Membre habitué
 
Avatar de agougeon
 
Inscription : mai 2005
Messages : 253
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 253
Points : 106
Points : 106
merci pour ta réponse.
Mais quand j'execute la creation de la procedure, le requeteur me retourne
Citation:
<eb1>Errors occurred.</eb1>
et que veux tu dire par "ca semble venir de MS-SQL..."

Merci
agougeon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2006, 09h00   #4
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
Quelle version ?
Que vous retourne

MS-SQL car il y avait des SET, bien spécifiques à un portage de MS-SQL à Sybase.
__________________
Sr DBA Oracle / Sybase / MS-SQL / DB2 / Informix / Postgresql
Administrateur SAP
Mes articles

Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 07h56   #5
Membre habitué
 
Avatar de agougeon
 
Inscription : mai 2005
Messages : 253
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 253
Points : 106
Points : 106
je travail avec la version :
Citation:
Adaptive Server Enterprise/12.0.0.8/P/EBF 11874 ESD2/Sun_svr4/OS 5.7/2058/64bit/FBO/Thu May 20 09:12:03 2004
agougeon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 08h16   #6
Membre habitué
 
Avatar de agougeon
 
Inscription : mai 2005
Messages : 253
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 253
Points : 106
Points : 106
j'ai fais une nouvelle procédure qui me retourne la même erreur :

Code :
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
 
CREATE procedure syn_insert_cap_evt
(
	@DATE_DEBUT		datetime,
	@DATE_FIN		datetime,
	@COD_FREQ		varchar(4)
)
AS
begin
declare	@DATE_EVT	datetime
declare	@DATE_EVT_V	varchar(30)
 
SELECT @DATE_EVT=@DATE_DEBUT
 
		IF @COD_FREQ = 'TRIM'
			begin
				while datediff(trim,@DATE_EVT,@DATE_FIN) > 0
					begin
						print 'trim'
						SELECT dateadd(qq,1,@DATE_EVT)
					end
			end
 
		IF @COD_FREQ = 'YEAR'
			begin
				while datediff(trim,@DATE_EVT,@DATE_FIN) > 0
					begin
						print 'year'
						SELECT dateadd(yy,1,@DATE_EVT)
					end
			end
 
		IF @COD_FREQ = 'DAY'
			begin
				while datediff(trim,@DATE_EVT,@DATE_FIN) > 0
					begin
						print 'day'
						SELECT dateadd(day,1,@DATE_EVT)
					end
			end
end
Je pense aussi que le problème vient de l'affectation de la nouvelle valeur de @DATE_EVT.
Avec ce nouveau code, j'ai cependant le meme probleme :
Citation:
<eb1>Errors occurred.</eb1>
Merci
agougeon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 08h53   #7
Membre habitué
 
Avatar de agougeon
 
Inscription : mai 2005
Messages : 253
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 253
Points : 106
Points : 106
ok, j'ai reussi a resoudre mon problème, voici un code qui fonctionne :
Code :
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
 
CREATE procedure syn_insert_cap_evt
(
	@DATE_DEBUT		datetime,
	@DATE_FIN		datetime,
	@COD_FREQ		varchar(4)
)
AS
begin
declare	@DATE_EVT	datetime
declare	@DATE_EVT_V	varchar(30)
 
SET nocount ON
 
SELECT @DATE_EVT=@DATE_DEBUT
 
		IF @COD_FREQ = 'YEAR'
			begin
				while @DATE_FIN > @DATE_EVT
					begin
						SELECT @DATE_EVT_V=convert(varchar(8),@DATE_EVT,112)
						SELECT @DATE_EVT = dateadd(yy,1,@DATE_EVT)
						print @DATE_EVT_V
					end
			end
 
		IF @COD_FREQ = 'TRIM'
			begin
				while @DATE_FIN > @DATE_EVT
					begin
						SELECT @DATE_EVT_V=convert(varchar(8),@DATE_EVT,112)
						SELECT @DATE_EVT = dateadd(qq,1,@DATE_EVT)
						print @DATE_EVT_V
					end
			end
 
		IF @COD_FREQ = 'DAY'
			begin
				while @DATE_FIN > @DATE_EVT
					begin
						SELECT @DATE_EVT_V=convert(varchar(8),@DATE_EVT,112)
						SELECT @DATE_EVT = dateadd(day,1,@DATE_EVT)
						print @DATE_EVT_V
					end
			end
end
Merci
agougeon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h04.


 
 
 
 
Partenaires

Hébergement Web