Quelqu'un pourrait-il me signaler ce qui ne va pas avec le code suivant? Il ressemble à la syntaxe parfaitement légale, mais quand je le lance je reçois:Essayer de définir la variable à partir de la mise à jour ne fonctionne pas
ERROR: syntax error at or near "conctest"
LINE 7: ret_id := (update conctest set id=id+1 where name = 'Billy ...
^
********** Error **********
ERROR: syntax error at or near "conctest"
SQL state: 42601
Character: 66
Code brisé:
DO $$
declare ret_id integer;
begin
ret_id := (update conctest set id=id+1 where name = 'Billy Bob' returning id);
DROP TABLE IF EXISTS tmpTable;
CREATE TEMPORARY TABLE tmpTable AS
select ret_id;
END $$;
select * from tmpTable;
Cela fonctionne:
DO $$
declare ret_id integer;
begin
update conctest set id = id + 1 where name = 'Billy Bob';
ret_id := (select id from conctest where name = 'Billy Bob');
DROP TABLE IF EXISTS tmpTable;
CREATE TEMPORARY TABLE tmpTable AS
select ret_id;
END $$;
select * from tmpTable;
Soit dit en passant, je copiais la mise à jour clause de la fenêtre de requête SQL de travail et ajouté manuellement " returning id"
donc il n'y a pas de caractères étranges là-dedans. Qu'est-ce qui ne va pas?
TVMIA,
Adam.
Merci, Vao - qui fonctionne. Je ne peux pas voir cette syntaxe sur https://www.postgresql.org/docs/current/static/sql-update.html. Je suppose que c'est sous-entendu "output_expression" mais toujours un peu ésotérique - si vous ne le savez pas, vous êtes dans le ruisseau. –
fair point - J'ai ajouté un lien vers la documentation nécessaire. l'attribution de la valeur à la variable est la partie de plpgsql et votre lien est pour la commande de mise à jour de SQL –