在单个存储过程中创建两个或多个表
Posted
技术标签:
【中文标题】在单个存储过程中创建两个或多个表【英文标题】:Create two or more tables in a single stored procedure 【发布时间】:2017-08-15 17:01:52 【问题描述】:是否可以在一个存储过程中创建多个表? 我正在制作一个创建表的函数,我将表名作为参数传递,但我想一次创建 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 来创建数据库,我尝试将“创建表”再次放入存储过程中,但它只创建第一个。
【问题讨论】:
【参考方案1】:当然,应该可以。
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=# 选择 create_tables('foo');
┌────────────────┐
│ create_tables │
╞═══════════════╡
│ │
└────────────────┘
(1 行)
postgres=#\dt
关系列表
┌────────┬──────┬────────┬────────┐
│ Schema │ Name │ Type │ Owner │
╞════════╪══════╪═══════╪═══════╡
│ public │ foo1 │ table │ pavel │
│ public │ foo2 │ table │ pavel │
│ public │ foo3 │ table │ pavel │
└────────┴──────┴────────┴────────┘
(3 行)
【讨论】:
以上是关于在单个存储过程中创建两个或多个表的主要内容,如果未能解决你的问题,请参考以下文章