2017-03-17 13 views
-1
私は別のテーブル(sub_tbl)に1台(main_tbl)からデータをコピーする必要が

に挿入データのpostgresql、動的に作成されたテーブル

CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS 
$example_table$ 
DECLARE 
    temp text; 
BEGIN 
    temp = 'SELECT device_id FROM company ORDER BY id DESC LIMIT 1'; 
    INSERT INTO temp(emp_id, entry_date, name,age)  VALUES(new.id,current_timestamp, new.name, new.age); 
RETURN NEW; 
END; 
$example_table$ LANGUAGE plpgsql; 

temp = 'SELECT device_id FROM company ORDER BY id DESC LIMIT 1';この最後のmain_tblからの値と一時変数に格納]を選択します。

は今、私は

ERROR: relation "temp" does not exist

+0

"*これはmain_tblから最後の値を選択し、一時変数*に格納されます。それは文字列 '' SELECT device_id FROM company ORDER BY id DESC LIMIT 1 ';を変数 '' temp'に格納します。あなたが 'select device_id into temp from ... 'をしたいとします。https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROWまた、テーブル' tempを作成する必要があります'を挿入する前に –

+0

しかし、tempは結果を格納する変数です。 – Ashish

+0

正確に。だからあなたはそれをどのようにテーブルにすると思いますか? –

答えて

0

@a_horse_with_no_nameは既にこれを行う方法を指摘しています。私が正しく理解していれば、dv002テーブルはすでに作成されています。

CREATE OR REPLACE FUNCTION auditlogfunc() 
RETURNS trigger AS 
$body$ 

DECLARE 
    get_last_value integer; 
    your_table_name text := 'dv002'; 
BEGIN 

    SELECT id into get_last_value FROM tb_main_table ORDER BY id DESC LIMIT 1; 
    EXECUTE format('insert into %s(emp_id, entry_date, name,age) VALUES ($1,$2,$3,$4,$5)', your_table_name) using get_last_value,new.id,current_timestamp, new.name, new.age; 

RETURN new; 
$body$ 
LANGUAGE plpgsql; 
+0

@a_horse_with_no_name:ありがとうございました。お元気です... – Ashish

0

は変数でクエリの結果を格納する方法hereを参照してください。..一時テーブルにmain_tblからデータをコピーします。

here SQLコマンドとして文字列を実行する方法を参照してください。

変数にquote_ident()関数を使用してから、SQLクエリ文字列に識別子として含めるようにしてください。あなたはSQLインジェクションから安全です。

関連する問題