web-dev-qa-db-fra.com

Variable de table PostgreSQL

Y a-t-il quelque chose comme des variables de table dans T-SQL?
Dans Sql Server, cela ressemble à ceci:

DECLARE @ProductTotals TABLE
(
  ProductID int,
  Revenue money
)

Ensuite, dans la procédure, je peux:

INSERT INTO @ProductTotals (ProductID, Revenue)
  SELECT ProductID, SUM(UnitPrice * Quantity)
  FROM [Order Details]
  GROUP BY ProductID

Et manipulez avec cette variable comme une table ordinaire.

Voici la description: http://odetocode.com/Articles/365.aspx

19
Yavanosta

Comme @ Clodoaldo a commenté : utilisez une table temporaire dans PostgreSQL. Pour votre exemple:

CREATE TEMP TABLE product_totals (
   product_id int
 , revenue money
);

Plus d'informations dans le manuel sur CREATE TABLE où vous pouvez trouver cette citation:

Si spécifié, la table est créée en tant que table temporaire. Les tables temporaires sont automatiquement supprimées à la fin d'une session, ou éventuellement à la fin de la transaction en cours (voir ON COMMIT ci-dessous). Les tables permanentes existantes portant le même nom ne sont pas visibles par la session en cours tant que la table temporaire existe, sauf si elles sont référencées avec des noms qualifiés par le schéma. Tous les index créés sur une table temporaire sont également automatiquement temporaires.

Les tables non journalisées sont une fonctionnalité quelque peu apparentée de PostgreSQL 9.1. Ils économisent les écritures sur disque en n'écrivant pas sur WAL . Voici une discussion des fonctionnalités par Robert Haas .

A part, concernant le type de données money:

23

Vous pouvez vous tableau de type composite à la place

CREATE TABLE xx(a int, b int);

CREATE OR REPLACE FUNCTION bubu()
RETURNS void AS $$
DECLARE _x xx[];
BEGIN
   _x := ARRAY(SELECT xx FROM xx);
   RAISE NOTICE '_x=%', _x;
   ...
6
Pavel Stehule