2017-05-16 11 views

Antwort

0

Hier ist ein Beispiel, das möglicherweise verbessert werden könnte.

Vorsicht vor SQL-Injektion!

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;$$; 

Es kann wie folgt verwendet werden: für die Antwort

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

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

Dank – Verver

Verwandte Themen