2017-08-15 1 views
0

Kürzlich habe ich eine gespeicherte Prozedur in Postgresql erstellt, um Tabellen mit jdbc in Java zu erstellen, übergeben ich den Tabellennamen wie ein Parameter in einer Funktion und es scheint gut gehen, aber es ist möglich, den Tabellennamen übergeben in der Abfrage erstellen Tabelle? Ich meine:postgresql mit Parameter in Abfrage

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$; 

etwas wie das, im ein viele Tische mit den gleichen attributtes erstellen gehen, damit ich einander mit dem Tabellennamen differenciate hinwollen Faust in meinem Namen atributtes.

dank

Antwort

0

Wenn ich das, was Sie richtig benötigen, können Sie quote_ident

Hier verwenden ist ein Codebeispiel:

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;