2010-02-16 4 views
11

Je travaille actuellement sur une servlet de génération de rapports qui agglomère les informations de plusieurs tables et génère un rapport. En plus de renvoyer les lignes résultantes, je les stocke également dans une table de rapports afin qu'elles n'aient pas besoin d'être régénérées plus tard, et persisteront si les tables dont elles sont tirées sont effacées. Pour ce faire, ce dernier j'ai une déclaration de la forme (NB: x est externe générée et en fait une constante dans cette déclaration):Retour des lignes insérées dans PostgreSQL

INSERT INTO reports 
    (report_id, col_a, col_b, col_c) 
SELECT x as report_id, foo.a, bar.b, bar.c 
FROM foo, bar 

Cela fonctionne très bien, mais je besoin d'une deuxième requête pour retourner effectivement le résultat rangées en arrière, par exemple

SELECT col_a, col_b, col_c 
FROM reports 
WHERE report_id = x 

Cela fonctionne bien et puisqu'il ne concerne que la seule table, ne doit pas être cher, mais il semble que je devrais pouvoir revenir directement les résultats de l'insertion en évitant la deuxième requête. Y a-t-il une syntaxe pour ce faire que je n'ai pas réussi à trouver? (Je devrais noter, je suis assez nouveau au travail de DB, ainsi si la bonne réponse est juste d'exécuter la deuxième requête, car elle est seulement légèrement plus lente, ainsi soit)

Répondre

20

Dans PostgreSQL avec la version> = 8.2, vous peut utiliser cette construction:

INSERT INTO reports (report_id, col_a, col_b, col_c) 
SELECT x as report_id, foo.a, bar.b, bar.c 
FROM foo, bar 
RETURNING col_a, col_b, col_c 
+0

Nous sommes en cours d'exécution afin que 8.4 est parfait, merci. – Dusty

+0

+1 pour une réponse solide et (aussi) mention des exigences de version (bien que la plupart des gens devraient être au moins de 8,3 maintenant) – ChristopheD

3

ou sans sélection:

INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets') 
    RETURNING did; 

documentation

+1

Je crois que l'Op a demandé de renvoyer toute la ligne, qui serait 'RETURNING *; – BishopZ

Questions connexes