Ala*_*Cor 11 postgresql plpgsql functions postgresql-9.2
我想创建一个函数,以便创建一个具有特定结构的表,将表名的一部分作为参数传递,因此表名是 t_ 。与此类似:
CREATE OR REPLACE FUNCTION create_table_type1(t_name VARCHAR(30)) RETURNS VOID AS $$
BEGIN
EXECUTE "CREATE TABLE IF NOT EXISTS t_"|| t_name ||"
(
id SERIAL,
customerid INT,
daterecorded DATE,
value DOUBLE PRECISION,
PRIMARY KEY (id)
)"
END
$$ LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
SELECT create_table_type1('one');
Run Code Online (Sandbox Code Playgroud)
是否可以?
Erw*_*ter 23
答案是肯定的。:)
CREATE OR REPLACE FUNCTION create_table_type1(t_name varchar(30))
RETURNS VOID
LANGUAGE plpgsql AS
$func$
BEGIN
EXECUTE format('
CREATE TABLE IF NOT EXISTS %I (
id serial PRIMARY KEY,
customerid int,
daterecorded date,
value double precision
)', 't_' || t_name);
END
$func$;
Run Code Online (Sandbox Code Playgroud)
我正在使用format()
with%I
来清理表名并避免 SQL 注入。需要 PostgreSQL 9.1 或更高版本。
确保对数据使用单引号( ''
)。双引号 ( ""
) 用于 SQL 中的标识符。