簡體   English   中英

在一個存儲過程中創建兩個或多個表

[英]Create two or more tables in a single stored procedure

是否可以在單個存儲過程中創建許多表? 我正在創建一個函數來創建表,我像參數一樣傳遞表名,但是我想一次創建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 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM