Re: tableau procédure

From: "thomas(dot)silvi" <thomas(dot)silvi(at)laposte(dot)net>
To: david bigand forum <dforums(at)vieonet(dot)com>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: tableau procédure
Date: 2005-11-22 19:33:48
Message-ID: 4383729C.5040408@laposte.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

david bigand forum a écrit :

>Bonjour
>
>Et merci pour ces explications détaillées, en faite je me prenais la tête à
>cause des tableaux sql qui commence à 1 et non à 0.
>
>J'ai une autre question.
>
>Dans ma procédure je construis dynamiquement une requête, comment pourrais
>je faire pour voir le résultat de la construction de cette requête pour
>vérifier si cette requête est correcte. Vers ou je peux faire un output et
>comment/ou je peux le récupérer.
>
>

2 solutions me viennent a l'esprit :
- afficher la requete sur la sortie standard avec RAISE NOTICE
- logguer la requete dans une table

CREATE TABLE trace
(
cmd VARCHAR(500) NULL,
date TIMESTAMP
);

CREATE OR REPLACE FUNCTION test_dyn(varchar(16))
RETURNS INTEGER AS
$$
DECLARE
v_table ALIAS FOR $1;
v_req_tmp VARCHAR;
BEGIN
v_req_tmp := 'SELECT * FROM ' || v_table;

-- solution 1

RAISE NOTICE 'DEBUG: %', v_req_tmp;

-- solution 2

INSERT INTO trace (cmd, date)
SELECT CAST (v_req_tmp AS VARCHAR(500)), now();

EXECUTE v_req_tmp;

RETURN (0);
END
$$ LANGUAGE 'plpgsql';

SELECT test_dyn('pg_class');

SELECT *
FROM trace;

>Cordialement
>
>David
>
>-----Message d'origine-----
>De : pgsql-fr-generale-owner(at)postgresql(dot)org
>[mailto:pgsql-fr-generale-owner(at)postgresql(dot)org] De la part de thomas.silvi
>Envoyé : dimanche 20 novembre 2005 14:00
>À : david forums
>Cc : pgsql-fr-generale(at)postgresql(dot)org
>Objet : Re: [pgsql-fr-generale] tableau procédure
>
>david forums a écrit :
>
>
>
>>bonjour
>>
>>Savez s'il est possible de prendre en argument d'une procédure un
>>tableau.
>>
>>
>>
>oui. lire la section 37.1.2. Arguments Supportés et Types de Données
>Résultats
>
>par exemple sur
>http://traduc.postgresqlfr.org/pgsql-7.4.9-fr/plpgsql.html#PLPGSQL-ARGS-RESU
>LTS
>
>
>
>>J'aimerai créé une function du type :
>>CREATE FUNCTION CHECKIPVALIDITY ( inet in_ip, varchar[] in_data,
>>varchar in_table)
>> RETURNS boolean
>> AS ''
>>
>>
>>
>Sous PostgreSQL 8.0.1, ce bout de de code fonctionne :
>
>
>CREATE OR REPLACE FUNCTION CHECKIPVALIDITY (inet, varchar[], varchar)
>RETURNS BOOLEAN AS
>$$
>DECLARE
> in_ip ALIAS FOR $1;
> in_data ALIAS FOR $2;
> in_table ALIAS FOR $3;
> tmp VARCHAR;
>BEGIN
>
> tmp := in_data[1];
>
> RAISE NOTICE 'DEBUG: %', tmp;
>
> RETURN (TRUE);
>END
>$$ LANGUAGE 'plpgsql';
>
>
>SELECT CHECKIPVALIDITY('127.0.0.1', '{"abc", "def"}', 'matable');
>
>
>
> Bonne journee,
>
> Thomas
>
>
>
>>merci
>>
>>David
>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 5: don't forget to increase your free space map settings
>>
>>
>>
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 2: Don't 'kill -9' the postmaster
>
>
>
>

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message thomas.silvi 2005-11-22 21:05:33 Re: pgsql : relation does not exist ==> uniquement
Previous Message tzacos 2005-11-22 17:24:07 [Fwd: Re: Donnees dans deux serveurs differents]