Je suis novice dans la création de fonctions dans postgresql. La version que j'utilise est plutôt ancienne. C'est 8.2.15 (pas mon choix, mais mon organisation). L'exemple suivant tente d'appliquer une fonction à une table temporaire dans une autre fonction.Application de la fonction à la table temporaire à l'intérieur d'une autre fonction
-- First function
create or replace function inner_func(_tbl anyelement)
RETURNS void AS
$$
BEGIN
EXECUTE 'ALTER TABLE ' || _tbl || ' ADD COLUMN d_amount INTEGER';
EXECUTE 'UPDATE ' || _tbl || ' SET d_amount = 2* amount';
RETURN;
END;
$$
LANGUAGE plpgsql volatile;
-- Second function
CREATE OR REPLACE FUNCTION outer_func()
RETURNS void AS
$$
BEGIN
DROP TABLE IF EXISTS my_temp;
CREATE TEMP TABLE my_temp
(id serial primary key,
amount integer
);
INSERT into my_temp (amount) values (10),(20);
-- now apply the inner_func right here
EXECUTE 'SELECT inner_func(' || quote_ident('my_temp') || ')';
RETURN;
END;
LANGUAGE plpgsql volatile;
Quand je lance
SELECT outer_func();
Il recrache une erreur:
column "my_temp" does not exist
Mais le inner_func fonctionne si je l'utilise lui-même comme ce qui suit:
create temp table my_temp2
(id serial primary key,
amount integer
);
INSERT INTO my_temp2 (amount) values (10),(20);
SELECT inner_func(quote_ident('my_temp2'));
SELECT * from my_temp2;
id amount d_amount
1 10 20
2 20 40
Comment faire pour que inner_func fonctionne à l'intérieur outer_func? Une idée?
Merci lad2025. Il fonctionne comme un charme! – midtownguru
@midtownguru heureux d'entendre que je pourrais aider :) – lad2025