【问题标题】: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 来创建数据库,我尝试将“创建表”再次放入存储过程中,但它只创建第一个。

【问题讨论】:

    标签: java postgresql jdbc plpgsql dynamic-sql


    【解决方案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 行)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2017-02-27
      • 1970-01-01
      • 2018-04-07
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多