Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 14/04/2011, 16h31   #1
Invité régulier
 
Inscription : février 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 41
Points : 8
Points : 8
Par défaut concatenation dans une variable de procédure stockée

Bonjour à tous,

Encore moi désolé c'est des questions un peu bête mais je n'y trouve aucune réponse

Je cherche à traduire ce passage dans une procédure écrite en T-SQL

Code sql :
1
2
3
4
CREATE procedure proc_paie_doublepaie_1003 @cigap char(2)    
AS
declare @date numeric(8)
SELECT @date = convert(numeric(8), ('20' + '1003'+ '01'))

Mis à part que j'ai une partie de ma date qui arrivera d'un paramètre passé dans ma procédure (moisDePaie).

J'ai testé pas mal de chose, des concat, des to_char
Code sql :
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
 
CREATE OR REPLACE procedure proc_paie_doublepaie 
(
	cigap	         IN number,
	moisDePaie  IN number)    
AS
BEGIN
 
declare date1 number
SELECT date1 = to_char(moisDePaie)|| to_char('01');
 
FOR rec IN
	(
		SELECT IDENT_NOM,     
			IDENT_IDENT,     
			AGENT_PAIE_NUMSS,     
			REFELT_CODE,     
			REFUP_CODE,     
			PAIE_MONTANT,     
			REFGRADE_CODE,     
			REFCSO_CODE,     
			AGENT_PAIE_ENTITE,     
			REFBUR_LIBELLE, 
			REFFONCTION_CODE
		FROM  DOUBLON_PAIE     
		WHERE AGENT_PAIE_CIGAP LIKE cigap
		AND AGENT_PAIE_AAAAMM = moisDePaie
		AND AGENT_DATE = date
		ORDER BY IDENT_NOM
		)
		loop
			dbms_output.put_line(rec.IDENT_NOM||' '|| rec.IDENT_IDENT||' '|| rec.AGENT_PAIE_NUMSS||' '|| rec.REFELT_CODE||' '|| rec.REFUP_CODE||' '|| rec.PAIE_MONTANT||' '|| rec.REFGRADE_CODE||' '|| rec.REFCSO_CODE||' '|| rec.AGENT_PAIE_ENTITE||' '|| rec.REFBUR_LIBELLE||' '|| rec.REFFONCTION_CODE);
  	end loop;
END proc_paie_doublepaie;

ou encore

Code sql :
SELECT date1 = concat((moisDePaie,'01'))

ou encore

Code sql :
SET date1 = to_char(moisDePaie) || to_char('01')

rien à faire j'ai les mêmes erreurs qui ressortent

Code sql :
1
2
3
4
5
6
 
Error(10,1): PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:     := . ( @ % ; NOT NULL range DEFAULT character The symbol ":= was inserted before "SELECT" to continue. 
 
Error(13,2): PLS-00103: Encountered the symbol "FOR" when expecting one of the following:     begin function pragma procedure subtype type <an identifier>    <a double-quoted delimited-identifier> current cursor delete    exists prior The symbol "begin" was substituted for "FOR" to continue. 
 
Error(35,25): PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:     ( begin case declare end exception exit for goto if loop mod    null pragma raise return select update while with    <an identifier> <a double-quoted delimited-identifier>    <a bind variable> << continue close current delete fetch lock    insert open rollback savepoint set sql execute commit forall    merge pipe purge

Je suis déprimé j'ai besoin de vous

Merci,
NarbO
NarbOni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 18h11   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 445
Points : 10 445
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Comme ceci (je ne vous refais pas mon laïus sur la mise en page, les nomenclatures & co, mais c'est toujours d'actualité) :
Code :
1
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE PROCEDURE proc_paie_doublepaie
(
    p$_cigap      IN number,
    p$_moisDePaie IN number
) AS
 
    v$_date1   number(8);
 
BEGIN
 
    v$_date1 := p$_moisDePaie * 100 + 1;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/04/2011, 09h32   #3
Invité régulier
 
Inscription : février 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 41
Points : 8
Points : 8
Bonjour,

Merci une nouvelle fois pour ton retour !
Néanmoins j'ai un soucis, car j'ai besoin d'utiliser cette donnée date1 pour la comparer dans un where (AND AGENT_DATE = date1)

Mais on dirait que ça ne fonctionne pas.. C'est pour ça que sous Sybase il se situe dans un SELECT..

Merci,
NarbO
NarbOni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h46   #4
Invité régulier
 
Inscription : février 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 41
Points : 8
Points : 8
Ok, finalement ça fonctionne mais je comprend pas vraiment pourquoi il ralait autant hier !

Encore une fois merci,

J'ai mis ce code là :
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
CREATE OR REPLACE procedure proc_paie_doublepaie 
(	moisDePaie IN number) AS
 
p$_date1 number(8);
BEGIN
 
p$_date1 := moisDePaie|| to_char('01');
FOR rec IN
(
SELECT ident_nom FROM doublon_paie WHERE agent_date = p$_date1
)
loop
  dbms_output.put_line('rec.ident_nom');
end loop;
 
END proc_paie_doublepaie;
NarbOni 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 01h14.


 
 
 
 
Partenaires

Hébergement Web