Apply function to temp table inside another function
我是在 postgresql 中创建函数的新手。我使用的版本相当旧。它是 8.2.15(不是我的选择,而是我的组织的)。以下示例尝试将一个函数应用于另一个函数中的临时表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | -- 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; |
当我跑步时
1 | SELECT outer_func(); |
它吐出一个错误:
1 | COLUMN"my_temp" does NOT exist |
但是如果我像下面这样单独使用inner_func,它就可以工作:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
我怎样才能使这个inner_func 在outer_func 中工作?有什么想法吗?
看来问题出在这里:
1 2 3 4 5 | EXECUTE 'SELECT inner_func(' || quote_ident('my_temp') || ')'; => EXECUTE 'SELECT inner_func(quote_ident(' || quote_literal('my_temp') || '));'; |
DBFiddle 演示