2017-05-16 56 views
0

我需要将动态数量的参数传递给函数及其数据类型,然后返回一个具有这些参数的表格作为字段。 是否有可能在postgres中做到这一点? 任何想法或例子赞赏将动态参数数量传递给函数

回答

0

这是一个可能可以改善的例子。

注意SQL注入!

CREATE OR REPLACE FUNCTION create_table(
    tabname text, 
    VARIADIC coldef text[] 
) RETURNS void 
    LANGUAGE plpgsql STRICT AS 
$$DECLARE 
    l integer; 
    i integer; 
    sql text; 
    sep text := ''; 
BEGIN 
    l := array_upper(coldef, 1); 

    IF l % 2 <> 0 THEN 
     RAISE EXCEPTION 'Number of arguments must be odd'; 
    END IF; 

    sql := 'CREATE TABLE ' || quote_ident(tabname) || '('; 

    FOR i IN 1 .. l/2 LOOP 
     sql := sql || sep || quote_ident(coldef[2*i-1]) || ' ' || quote_ident(coldef[2*i]); 
     sep := ', '; 
    END LOOP; 

    sql := sql || ')'; 

    EXECUTE sql; 
END;$$; 

它可以这样使用:

test=> SELECT create_table('tabname', 'col1', 'int4', 'col2', 'text'); 

test=> \d tabname 
    Table "laurenz.tabname" 
┌────────┬─────────┬───────────┐ 
│ Column │ Type │ Modifiers │ 
├────────┼─────────┼───────────┤ 
│ col1 │ integer │   │ 
│ col2 │ text │   │ 
└────────┴─────────┴───────────┘ 
+0

感谢您的答复 – Verver