0
我需要將動態數量的參數傳遞給函數及其數據類型,然後返回一個具有這些參數的表格作爲字段。 是否有可能在postgres中做到這一點? 任何想法或例子讚賞將動態參數數量傳遞給函數
我需要將動態數量的參數傳遞給函數及其數據類型,然後返回一個具有這些參數的表格作爲字段。 是否有可能在postgres中做到這一點? 任何想法或例子讚賞將動態參數數量傳遞給函數
這是一個可能可以改善的例子。
注意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 │ │
└────────┴─────────┴───────────┘
感謝您的答覆 – Verver