2017-05-16 55 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