是否可以在单个存储过程中创建多个表? 我正在创建一个创建表的函数,我像表参数一样传递表名,但我想一次创建3个表,这是我的存储过程:
CREATE OR REPLACE FUNCTION create_tables(t_name varchar(30))
RETURNS VOID AS
$func$
BEGIN
EXECUTE format('
CREATE TABLE IF NOT EXISTS %I (
cond_a02_cabecera_id PRIMARY KEY,
cond_a02_cabecera_nombre_archivo varchar(100),
cond_a02_cabecera_centro varchar(100),
cond_a02_cabecera_longitud int,
cond_a02_cabecera_archivo_activo boolean,
cond_a02_cabecera_fechae date,
cond_a02_cabecera_fechad date
)', t_name);
END
$func$ LANGUAGE plpgsql;
我正在使用JDBC创建数据库,我尝试在存储过程中再次使用“create table”,但它只创建第一个。
答案 0 :(得分:3)
当然,应该可以。
CREATE OR REPLACE FUNCTION public.create_tables(t_name character varying)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
EXECUTE format('
CREATE TABLE IF NOT EXISTS %I (a int);
CREATE TABLE IF NOT EXISTS %I (a int);
CREATE TABLE IF NOT EXISTS %I (a int);',
t_name || 1, t_name || 2, t_name || 3);
END
$function$;
postgres=# select create_tables('foo'); ┌───────────────┐ │ create_tables │ ╞═══════════════╡ │ │ └───────────────┘ (1 row) postgres=# \dt List of relations ┌────────┬──────┬───────┬───────┐ │ Schema │ Name │ Type │ Owner │ ╞════════╪══════╪═══════╪═══════╡ │ public │ foo1 │ table │ pavel │ │ public │ foo2 │ table │ pavel │ │ public │ foo3 │ table │ pavel │ └────────┴──────┴───────┴───────┘ (3 rows)