IF - THEN - ELSE, syntaxe particulière ? [postgresql/pgsql] - SQL/NoSQL - Programmation
Marsh Posté le 05-12-2003 à 17:06:29
C'est quoi "begin work" ?
Le caractère d'échapemment pour ' c'est pas '' au lieu de \' ?
select AjoutReservation(0,0,0,0,0) ;
Ta fonction est déclarée en "returns void". Tu attends quoi dans le select ?
http://cfeweb1/pgsql_doc/plpgsql-declarations.html
Marsh Posté le 05-12-2003 à 17:13:59
begin work > début d'une transaction non ?
Pour le caractère d'échappement, je pense que c'est ca, je vais vérifier. Mais j'ai fait un if ... then return ; et ca fait la même chose.
Je n'attends rien dans le select, c'est juste pour tester ma fonction en fait =)
Marsh Posté le 05-12-2003 à 17:19:46
J'ai essayé d'épurer afin d'y voir plus clair, j'ai enlevé les trucs qui me semblaient non sûrs :
|
L'erreur se situe vers la ligne 30.
Je me suis rendu sur un equivalent de ta page (http://www.postgresql.org/docs/current/static/plpgsql-declarations.html), je l'avais déja parcouru, mais je le fais une fois de plus, j'ai sans doute oublié quelque chose, merci !
Marsh Posté le 05-12-2003 à 17:29:49
J'ai toujours un doute su le begin work !
Y'a 2 begin et un seul end...
Marsh Posté le 05-12-2003 à 17:35:01
Citation : "It is important not to confuse the use of BEGIN/END for grouping statements in |
http://www.mail-archive.com/pgsql- [...] 12011.html
En plus, normalement, une transaction c'est entre BEGIN WORK et COMMIT WORK.
Bon çà c'était pour postgres 7.2. Je sais pas pour les plus récentes.
Marsh Posté le 05-12-2003 à 17:35:28
Il me semble que le begin work est lié aux commit/rollback que tu peux recontrer après. En tout cas, dans le bouquin que je feuillete en plus de la doc sur internet, c'est comme ca qu'il font. Je pense qu'il faut de toute facon un mot clé , comment ferait-on pour différencier une transaction d'une procédure stockée ?
Marsh Posté le 05-12-2003 à 17:39:03
Je viens de lire ton post... Ca chamboule un peu tout ce que j'avais mis en place
En gros, il faut que j'entoure l'appel de ma fonction par un begin work et un commit work afin d'arriver à mes fins, c ca ?
Merci pour le temps que tu m'as consacré.
Marsh Posté le 05-12-2003 à 17:39:38
T'as pas compris :
Une fonction s'éxécute déjà DANS une transaction. Et comme postgresql ne permet pas les transactions imbriquée (en 7.2 en tout cas), ben forcément, tu peut pas faire un begin work dans une fonction.
EDIT : Bon, çà y est t'as appris à lire
Marsh Posté le 05-12-2003 à 17:41:41
Evadream -jbd- a écrit : En gros, il faut que j'entoure l'appel de ma fonction par un begin work et un commit work afin d'arriver à mes fins, c ca ? |
J'en sais rien, mais je ne pense pas !
Il semble qu'il y ait Implicitement une transaction quand tu appelles une fonction...
Marsh Posté le 05-12-2003 à 17:43:39
|
Tjs une erreur vers la ligne 30 :'|
Marsh Posté le 05-12-2003 à 17:51:53
La ligne 30, à mon avis, c'est plutôt le "IF res1 < res 2"
parce-que je pense qu'il prends en compte la ligne 1 au niveaux du CREATE FUNCTION
En fait y'a bien une erreur : y'a un espace entre "res" et "2"
Bon en plus, moi je l'écrirais comme çà :
Code :
|
Marsh Posté le 05-12-2003 à 18:02:35
Manque un ; avant le IF
Marsh Posté le 05-12-2003 à 18:32:06
Remontre ton code...
Marsh Posté le 05-12-2003 à 18:36:25
|
Marsh Posté le 05-12-2003 à 18:38:41
@IdClasse ?
Marsh Posté le 05-12-2003 à 18:43:50
Bon, ca marche tjs pas, mais je vais me prendre une pause, parce que je ne vois plus rien, alors que ce sont des erreurs que je pourrais voir moi même...
Je te tiens au courant, et merci !
Marsh Posté le 05-12-2003 à 18:57:29
Je suis désolé de demander tout le temps plein de trucs, je suis sur plusieurs front en même temps et j'ai vraiment du mal à tomber sur l'information qui m'interesse
Comment je peux faire pour faire des select, insert into ... à partir d'une autre base locale qui aurait comme nom essai2 apr exemple ?
J'ai entreapercu en SQL serveur la syntaxe suivante :
INSERT INTO [Essai2].dbo.MaTable .... |
y'a t'il un équivalent ?
Marsh Posté le 05-12-2003 à 19:31:27
Je ne sais pas !
Marsh Posté le 05-12-2003 à 16:42:23
Hello, j'ai le nez dans la doc depuis plusieurs heures, mais je m'en sors pas :
CREATE FUNCTION AjoutReservation (
integer,
integer,
integer,
integer,
integer
) returns void as '
declare
V_IdVol alias for $1 ;
V_IdClient alias for $2 ;
V_IdTypeDeplacement alias for $3 ; -- ligne 15
V_IdLieuReservation alias for $4 ;
V_IdClasse alias for $5 ;
begin
begin work ;
IF (
SELECT count(*)
From Reservations r
WHERE IdVol = V_IdVol AND IdClasse = V_IdClasse ;
)
<
(
SELECT sum(NbrPlaceClasse)
From Vols v
INNER JOIN Appareils a ON a.IdAppareil = v.IdAppareil
INNER JOIN ClassesTypesAppareil cta ON cta.IdTypeAppareil = a.IdTypeAppareil and cta.IdClasse = V_IdClasse
WHERE v.IdVol = V_IdVol ;
)
THEN
raise notice \'THEN\' ;
commit ;
return ;
ELSE
raise notice \'ELSE\' ;
END IF ;
commit ;
return ;
end ; '
language 'plpgsql' ;
L'erreur est la suivante :
=> select AjoutReservation(0,0,0,0,0) ;
ERROR: syntax error at or near ""
CONTEXT: compile of PL/pgSQL function "ajoutreservation" near
line 15
=>
J'essaye de faire qqchose d'impossible ?
Merci à vous, @+
Message édité par Evadream -jbd- le 05-12-2003 à 16:45:00