最近我在postgresql中创建了一个存储过程,用java中的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 (tname_test varchar(100));
CREATE TABLE IF NOT EXISTS %I (tname_nos int);
CREATE TABLE IF NOT EXISTS %I (tname_pro int);',
t_name || 'cabecera', t_name || 'contenido', t_name || 'procesado');
END
$function$;
类似的东西,即时创建大量具有相同属性的表格,所以我想用表格名称来区分我的名字atributtes。
感谢
答案 0 :(得分:0)
如果我能正确得到你需要的东西,你可以使用quote_ident
这是一个代码示例:
DO $$
DECLARE table_name text:= 'demo';
DECLARE column_name text:= 'column_';
BEGIN
EXECUTE 'CREATE TEMP TABLE ' || quote_ident(table_name || '_test')||' (' ||quote_ident(column_name||'a')|| ' integer,' ||quote_ident(column_name||'b')|| ' integer)';
END $$;
SELECT * FROM demo_test;